gd_int.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*!
  2. *******************************************************************************
  3. **
  4. ** \file gd_int.h
  5. **
  6. ** \brief INT (interrupt) driver
  7. **
  8. ** This driver provides functions and structures required to
  9. ** access the GK6202 interrupt engine.
  10. **
  11. ** Copyright: 2012 - 2013 (C) GoKe Microelectronics ShangHai Branch
  12. **
  13. ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
  14. ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
  15. ** OMMISSIONS.
  16. **
  17. ** \version
  18. **
  19. ******************************************************************************/
  20. #ifndef GD_INT_H
  21. #define GD_INT_H
  22. #include <gtypes.h>
  23. #include <gmodids.h>
  24. #include "gh_vic.h"
  25. #define GD_VIC_INSTANCES 2
  26. #define GD_INT_VEC_OFFSET 32
  27. /*---------------------------------------------------------------------------*/
  28. /* constants and macros */
  29. /*---------------------------------------------------------------------------*/
  30. #define GD_INT_ERR_BASE (GD_INT_MODULE_ID<<16) //!< The INT base error code.
  31. /*!
  32. *******************************************************************************
  33. **
  34. ** \anchor int_defines
  35. ** \name interrupt driver specific macros
  36. **
  37. ** This section defines various macros required to control interrupts.
  38. **
  39. ******************************************************************************/
  40. /*@{*/
  41. #define GD_INT_NO_INVERT_IRQ 0 //!< The IRQ signal is not inverted.
  42. #define GD_INT_INVERT_IRQ 1 //!< The IRQ signal is inverted.
  43. #define GD_INT_LOW_PRIORITY 0 //!< Fast Interrupt Request (FIQ) for fast, low latency interrupt handling
  44. #define GD_INT_MID_PRIORITY 1 //!< Interrupt Request (IRQ) for more general interrupts
  45. #define GD_INT_DISABLED 0 //!< Interrupts are disabled.
  46. #define GD_INT_ENABLED 1 //!< Interrupts are enabled.
  47. /*@}*/
  48. #define GD_INT_RISING_EDGE 0
  49. #define GD_INT_FALLING_EDGE 1
  50. #define GD_INT_BOTH_EDGES 2
  51. #define GD_INT_LEVEL_LOW 3
  52. #define GD_INT_LEVEL_HIGH 4
  53. /*!
  54. *******************************************************************************
  55. **
  56. ** \brief Interrupt vectors
  57. **
  58. ** The list below describes all available interrupt sources,
  59. ** a table containing the real interrupt service routines
  60. ** All other interrupts are maskable and the priority can be set
  61. ** either to medium (1) or low (2).
  62. **
  63. ******************************************************************************/
  64. #define GD_INT_CODING_ORC_VOUT1_IRQ GH_INT_CODING_ORC_VOUT1_IRQ
  65. #define GD_INT_CODING_ORC_VIN_IRQ GH_INT_CODING_ORC_VIN_IRQ
  66. #define GD_INT_CORDING_ORC_VDSP_IRQ GH_INT_CORDING_ORC_VDSP_IRQ
  67. #define GD_INT_USB_IRQ GH_INT_USB_IRQ
  68. #define GD_INT_UART2_IRQ GH_INT_UART2_IRQ
  69. #define GD_INT_XIU_TIMEOUT_IRQ GH_INT_XIU_TIMEOUT_IRQ
  70. #define GD_INT_AUDIO_I2S_TX_IRQ GH_INT_AUDIO_I2S_TX_IRQ
  71. #define GD_INT_AUDIO_I2S_RX_IRQ GH_INT_AUDIO_I2S_RX_IRQ
  72. #define GD_INT_UART_IRQ GH_INT_UART_IRQ
  73. #define GD_INT_GPIO0_IRQ GH_INT_GPIO0_IRQ
  74. #define GD_INT_TIMER1_IRQ GH_INT_TIMER1_IRQ
  75. #define GD_INT_TIMER2_IRQ GH_INT_TIMER2_IRQ
  76. #define GD_INT_TIMER3_IRQ GH_INT_TIMER3_IRQ
  77. #define GD_INT_DMA_IRQ GH_INT_DMA_IRQ
  78. #define GD_INT_SD_CONTROLLER_IRQ GH_INT_SD_CONTROLLER_IRQ
  79. #define GD_INT_IDC_IRQ GH_INT_IDC_IRQ
  80. #define GD_INT_SSI_SPI_IRQ GH_INT_SSI_SPI_IRQ
  81. #define GD_INT_WDT_IRQ GH_INT_WDT_IRQ
  82. #define GD_INT_IRIF_IRQ GH_INT_IRIF_IRQ
  83. #define GD_INT_RESERVED1_23_IRQ GH_INT_RESERVED1_23_IRQ
  84. #define GD_INT_SD_CARD_DETECT_IRQ GH_INT_SD_CARD_DETECT_IRQ
  85. #define GD_INT_UART1_IRQ GH_INT_UART1_IRQ
  86. #define GD_INT_SSI_SLAVE_IRQ GH_INT_SSI_SLAVE_IRQ
  87. #define GD_INT_ETH_IRQ GH_INT_ETH_IRQ
  88. #define GD_INT_IDSP_ERROR_IRQ GH_INT_IDSP_ERROR_IRQ
  89. #if (GD_VIC_INSTANCES >= 2)
  90. #define GD_INT_RESERVED2_00_IRQ GH_INT_RESERVED2_00_IRQ
  91. #define GD_INT_RESERVED2_01_IRQ GH_INT_RESERVED2_01_IRQ
  92. #define GD_INT_ADC_LEVEL_CHANGE_IRQ GH_INT_ADC_LEVEL_CHANGE_IRQ
  93. #define GD_INT_RESERVED2_03_IRQ GH_INT_RESERVED2_03_IRQ
  94. #define GD_INT_IDC2_IRQ GH_INT_IDC2_IRQ
  95. #define GD_INT_IDSP_LAST_PIXEL_IRQ GH_INT_IDSP_LAST_PIXEL_IRQ
  96. #define GD_INT_IDSP_VSYNC_IRQ GH_INT_IDSP_VSYNC_IRQ
  97. #define GD_INT_IDSP_SENSOR_VSYNC_IRQ GH_INT_IDSP_SENSOR_VSYNC_IRQ
  98. #define GD_INT_PMU_IRQ GH_INT_PMU_IRQ
  99. #define GD_INT_SSI2_IRQ GH_INT_SSI2_IRQ
  100. #define GD_INT_RESERVED2_10_IRQ GH_INT_RESERVED2_10_IRQ
  101. #define GD_INT_RESERVED2_11_IRQ GH_INT_RESERVED2_11_IRQ
  102. #define GD_INT_CODING_ORC_VOUT0_IRQ GH_INT_CODING_ORC_VOUT0_IRQ
  103. #define GD_INT_AES_OUTPUT_READY_IRQ GH_INT_AES_OUTPUT_READY_IRQ
  104. #define GD_INT_DES_OUTPUT_READY_IRQ GH_INT_DES_OUTPUT_READY_IRQ
  105. #define GD_INT_RESERVED2_15_IRQ GH_INT_RESERVED2_15_IRQ
  106. #define GD_INT_GDMA_COMPLETION_IRQ GH_INT_GDMA_COMPLETION_IRQ
  107. #define GD_INT_MOTOR_INTERRUPT_IRQ GH_INT_MOTOR_INTERRUPT_IRQ
  108. #define GD_INT_AUDIO_PHY_RX_IRQ GH_INT_AUDIO_PHY_RX_IRQ
  109. #define GD_INT_AUDIO_PHY_TX_IRQ GH_INT_AUDIO_PHY_TX_IRQ
  110. #endif
  111. // modify for rtos
  112. #define GD_INT_LAST_IRQ (31 + 32)
  113. /*---------------------------------------------------------------------------*/
  114. /* types, enums and structures */
  115. /*---------------------------------------------------------------------------*/
  116. /*!
  117. *******************************************************************************
  118. **
  119. ** \brief Interrupt initialization parameter structure.
  120. **
  121. ** \sa GD_INT_Init()
  122. **
  123. ******************************************************************************/
  124. typedef struct
  125. {
  126. void (*resetFct)(void); //!< The reset handler.
  127. void (*memExceptionFct)(void); //!< The memory exception handler.
  128. void (*instructErrorFct)(void); //!< The Instruction Error handler.
  129. } GD_INT_INIT_PARAMS_S;
  130. /*!
  131. *******************************************************************************
  132. **
  133. ** \brief Interrupt driver open parameter structure.
  134. **
  135. ** \sa GD_INT_Open()
  136. **
  137. ******************************************************************************/
  138. typedef struct
  139. {
  140. S8 type; //!< the interrupt vector to access
  141. S8 active; //!< activation, either GD_INT_INVERT_IRQ or GD_INT_NO_INVERT_IRQ
  142. S8 sensitivity; //!< sensitivity, GD_INT_RISING_EDGE or GD_INT_FALLING_EDGE
  143. //!< or GD_INT_BOTH_EDGES or GD_INT_LEVEL_LOW or GD_INT_LEVEL_HIGH
  144. S8 priority; //!< priority, either GD_INT_MID_PRIORITY or GD_INT_LOW_PRIORITY
  145. union
  146. {
  147. GISR1 (*lowPrio)(void);
  148. GISR2 (*midPrio)(void);
  149. }isrFct; //!< the interrupt service function
  150. } GD_INT_OPEN_PARAMS_S;
  151. /*!
  152. *******************************************************************************
  153. **
  154. ** \brief Interrupt processor function type.
  155. **
  156. ******************************************************************************/
  157. /*! Pointer to the interrupt handler function of the driver. */
  158. typedef GISR1(*GD_ARM_INTR_IsrFuncT)(void);
  159. /*! //!< Pointer to the processing function of the driver. */
  160. typedef void(*GD_INT_PROCESSOR_F)(void* data);
  161. /*!
  162. *******************************************************************************
  163. **
  164. ** \brief Interrupt driver data structure
  165. **
  166. ******************************************************************************/
  167. typedef struct
  168. {
  169. U32 length; //!< The length of the driver data in bytes.
  170. void* data; //!< Pointer to driver specific data structure.
  171. GD_INT_PROCESSOR_F processor; //!< Pointer to interrupt processing function.
  172. } GD_INT_DATA_S;
  173. /*!
  174. *******************************************************************************
  175. **
  176. ** \brief Interrupt handler function type
  177. **
  178. ******************************************************************************/
  179. /*! Pointer to the interrupt handler function of the driver. */
  180. typedef GD_INT_DATA_S*(*GD_INT_HANDLER_F)(void);
  181. /*---------------------------------------------------------------------------*/
  182. /* function prototypes */
  183. /*---------------------------------------------------------------------------*/
  184. #ifdef __cplusplus
  185. extern "C" {
  186. #endif
  187. void GD_INT_Close(GD_HANDLE *handleP);
  188. GERR GD_INT_Init(GD_INT_INIT_PARAMS_S *initParams);
  189. GERR GD_INT_Open(GD_INT_OPEN_PARAMS_S *openParams, GD_HANDLE *handle);
  190. void GD_INT_GetIrqSettings(S8 type, S8 *prio, S8 *act, S8 *sens, S8 *mask);
  191. U32 GD_INT_GetUsedIrqs(void);
  192. void GD_INT_SetInterruptTrigger(S8 vec);
  193. void GD_INT_SetVector(S8 vector, void (*target)());
  194. void GD_INT_SetHandler(S8 vector, GD_INT_HANDLER_F handler);
  195. GD_INT_HANDLER_F GD_INT_GetHandler(S8 vector);
  196. void GD_INT_InvalidateDataCache(void);
  197. void GD_INT_InvalidateInstructionCache(void);
  198. void GD_INT_Enable(GD_HANDLE *handleP,U8 enable);
  199. void GD_INT_DisableAllInterrupts(void);
  200. void GD_INT_EnableAllInterrupts(void);
  201. void GD_IRQ_ISR(void);
  202. void GD_FIQ_ISR(void);
  203. #ifdef __cplusplus
  204. }
  205. #endif
  206. #endif
  207. /* end of gd_int.h */