yc_exti.c 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /*
  2. * Copyright (c) 2006-2020, YICHIP Development Team
  3. * @file yc_exit.c
  4. * @brief source file for setting exit
  5. *
  6. * Change Logs:
  7. * Date Author Version Notes
  8. * 2021-12-24 yangzhengfeng V1.0.0 Modify the register module configuration
  9. * 2021-01-03 wangjingfan V1.0.1 Compile error correction
  10. * 2021-01-20 yangzhengfeng V1.0.2 Update library function
  11. */
  12. #include "yc_exti.h"
  13. /**
  14. * @brief Clear interrupt flag
  15. * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
  16. * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
  17. * @retval none
  18. */
  19. void EXTI_ClearITPendingBit(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource)
  20. {
  21. _ASSERT(IS_EXTI_LINE(EXTI_Line));
  22. _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
  23. MGPIO->IRQ_STATUS.reg[EXTI_Line] |= EXTI_PinSource;
  24. }
  25. /**
  26. * @brief Deinitializes the EXTI registers to default reset values.
  27. * @param none
  28. * @retval none
  29. */
  30. void EXTI_DeInit()
  31. {
  32. uint32_t i;
  33. for (i = 0; i < EXIT_Num; i++)
  34. {
  35. MGPIO->INTR.reg[i] = 0;
  36. MGPIO->IRQ_LEVEL.reg[i] = 0;
  37. MGPIO->IRQ_RISE.reg[i] = 0;
  38. MGPIO->IRQ_FALL.reg[i] = 0;
  39. }
  40. }
  41. /**
  42. * @brief get interrupt status
  43. * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
  44. * @retval none
  45. */
  46. uint16_t EXTI_GetITLineStatus(EXTI_LineTypeDef EXTI_Line)
  47. {
  48. _ASSERT(IS_EXTI_LINE(EXTI_Line));
  49. return MGPIO->INTR.reg[EXTI_Line];
  50. }
  51. /**
  52. * @brief get interrupt pinsource status
  53. * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
  54. * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
  55. * @retval none
  56. */
  57. uint16_t EXTI_GetITEXTI_PinSourceStatus(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource)
  58. {
  59. _ASSERT(IS_EXTI_LINE(EXTI_Line));
  60. _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
  61. if(MGPIO->INTR.reg[EXTI_Line] & EXTI_PinSource)
  62. {
  63. return ENABLE;
  64. }
  65. else
  66. {
  67. return DISABLE;
  68. }
  69. }
  70. /**
  71. * @brief EXTI LineConfig
  72. * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
  73. * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
  74. * @param EXTI_Trigger:EXTI Trigger mode
  75. * @retval none
  76. */
  77. void EXTI_LineConfig(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource, EXTI_TriggerTypeDef EXTI_Trigger)
  78. {
  79. _ASSERT(IS_EXTI_LINE(EXTI_Line));
  80. _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
  81. _ASSERT(IS_TRIG_TYPEDEF(EXTI_Trigger));
  82. uint16_t val_intr_lts,val_intr_rts,val_intr_fts,val_intr_en;
  83. switch (EXTI_Trigger)
  84. {
  85. case EXTI_Trigger_Off:
  86. val_intr_en = ~EXTI_PinSource;
  87. val_intr_lts = ~EXTI_PinSource;
  88. val_intr_rts = ~EXTI_PinSource;
  89. val_intr_fts = ~EXTI_PinSource;
  90. break;
  91. case EXTI_Trigger_HighLev:
  92. val_intr_en = EXTI_PinSource;
  93. val_intr_lts = ~EXTI_PinSource;
  94. val_intr_rts = ~EXTI_PinSource;
  95. val_intr_fts = ~EXTI_PinSource;
  96. break;
  97. case EXTI_Trigger_LowLev:
  98. val_intr_en = EXTI_PinSource;
  99. val_intr_lts = EXTI_PinSource;
  100. val_intr_rts = ~EXTI_PinSource;
  101. val_intr_fts = ~EXTI_PinSource;
  102. break;
  103. case EXTI_Trigger_Rising:
  104. val_intr_en = EXTI_PinSource;
  105. val_intr_lts = ~EXTI_PinSource;
  106. val_intr_rts = EXTI_PinSource;
  107. val_intr_fts = ~EXTI_PinSource;
  108. break;
  109. case EXTI_Trigger_Falling:
  110. val_intr_en = EXTI_PinSource;
  111. val_intr_lts = ~EXTI_PinSource;
  112. val_intr_rts = ~EXTI_PinSource;
  113. val_intr_fts = EXTI_PinSource;
  114. break;
  115. case EXTI_Trigger_Rising_Falling:
  116. val_intr_en = EXTI_PinSource;
  117. val_intr_lts = ~EXTI_PinSource;
  118. val_intr_rts = EXTI_PinSource;
  119. val_intr_fts = EXTI_PinSource;
  120. break;
  121. default:
  122. break;
  123. }
  124. if (EXTI_Trigger == EXTI_Trigger_Off)
  125. {
  126. MGPIO->INTR.reg[EXTI_Line] &= val_intr_en;
  127. MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
  128. MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
  129. MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
  130. }
  131. else if (EXTI_Trigger == EXTI_Trigger_HighLev )
  132. {
  133. MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
  134. MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
  135. MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
  136. MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
  137. }
  138. else if (EXTI_Trigger == EXTI_Trigger_LowLev )
  139. {
  140. MGPIO->IRQ_LEVEL.reg[EXTI_Line] |= val_intr_lts;
  141. MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
  142. MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
  143. MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
  144. }
  145. else if (EXTI_Trigger == EXTI_Trigger_Rising )
  146. {
  147. MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
  148. MGPIO->IRQ_RISE.reg[EXTI_Line] |= val_intr_rts;
  149. MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
  150. MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
  151. }
  152. else if (EXTI_Trigger == EXTI_Trigger_Falling )
  153. {
  154. MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
  155. MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
  156. MGPIO->IRQ_FALL.reg[EXTI_Line] |= val_intr_fts;
  157. MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
  158. }
  159. else if (EXTI_Trigger == EXTI_Trigger_Rising_Falling )
  160. {
  161. MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
  162. MGPIO->IRQ_RISE.reg[EXTI_Line] |= val_intr_rts;
  163. MGPIO->IRQ_FALL.reg[EXTI_Line] |= val_intr_fts;
  164. MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
  165. }
  166. }
  167. //extern void VBAT_IRQHandler(void);
  168. //extern void EXTI0_IRQHandler(void);
  169. //extern void EXTI1_IRQHandler(void);
  170. //extern void EXTI2_IRQHandler(void);
  171. //extern void EXTI3_IRQHandler(void);
  172. //extern void EXTI4_IRQHandler(void);
  173. //void GPIO_IRQHandler()
  174. //{
  175. // uint8_t Exti_irq_index;
  176. // NVIC_DisableIRQ(GPIO_IRQn);
  177. // if (MSYSCTRL->CHGR_EVENT_IRQ.bit.VBAT_OV & MSYSCTRL->CHGR_EVENT_ICTRL.bit.VBAT_OV_IE)
  178. // {
  179. // //VBAT_IRQHandler();
  180. // }
  181. // Exti_irq_index = MGPIO->IRQ_NUM.reg;
  182. // if(MGPIO->INTR.reg[Exti_irq_index/EXIT_Pin_Num] &(1 << (Exti_irq_index%EXIT_Pin_Num)))
  183. // {
  184. // switch (Exti_irq_index/EXIT_Pin_Num)
  185. // {
  186. // case EXTI_Line_0:
  187. // EXTI0_IRQHandler();
  188. // break;
  189. // case EXTI_Line_1:
  190. // EXTI1_IRQHandler();
  191. // break;
  192. // case EXTI_Line_2:
  193. // EXTI2_IRQHandler();
  194. // break;
  195. // case EXTI_Line_3:
  196. // EXTI3_IRQHandler();
  197. // break;
  198. // case EXTI_Line_4:
  199. // EXTI4_IRQHandler();
  200. // break;
  201. // default:
  202. // break;
  203. // }
  204. // EXTI_ClearITPendingBit((EXTI_LineTypeDef)(Exti_irq_index/EXIT_Pin_Num),(EXTI_PIN_TypeDef)(BIT(Exti_irq_index%EXIT_Pin_Num)));
  205. // }
  206. // NVIC_EnableIRQ(GPIO_IRQn);
  207. //}
  208. /************************ (C) COPYRIGHT Yichip Microelectronics *****END OF FILE****/