fw_exti.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. // Copyright 2021 IOsetting <iosetting(at)outlook.com>
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #ifndef ___FW_EXTI_H___
  15. #define ___FW_EXTI_H___
  16. #include "fw_conf.h"
  17. #include "fw_types.h"
  18. typedef enum
  19. {
  20. EXTI_IntPriority_Lowest = 0x00,
  21. EXTI_IntPriority_Low = 0x01,
  22. EXTI_IntPriority_High = 0x02,
  23. EXTI_IntPriority_Highest = 0x03,
  24. } EXTI_IntPriority_t;
  25. typedef enum
  26. {
  27. EXTI_PortIntMode_Fall = 0x00,
  28. EXTI_PortIntMode_Rise = 0x01,
  29. EXTI_PortIntMode_Low = 0x02,
  30. EXTI_PortIntMode_High = 0x03,
  31. } EXTI_PortIntMode_t;
  32. #define EXTI_VectInt0 0
  33. #define EXTI_VectTimer0 1
  34. #define EXTI_VectInt1 2
  35. #define EXTI_VectTimer1 3
  36. #define EXTI_VectUART1 4
  37. #define EXTI_VectADC 5
  38. #define EXTI_VectLowVoltDect 6
  39. #define EXTI_VectPCA 7
  40. #define EXTI_VectUART2 8
  41. #define EXTI_VectSPI 9
  42. #define EXTI_VectInt2 10
  43. #define EXTI_VectInt3 11
  44. #define EXTI_VectTimer2 12
  45. #define EXTI_VectUser 13 // 006BH, for Cx51 vector hack
  46. #define EXTI_VectInt4 16
  47. #define EXTI_VectUART3 17
  48. #define EXTI_VectUART4 18
  49. #define EXTI_VectTimer3 19
  50. #define EXTI_VectTimer4 20
  51. #define EXTI_VectCMP 21
  52. #if (__CONF_MCU_TYPE == 1 ) || (__CONF_MCU_TYPE == 2 )
  53. #define EXTI_VectPWM0 22
  54. #define EXTI_VectPWM0FD 23
  55. #endif
  56. #define EXTI_VectI2C 24
  57. #if (__CONF_MCU_TYPE == 3 )
  58. #define EXTI_VectUSB 25
  59. #define EXTI_VectPWMA 26
  60. #define EXTI_VectPWMB 27
  61. #endif
  62. #if (__CONF_MCU_TYPE == 2 )
  63. #define EXTI_VectPWM1 28
  64. #define EXTI_VectPWM2 29
  65. #define EXTI_VectPWM3 30
  66. #define EXTI_VectPWM4 31
  67. #define EXTI_VectPWM5 32 // 0103H
  68. #define EXTI_VectPWM2FD 33 // 010BH
  69. #define EXTI_VectPWM4FD 34 // 0113H
  70. #endif
  71. #if (__CONF_MCU_TYPE == 2 ) || (__CONF_MCU_TYPE == 3 )
  72. #define EXTI_VectTKSU 35 // 011BH
  73. #endif
  74. #if (__CONF_MCU_TYPE == 3 )
  75. #define EXTI_VectRTC 36 // 0123H
  76. #endif
  77. #if (__CONF_MCU_TYPE == 1 ) || (__CONF_MCU_TYPE == 3 )
  78. #define EXTI_VectP0 37 // 012BH
  79. #define EXTI_VectP1 38 // 0133H
  80. #define EXTI_VectP2 39 // 013BH
  81. #define EXTI_VectP3 40 // 0143H
  82. #define EXTI_VectP4 41 // 014BH
  83. #define EXTI_VectP5 42 // 0153H
  84. #define EXTI_VectP6 43 // 015BH
  85. #define EXTI_VectP7 44 // 0163H
  86. #define EXTI_VectP8 45 // 016BH
  87. #define EXTI_VectP9 46 // 0173H
  88. #define EXTI_VectDMA_M2M 47
  89. #define EXTI_VectDMA_ADC 48
  90. #define EXTI_VectDMA_SPI 49
  91. #define EXTI_VectDMA_UR1T 50
  92. #define EXTI_VectDMA_UR1R 51
  93. #define EXTI_VectDMA_UR2T 52
  94. #define EXTI_VectDMA_UR2R 53
  95. #define EXTI_VectDMA_UR3T 54
  96. #define EXTI_VectDMA_UR3R 55
  97. #define EXTI_VectDMA_UR4T 56
  98. #define EXTI_VectDMA_UR4R 57
  99. #define EXTI_VectDMA_LCM 58
  100. #define EXTI_VectLCM 59
  101. #endif
  102. #define EXTI_Global_SetIntState(__STATE__) SBIT_ASSIGN(EA, __STATE__)
  103. #define EXTI_Timer0_SetIntState(__STATE__) SBIT_ASSIGN(ET0, __STATE__)
  104. #define EXTI_Timer1_SetIntState(__STATE__) SBIT_ASSIGN(ET1, __STATE__)
  105. #define EXTI_ADC_SetIntState(__STATE__) SBIT_ASSIGN(EADC, __STATE__)
  106. #define EXTI_UART1_SetIntState(__STATE__) SBIT_ASSIGN(ES, __STATE__)
  107. #define EXTI_LowVoltDetect_SetIntState(__STATE__) SBIT_ASSIGN(ELVD, __STATE__)
  108. #define EXTI_Int0_SetIntState(__STATE__) SBIT_ASSIGN(EX0, __STATE__)
  109. #define EXTI_Int1_SetIntState(__STATE__) SBIT_ASSIGN(EX1, __STATE__)
  110. #define EXTI_Int0_SetTrigByFall SBIT_SET(IT0) // Trigger by falling
  111. #define EXTI_Int0_SetTrigByBoth SBIT_RESET(IT0) // Trigger by both rising and falling
  112. #define EXTI_Int1_SetTrigByFall SBIT_SET(IT1) // Trigger by falling
  113. #define EXTI_Int1_SetTrigByBoth SBIT_RESET(IT1) // Trigger by both rising and falling
  114. #define EXTI_USB_SetIntState(__STATE__) SFR_ASSIGN(IE2, 7, __STATE__)
  115. #define EXTI_Timer4_SetIntState(__STATE__) SFR_ASSIGN(IE2, 6, __STATE__)
  116. #define EXTI_Timer3_SetIntState(__STATE__) SFR_ASSIGN(IE2, 5, __STATE__)
  117. #define EXTI_UART4_SetIntState(__STATE__) SFR_ASSIGN(IE2, 4, __STATE__)
  118. #define EXTI_UART3_SetIntState(__STATE__) SFR_ASSIGN(IE2, 3, __STATE__)
  119. #define EXTI_Timer2_SetIntState(__STATE__) SFR_ASSIGN(IE2, 2, __STATE__)
  120. #define EXTI_SPI_SetIntState(__STATE__) SFR_ASSIGN(IE2, 1, __STATE__)
  121. #define EXTI_UART2_SetIntState(__STATE__) SFR_ASSIGN(IE2, 0, __STATE__)
  122. #define EXTI_Int4_SetIntState(__STATE__) SFR_ASSIGN(INTCLKO, 6, __STATE__)
  123. #define EXTI_Int3_SetIntState(__STATE__) SFR_ASSIGN(INTCLKO, 5, __STATE__)
  124. #define EXTI_Int2_SetIntState(__STATE__) SFR_ASSIGN(INTCLKO, 4, __STATE__)
  125. #define EXTI_CMP_SetRiseIntState(__STATE__) SFR_ASSIGN(CMPCR1, 5, __STATE__)
  126. #define EXTI_CMP_SetFallIntState(__STATE__) SFR_ASSIGN(CMPCR1, 4, __STATE__)
  127. #define EXTI_I2C_SetMstIntState(__STATE__) SFRX_ASSIGN(I2CMSCR, 7, __STATE__)
  128. #define EXTI_I2C_SetSlvStartIntState(__STATE__) SFRX_ASSIGN(I2CSLCR, 6, __STATE__)
  129. #define EXTI_I2C_SetSlvRecvIntState(__STATE__) SFRX_ASSIGN(I2CSLCR, 5, __STATE__)
  130. #define EXTI_I2C_SetSlvSendIntState(__STATE__) SFRX_ASSIGN(I2CSLCR, 4, __STATE__)
  131. #define EXTI_I2C_SetSlvStopIntState(__STATE__) SFRX_ASSIGN(I2CSLCR, 3, __STATE__)
  132. #define EXTI_RTC_SetAlarmIntState(__STATE__) SFRX_ASSIGN(RTCIEN, 7, __STATE__)
  133. #define EXTI_RTC_SetDayIntState(__STATE__) SFRX_ASSIGN(RTCIEN, 6, __STATE__)
  134. #define EXTI_RTC_SetHourIntState(__STATE__) SFRX_ASSIGN(RTCIEN, 5, __STATE__)
  135. #define EXTI_RTC_SetMinuteIntState(__STATE__) SFRX_ASSIGN(RTCIEN, 4, __STATE__)
  136. #define EXTI_RTC_SetSecondIntState(__STATE__) SFRX_ASSIGN(RTCIEN, 3, __STATE__)
  137. #define EXTI_RTC_SetSecondDiv2IntState(__STATE__) SFRX_ASSIGN(RTCIEN, 2, __STATE__)
  138. #define EXTI_RTC_SetSecondDiv8IntState(__STATE__) SFRX_ASSIGN(RTCIEN, 1, __STATE__)
  139. #define EXTI_RTC_SetSecondDiv32IntState(__STATE__) SFRX_ASSIGN(RTCIEN, 0, __STATE__)
  140. #define EXTI_DMA_M2M_SetIntState(__STATE__) SFRX_ASSIGN(DMA_M2M_CFG, 7, __STATE__)
  141. #define EXTI_DMA_ADC_SetIntState(__STATE__) SFRX_ASSIGN(DMA_ADC_CFG, 7, __STATE__)
  142. #define EXTI_DMA_SPI_SetIntState(__STATE__) SFRX_ASSIGN(DMA_SPI_CFG, 7, __STATE__)
  143. #define EXTI_DMA_UART1T_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR1T_CFG, 7, __STATE__)
  144. #define EXTI_DMA_UART1R_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR1R_CFG, 7, __STATE__)
  145. #define EXTI_DMA_UART2T_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR2T_CFG, 7, __STATE__)
  146. #define EXTI_DMA_UART2R_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR2R_CFG, 7, __STATE__)
  147. #define EXTI_DMA_UART3T_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR3T_CFG, 7, __STATE__)
  148. #define EXTI_DMA_UART3R_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR3R_CFG, 7, __STATE__)
  149. #define EXTI_DMA_UART4T_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR4T_CFG, 7, __STATE__)
  150. #define EXTI_DMA_UART4R_SetIntState(__STATE__) SFRX_ASSIGN(DMA_UR4R_CFG, 7, __STATE__)
  151. #define EXTI_DMA_LCM_SetIntState(__STATE__) SFRX_ASSIGN(DMA_LCM_CFG, 7, __STATE__)
  152. #define EXTI_INT_PWMA_Break_ON SFRX_SET(PWMA_IER, 7)
  153. #define EXTI_INT_PWMA_Break_OFF SFRX_RESET(PWMA_IER, 7)
  154. #define EXTI_INT_PWMA_Int_ON SFRX_SET(PWMA_IER, 6)
  155. #define EXTI_INT_PWMA_Int_OFF SFRX_RESET(PWMA_IER, 6)
  156. #define EXTI_INT_PWMA_Comp_ON SFRX_SET(PWMA_IER, 5)
  157. #define EXTI_INT_PWMA_Comp_OFF SFRX_RESET(PWMA_IER, 5)
  158. #define EXTI_INT_PWMA_CapCH4_ON SFRX_SET(PWMA_IER, 4)
  159. #define EXTI_INT_PWMA_CapCH4_OFF SFRX_RESET(PWMA_IER, 4)
  160. #define EXTI_INT_PWMA_CapCH3_ON SFRX_SET(PWMA_IER, 3)
  161. #define EXTI_INT_PWMA_CapCH3_OFF SFRX_RESET(PWMA_IER, 3)
  162. #define EXTI_INT_PWMA_CapCH2_ON SFRX_SET(PWMA_IER, 2)
  163. #define EXTI_INT_PWMA_CapCH2_OFF SFRX_RESET(PWMA_IER, 2)
  164. #define EXTI_INT_PWMA_CapCH1_OFF SFRX_SET(PWMA_IER, 1)
  165. #define EXTI_INT_PWMA_CapCH1_ON SFRX_RESET(PWMA_IER, 1)
  166. #define EXTI_INT_PWMA_Update_OFF SFRX_SET(PWMA_IER, 0)
  167. #define EXTI_INT_PWMA_Update_ON SFRX_RESET(PWMA_IER, 0)
  168. #define EXTI_INT_PWMB_Break_ON SFRX_SET(PWMB_IER, 7)
  169. #define EXTI_INT_PWMB_Break_OFF SFRX_RESET(PWMB_IER, 7)
  170. #define EXTI_INT_PWMB_Int_ON SFRX_SET(PWMB_IER, 6)
  171. #define EXTI_INT_PWMB_Int_OFF SFRX_RESET(PWMB_IER, 6)
  172. #define EXTI_INT_PWMB_Comp_ON SFRX_SET(PWMB_IER, 5)
  173. #define EXTI_INT_PWMB_Comp_OFF SFRX_RESET(PWMB_IER, 5)
  174. #define EXTI_INT_PWMB_CapCH4_ON SFRX_SET(PWMB_IER, 4)
  175. #define EXTI_INT_PWMB_CapCH4_OFF SFRX_RESET(PWMB_IER, 4)
  176. #define EXTI_INT_PWMB_CapCH3_ON SFRX_SET(PWMB_IER, 3)
  177. #define EXTI_INT_PWMB_CapCH3_OFF SFRX_RESET(PWMB_IER, 3)
  178. #define EXTI_INT_PWMB_CapCH2_ON SFRX_SET(PWMB_IER, 2)
  179. #define EXTI_INT_PWMB_CapCH2_OFF SFRX_RESET(PWMB_IER, 2)
  180. #define EXTI_INT_PWMB_CapCH1_OFF SFRX_SET(PWMB_IER, 1)
  181. #define EXTI_INT_PWMB_CapCH1_ON SFRX_RESET(PWMB_IER, 1)
  182. #define EXTI_INT_PWMB_Update_OFF SFRX_SET(PWMB_IER, 0)
  183. #define EXTI_INT_PWMB_Update_ON SFRX_RESET(PWMB_IER, 0)
  184. #define EXTI_INT_LCM_ON SFRX_SET(LCMIFCFG, 7)
  185. #define EXTI_INT_LCM_OFF SFRX_RESET(LCMIFCFG, 7)
  186. #define EXTI_Port_SetInterrupt_ON(__PORT__, __PINS__) do {SFRX_ON(); SFRX(PxINTE + (__PORT__)) |= (__PINS__); SFRX_OFF();} while(0)
  187. #define EXTI_Port_SetInterrupt_OFF(__PORT__, __PINS__) do {SFRX_ON(); SFRX(PxINTE + (__PORT__)) &= ~(__PINS__); SFRX_OFF();} while(0)
  188. #define EXTI_Int0_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 0, __PRIORITY__)
  189. #define EXTI_Timer0_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 1, __PRIORITY__)
  190. #define EXTI_Int1_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 2, __PRIORITY__)
  191. #define EXTI_Timer1_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 3, __PRIORITY__)
  192. #define EXTI_UART1_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 4, __PRIORITY__)
  193. #define EXTI_ADC_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 5, __PRIORITY__)
  194. #define EXTI_LowVoltDetect_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP, IPH, 6, __PRIORITY__)
  195. #define EXTI_UART2_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 0, __PRIORITY__)
  196. #define EXTI_SPI_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 1, __PRIORITY__)
  197. #define EXTI_PWMA_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 2, __PRIORITY__)
  198. #define EXTI_PWMB_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 3, __PRIORITY__)
  199. #define EXTI_Int4_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 4, __PRIORITY__)
  200. #define EXTI_CMP_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 5, __PRIORITY__)
  201. #define EXTI_I2c_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 6, __PRIORITY__)
  202. #define EXTI_USB_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP2, IP2H, 7, __PRIORITY__)
  203. #define EXTI_UART3_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP3, IP3H, 0, __PRIORITY__)
  204. #define EXTI_UART4_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP3, IP3H, 1, __PRIORITY__)
  205. #define EXTI_RTC_SetIntPriority(__PRIORITY__) SFR_DUAL_SET(IP3, IP3H, 2, __PRIORITY__)
  206. #define EXTI_DMA_M2M_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_M2M_CFG, 2, __PRIORITY__)
  207. #define EXTI_DMA_ADC_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_ADC_CFG, 2, __PRIORITY__)
  208. #define EXTI_DMA_SPI_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_SPI_CFG, 2, __PRIORITY__)
  209. #define EXTI_DMA_UART1T_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR1T_CFG, 2, __PRIORITY__)
  210. #define EXTI_DMA_UART1R_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR1R_CFG, 2, __PRIORITY__)
  211. #define EXTI_DMA_UART2T_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR2T_CFG, 2, __PRIORITY__)
  212. #define EXTI_DMA_UART2R_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR2R_CFG, 2, __PRIORITY__)
  213. #define EXTI_DMA_UART3T_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR3T_CFG, 2, __PRIORITY__)
  214. #define EXTI_DMA_UART3R_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR3R_CFG, 2, __PRIORITY__)
  215. #define EXTI_DMA_UART4T_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR4T_CFG, 2, __PRIORITY__)
  216. #define EXTI_DMA_UART4R_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_UR4R_CFG, 2, __PRIORITY__)
  217. #define EXTI_DMA_LCM_SetIntPriority(__PRIORITY__) SFRX_ASSIGN2BIT(DMA_LCM_CFG, 2, __PRIORITY__)
  218. #define EXTI_Port_SetIntPriority(__PORT__, __PRIORITY__) SFRX_DUAL_SET(PIN_IP, PIN_IPH, __PORT__, __PRIORITY__)
  219. #define EXTI_Port_SetIntMode(__PORT__, __PINS__, __PORT_INT_MODE__) do { SFRX_ON(); \
  220. SFRX(PxIM0 + (__PORT__)) = SFRX(PxIM0 + (__PORT__)) & ~(__PINS__) | (((__PORT_INT_MODE__) & 0x01)? (__PINS__) : 0x00); \
  221. SFRX(PxIM1 + (__PORT__)) = SFRX(PxIM1 + (__PORT__)) & ~(__PINS__) | (((__PORT_INT_MODE__) & 0x02)? (__PINS__) : 0x00); \
  222. SFRX_OFF(); } while(0)
  223. #endif