gd32f30x_it.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. /*!
  2. \file gd32f3x0_it.c
  3. \brief interrupt service routines
  4. */
  5. /*
  6. Copyright (C) 2022 GigaDevice
  7. 2022-12-01, V1.0.0, firmware for GD32F3x0
  8. */
  9. /******************************
  10. * Include File
  11. ******************************/
  12. #include "gd32f30x_it.h"
  13. #include "user.h"
  14. #include "TimeTask_Event.h"
  15. #include "syspar.h"
  16. #include "can.h"
  17. /******************************
  18. * Parameter
  19. ******************************/
  20. extern uint8_t data;
  21. /******************************
  22. * Function
  23. ******************************/
  24. /*!
  25. \brief this function handles NMI exception
  26. \param[in] none
  27. \param[out] none
  28. \retval none
  29. */
  30. void NMI_Handler(void)
  31. {
  32. }
  33. /*!
  34. \brief this function handles HardFault exception
  35. \param[in] none
  36. \param[out] none
  37. \retval none
  38. */
  39. void HardFault_Handler(void)
  40. {
  41. hw_blPWMOnFlg = TRUE;/* HardFault_Handler无法被屏蔽,hw_blPWMOnFlg可能被RAMtest修改 */
  42. hw_voPWMOff();
  43. /* if Hard Fault exception occurs, go to infinite loop */
  44. while (1);
  45. }
  46. /*!
  47. \brief this function handles MemManage exception
  48. \param[in] none
  49. \param[out] none
  50. \retval none
  51. */
  52. void MemManage_Handler(void)
  53. {
  54. /* if Memory Manage exception occurs, go to infinite loop */
  55. while (1);
  56. }
  57. /*!
  58. \brief this function handles BusFault exception
  59. \param[in] none
  60. \param[out] none
  61. \retval none
  62. */
  63. void BusFault_Handler(void)
  64. {
  65. /* if Bus Fault exception occurs, go to infinite loop */
  66. while (1);
  67. }
  68. /*!
  69. \brief this function handles UsageFault exception
  70. \param[in] none
  71. \param[out] none
  72. \retval none
  73. */
  74. void UsageFault_Handler(void)
  75. {
  76. /* if Usage Fault exception occurs, go to infinite loop */
  77. while (1);
  78. }
  79. /*!
  80. \brief this function handles SVC exception
  81. \param[in] none
  82. \param[out] none
  83. \retval none
  84. */
  85. void SVC_Handler(void)
  86. {
  87. }
  88. /*!
  89. \brief this function handles DebugMon exception
  90. \param[in] none
  91. \param[out] none
  92. \retval none
  93. */
  94. void DebugMon_Handler(void)
  95. {
  96. }
  97. /*!
  98. \brief this function handles PendSV exception
  99. \param[in] none
  100. \param[out] none
  101. \retval none
  102. */
  103. void PendSV_Handler(void)
  104. {
  105. }
  106. /*!
  107. \brief this function handles SysTick exception
  108. \param[in] none
  109. \param[out] none
  110. \retval none
  111. */
  112. void SysTick_Handler(void)
  113. {
  114. cp_ulSystickCnt ++;
  115. /* MCU Self Check*/
  116. clas_ubSystickFlg = 1;
  117. stl_voSystickProc();
  118. /* UART Timeout */
  119. UART_voApplTimer();
  120. /* TBT interrupt */
  121. //tbt_voIsr();
  122. }
  123. /*!
  124. \brief
  125. \param[in] none
  126. \param[out] none
  127. \retval none
  128. */
  129. void ADC0_1_IRQHandler(void)
  130. {
  131. clasB_uwADCCnt++;
  132. //GPIO_OCTL(GPIOC) |= 0x0800; //TEST PC11
  133. if (cp_stFlg.CurrentSampleModelSelect == COMBINATION)
  134. {
  135. if (ADC_STAT(ADC0) & ADC_INT_FLAG_EOIC)
  136. {
  137. adc_uwRdsonUReg = ADC_IDATA0(ADC0);
  138. adc_uwRdsonVReg = ADC_IDATA1(ADC0);
  139. adc_uwRdsonWReg = ADC_IDATA2(ADC0);
  140. // adc_disable(ADC0);
  141. // timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_3, pwm_stGenOut.uwSigRTrig);
  142. // adc_interrupt_flag_clear(ADC0 , ADC_INT_FLAG_EOIC);
  143. /* ADC0 disable */
  144. ADC_CTL1(ADC0) &= ~((uint32_t)ADC_CTL1_ADCON);
  145. /* ADC1 trigger set */
  146. TIMER_CH3CV(TIMER0) = (uint32_t) pwm_stGenOut.uwSigRTrig;
  147. /* ADC1 enable */
  148. ADC_CTL1(ADC1) |= (uint32_t)ADC_CTL1_ADCON;
  149. /* ADC0 interrupt flag clear */
  150. ADC_STAT(ADC0) &= ~((uint32_t)ADC_INT_FLAG_EOIC);
  151. }
  152. else if (ADC_STAT(ADC1) & ADC_INT_FLAG_EOIC)
  153. {
  154. if (pwm_stGenOut.blSampleCalibFlag == TRUE)
  155. {
  156. adc_uwADDMAPhase1 = ADC_IDATA0(ADC1);
  157. }
  158. // adc_disable(ADC1);
  159. // adc_interrupt_flag_clear(ADC1 , ADC_INT_FLAG_EOIC);
  160. /* ADC1 disable */
  161. ADC_CTL1(ADC1) &= ~((uint32_t)ADC_CTL1_ADCON);
  162. /* ADC1 interrupt flag clear */
  163. ADC_STAT(ADC1) &= ~((uint32_t)ADC_INT_FLAG_EOIC);
  164. }
  165. else
  166. {
  167. }
  168. }
  169. else
  170. {
  171. }
  172. //GPIO_OCTL(GPIOC) &= ~0x0800; //TEST PC11
  173. }
  174. /*!
  175. \brief
  176. \param[in] none
  177. \param[out] none
  178. \retval none
  179. */
  180. void TIMER0_UP_TIMER9_IRQHandler(void)
  181. {
  182. ULONG OVtimeCnt = 0;
  183. clasB_uwTIM0Cnt ++;
  184. if(cp_stFlg.CurrentSampleModelSelect == COMBINATION)
  185. {
  186. if(TIMER_INTF(TIMER0) & TIMER_INT_FLAG_UP)
  187. {
  188. if((TIMER_CTL0(TIMER0) & TIMER_CTL0_DIR) == 0) // When Counting Up
  189. {
  190. /* TBC Up interrupt */
  191. tbc_voUpIsr();
  192. }
  193. else
  194. {
  195. TIMER_CNT(TIMER6) = 0;
  196. /* TBC Down interrupt */
  197. tbc_voDownIsr();
  198. while ((TIMER_CNT(TIMER6) < HW_PWM_PERIOD) && (OVtimeCnt < 10000))
  199. {
  200. OVtimeCnt++;
  201. };
  202. /* ADC0 trigger set */
  203. TIMER_CH3CV(TIMER0) = (uint32_t) pwm_stGenOut.uwRDSONTrig;
  204. adc_enable(ADC0);
  205. // adc_interrupt_enable(ADC0 , ADC_INT_EOIC);
  206. //adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
  207. /* Software trigger for regular sampling*/
  208. adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
  209. /* Compara value load */
  210. hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
  211. hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
  212. hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
  213. hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
  214. hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
  215. hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
  216. timer_dma_enable(TIMER0,TIMER_DMA_UPD);
  217. dma_channel_enable(DMA0,DMA_CH4);
  218. }
  219. }
  220. //timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
  221. TIMER_INTF(TIMER0) = (~(uint32_t)TIMER_INT_FLAG_UP);
  222. }
  223. else
  224. {
  225. }
  226. }
  227. /*!
  228. \brief
  229. \param[in] none
  230. \param[out] none
  231. \retval none
  232. */
  233. void TIMER1_IRQHandler(void)
  234. {
  235. UWORD uwIntSource = 0;
  236. clasB_uwTIM1Cnt++;
  237. if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_UP))
  238. {
  239. uwIntSource = 1;
  240. cadence_voCadenceCal(uwIntSource);
  241. bikespeed_voBikeSpeedCal(uwIntSource);
  242. timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP);
  243. }
  244. else if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH2))
  245. {
  246. uwIntSource = 2;
  247. cadence_voCadenceCal(uwIntSource);
  248. if(gpio_input_bit_get(GPIOB, GPIO_PIN_10))
  249. {
  250. /* reset the CH2P and CH2NP bits */
  251. TIMER_CHCTL2(TIMER1) &= (~(uint32_t)(TIMER_CHCTL2_CH2P|TIMER_CHCTL2_CH2NP));
  252. TIMER_CHCTL2(TIMER1) |= (uint32_t)((uint32_t)(TIMER_IC_POLARITY_FALLING) << 8U);
  253. }
  254. else
  255. {
  256. /* reset the CH2P and CH2NP bits */
  257. TIMER_CHCTL2(TIMER1) &= (~(uint32_t)(TIMER_CHCTL2_CH2P|TIMER_CHCTL2_CH2NP));
  258. TIMER_CHCTL2(TIMER1) |= (uint32_t)((uint32_t)(TIMER_IC_POLARITY_RISING) << 8U);
  259. }
  260. timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_CH2);
  261. }
  262. else if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH3))
  263. {
  264. uwIntSource = 3;
  265. bikespeed_voBikeSpeedCal(uwIntSource);
  266. timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_CH3);
  267. }
  268. }
  269. /*!
  270. \brief
  271. \param[in] none
  272. \param[out] none
  273. \retval none
  274. */
  275. void TIMER3_IRQHandler(void)
  276. {
  277. if(timer_interrupt_flag_get(TIMER3, TIMER_INT_FLAG_UP))
  278. {
  279. clasB_uwTIM3Cnt++;
  280. /* TBS interrupt */
  281. tbs_voIsr();
  282. timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_UP);
  283. }
  284. }
  285. /*!
  286. \brief
  287. \param[in] none
  288. \param[out] none
  289. \retval none
  290. */
  291. void TIMER5_IRQHandler(void)
  292. {
  293. if(timer_interrupt_flag_get(TIMER5, TIMER_INT_FLAG_UP))
  294. {
  295. clasB_uwTIM5Cnt++;
  296. TimingTaskTimerServer();
  297. /* Event_1ms interrupt */
  298. Event_1ms();
  299. timer_interrupt_flag_clear(TIMER5, TIMER_INT_FLAG_UP);
  300. }
  301. }
  302. /*!
  303. \brief
  304. \param[in] none
  305. \param[out] none
  306. \retval none
  307. */
  308. void USART0_IRQHandler(void)
  309. {
  310. }
  311. /*!
  312. \brief
  313. \param[in] none
  314. \param[out] none
  315. \retval none
  316. */
  317. void DMA1_Channel2_IRQHandler(void)
  318. {
  319. static UWORD uwTempCount = 0;
  320. /* Read PC Conmand */
  321. if (dma_flag_get(DMA1, DMA_CH2, DMA_INT_FLAG_FTF))
  322. {
  323. UART_voCBDoneRead(UART_ERR_OK, 22);
  324. DMA_CH2CTL(DMA1) &= ~DMA_CHXCTL_CHEN;
  325. //dma_flag_clear(DMA1, DMA_CH2, DMA_INT_FLAG_FTF);
  326. DMA_INTC(DMA1) |= DMA_FLAG_ADD(DMA_INT_FLAG_FTF, DMA_CH2);
  327. uwTempCount = 22 - DMA_CH2CNT(DMA1);
  328. DMA_CH2CNT(DMA1) = uwTempCount;
  329. DMA_CH2CTL(DMA1) |= DMA_CHXCTL_CHEN;
  330. }
  331. /* RX error */
  332. if (dma_flag_get(DMA1, DMA_CH2, DMA_FLAG_ERR))
  333. {
  334. DMA_CH2CTL(DMA1) &= ~DMA_CHXCTL_CHEN;
  335. //dma_flag_clear(DMA1, DMA_CH2, DMA_FLAG_ERR);
  336. DMA_INTC(DMA1) |= DMA_FLAG_ADD(DMA_FLAG_ERR, DMA_CH2);
  337. DMA_CH2CNT(DMA1) = 22;
  338. DMA_CH2CTL(DMA1) |= DMA_CHXCTL_CHEN;
  339. }
  340. }
  341. /*!
  342. \brief
  343. \param[in] none
  344. \param[out] none
  345. \retval none
  346. */
  347. void DMA1_Channel4_IRQHandler(void)
  348. {
  349. if (dma_flag_get(DMA1, DMA_CH4, DMA_INT_FLAG_FTF))
  350. {
  351. if (UART_stParaStatus.bParaStart)
  352. {
  353. UART_bInsertPendTx = FALSE; // clear insertBuffer pending
  354. UART_stParaStatus.bParaStart = FALSE; // clear parameter status
  355. }
  356. else
  357. {
  358. // do nothing
  359. }
  360. DMA_CH4CTL(DMA1) &= ~DMA_CHXCTL_CHEN;
  361. //dma_flag_clear(DMA1, DMA_CH4, DMA_INT_FLAG_FTF);
  362. DMA_INTC(DMA1) |= DMA_FLAG_ADD(DMA_INT_FLAG_FTF, DMA_CH4);
  363. UART_stParaStatus.bWriteBusy = FALSE;
  364. }
  365. /* TX error */
  366. if (dma_flag_get(DMA1, DMA_CH4, DMA_FLAG_ERR))
  367. {
  368. if (UART_stParaStatus.bParaStart)
  369. {
  370. UART_bInsertPendTx = FALSE; // clear insertBuffer pending
  371. UART_stParaStatus.bParaStart = FALSE; // clear parameter status
  372. }
  373. DMA_CH4CTL(DMA1) &= ~DMA_CHXCTL_CHEN;
  374. //dma_flag_clear(DMA1, DMA_CH4, DMA_FLAG_ERR);
  375. DMA_INTC(DMA1) |= DMA_FLAG_ADD(DMA_FLAG_ERR, DMA_CH4);
  376. UART_stParaStatus.bWriteBusy = FALSE;
  377. }
  378. }
  379. /*!
  380. \brief
  381. \param[in] none
  382. \param[out] none
  383. \retval none
  384. */
  385. void CAN0_RX0_IRQHandler(void)
  386. {
  387. can_message_receive(CAN0, CAN_FIFO0, pRxMsg);
  388. if((pRxMsg->rx_ff != CAN_FF_STANDARD) || (pRxMsg->rx_dlen == 0))
  389. {
  390. can_interrupt_enable(CAN0, CAN_INT_RFF0);
  391. return;
  392. }
  393. switch (pRxMsg->rx_sfid)
  394. {
  395. case ID_PBU_BC:
  396. case ID_PBU_TO_MC: //鎺ユ敹PBU鏁版嵁
  397. {
  398. CAN_RxBuf_Struct_PBU.ucBufID = pRxMsg->rx_sfid;
  399. CAN_Rx_ISR(&CAN_RxBuf_Struct_PBU, pRxMsg->rx_dlen);
  400. break;
  401. }
  402. case ID_BMS_BC:
  403. case ID_BMS_TO_MC: //鎺ユ敹BMS鏁版嵁
  404. {
  405. CAN_RxBuf_Struct_BMS.ucBufID = pRxMsg->rx_sfid;
  406. CAN_Rx_ISR(&CAN_RxBuf_Struct_BMS, pRxMsg->rx_dlen);
  407. break;
  408. }
  409. case ID_HMI_BC:
  410. case ID_HMI_TO_MC: //鎺ユ敹HMI鏁版嵁
  411. {
  412. CAN_RxBuf_Struct_HMI.ucBufID = pRxMsg->rx_sfid;
  413. CAN_Rx_ISR(&CAN_RxBuf_Struct_HMI, pRxMsg->rx_dlen);
  414. break;
  415. }
  416. case ID_CDL_BC:
  417. case ID_CDL_TO_MC: // case ID_CDL_TO_MC_TE://鎺ユ敹CDL鏁版嵁
  418. {
  419. CAN_RxBuf_Struct_CDL.ucBufID = pRxMsg->rx_sfid;
  420. CAN_Rx_ISR(&CAN_RxBuf_Struct_CDL, pRxMsg->rx_dlen);
  421. break;
  422. }
  423. default:
  424. break;
  425. }
  426. can_interrupt_enable(CAN0, CAN_INT_RFF0);
  427. }
  428. void CAN0_RX1_IRQHandler(void)
  429. {
  430. }