stm32f10x_mc_it.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. /**
  2. ******************************************************************************
  3. * @file stm32f10x_mc_it.c
  4. * @author Motor Control SDK Team, ST Microelectronics
  5. * @brief Main Interrupt Service Routines.
  6. * This file provides exceptions handler and peripherals interrupt
  7. * service routine related to Motor Control for the STM32F1 Family.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  12. * All rights reserved.</center></h2>
  13. *
  14. * This software component is licensed by ST under Ultimate Liberty license
  15. * SLA0044, the "License"; You may not use this file except in compliance with
  16. * the License. You may obtain a copy of the License at:
  17. * www.st.com/SLA0044
  18. *
  19. ******************************************************************************
  20. * @ingroup STM32F10x_IRQ_Handlers
  21. */
  22. /* Includes ------------------------------------------------------------------*/
  23. #include "mc_type.h"
  24. #include "mc_tasks.h"
  25. #include "ui_task.h"
  26. #include "parameters_conversion.h"
  27. #include "motorcontrol.h"
  28. /* USER CODE BEGIN Includes */
  29. /* USER CODE END Includes */
  30. /** @addtogroup MCSDK
  31. * @{
  32. */
  33. /** @addtogroup STM32F10x_IRQ_Handlers STM32F10x IRQ Handlers
  34. * @{
  35. */
  36. /* USER CODE BEGIN PRIVATE */
  37. /* Private typedef -----------------------------------------------------------*/
  38. /* Private define ------------------------------------------------------------*/
  39. #define SYSTICK_DIVIDER (SYS_TICK_FREQUENCY/1000)
  40. /* Private macro -------------------------------------------------------------*/
  41. /* Private variables ---------------------------------------------------------*/
  42. /* Private function prototypes -----------------------------------------------*/
  43. /* Private functions ---------------------------------------------------------*/
  44. /* USER CODE END PRIVATE */
  45. /* Public prototypes of IRQ handlers called from assembly code ---------------*/
  46. void ADC1_2_IRQHandler(void);
  47. void TIMx_UP_M1_IRQHandler(void);
  48. void DMAx_R1_M1_IRQHandler(void);
  49. void TIMx_BRK_M1_IRQHandler(void);
  50. void SPD_TIM_M1_IRQHandler(void);
  51. void USART_IRQHandler(void);
  52. void HardFault_Handler(void);
  53. void SysTick_Handler(void);
  54. void PFC_TIM_IRQHandler(void);
  55. void EXTI9_5_IRQHandler (void);
  56. /**
  57. * @brief This function handles ADC1/ADC2 interrupt request.
  58. * @param None
  59. * @retval None
  60. */
  61. void ADC1_2_IRQHandler(void)
  62. {
  63. /* USER CODE BEGIN ADC1_2_IRQn 0 */
  64. /* USER CODE END ADC1_2_IRQn 0 */
  65. ADC1->SR &= ~(uint32_t)(LL_ADC_FLAG_JEOS | LL_ADC_FLAG_JSTRT);
  66. TSK_HighFrequencyTask(); /*GUI, this section is present only if DAC is disabled*/
  67. /* USER CODE BEGIN ADC1_2_IRQn 1 */
  68. /* USER CODE END ADC1_2_IRQn 1 */
  69. }
  70. /**
  71. * @brief This function handles first motor TIMx Update interrupt request.
  72. * @param None
  73. * @retval None
  74. */
  75. void TIMx_UP_M1_IRQHandler(void)
  76. {
  77. /* USER CODE BEGIN TIMx_UP_M1_IRQn 0 */
  78. /* USER CODE END TIMx_UP_M1_IRQn 0 */
  79. LL_TIM_ClearFlag_UPDATE(TIM1);
  80. R3_2_TIMx_UP_IRQHandler(&PWM_Handle_M1);
  81. /* USER CODE BEGIN TIMx_UP_M1_IRQn 1 */
  82. /* USER CODE END TIMx_UP_M1_IRQn 1 */
  83. }
  84. /**
  85. * @brief This function handles first motor BRK interrupt.
  86. * @param None
  87. * @retval None
  88. */
  89. void TIMx_BRK_M1_IRQHandler(void)
  90. {
  91. /* USER CODE BEGIN TIMx_BRK_M1_IRQn 0 */
  92. /* USER CODE END TIMx_BRK_M1_IRQn 0 */
  93. if (LL_TIM_IsActiveFlag_BRK(PWM_Handle_M1.pParams_str->TIMx))
  94. {
  95. LL_TIM_ClearFlag_BRK(PWM_Handle_M1.pParams_str->TIMx);
  96. R3_2_BRK_IRQHandler(&PWM_Handle_M1);
  97. }
  98. /* Systick is not executed due low priority so is necessary to call MC_Scheduler here.*/
  99. MC_Scheduler();
  100. /* USER CODE BEGIN TIMx_BRK_M1_IRQn 1 */
  101. /* USER CODE END TIMx_BRK_M1_IRQn 1 */
  102. }
  103. /**
  104. * @brief This function handles TIMx global interrupt request for M1 Speed Sensor.
  105. * @param None
  106. * @retval None
  107. */
  108. void SPD_TIM_M1_IRQHandler(void)
  109. {
  110. /* USER CODE BEGIN SPD_TIM_M1_IRQn 0 */
  111. /* USER CODE END SPD_TIM_M1_IRQn 0 */
  112. /* HALL Timer Update IT always enabled, no need to check enable UPDATE state */
  113. if (LL_TIM_IsActiveFlag_UPDATE(HALL_M1.TIMx))
  114. {
  115. LL_TIM_ClearFlag_UPDATE(HALL_M1.TIMx);
  116. HALL_TIMx_UP_IRQHandler(&HALL_M1);
  117. /* USER CODE BEGIN M1 HALL_Update */
  118. /* USER CODE END M1 HALL_Update */
  119. }
  120. else
  121. {
  122. /* Nothing to do */
  123. }
  124. /* HALL Timer CC1 IT always enabled, no need to check enable CC1 state */
  125. if (LL_TIM_IsActiveFlag_CC1 (HALL_M1.TIMx))
  126. {
  127. LL_TIM_ClearFlag_CC1(HALL_M1.TIMx);
  128. HALL_TIMx_CC_IRQHandler(&HALL_M1);
  129. /* USER CODE BEGIN M1 HALL_CC1 */
  130. /* USER CODE END M1 HALL_CC1 */
  131. }
  132. else
  133. {
  134. /* Nothing to do */
  135. }
  136. /* USER CODE BEGIN SPD_TIM_M1_IRQn 1 */
  137. /* USER CODE END SPD_TIM_M1_IRQn 1 */
  138. }
  139. /*Start here***********************************************************/
  140. /*GUI, this section is present only if serial communication is enabled*/
  141. /**
  142. * @brief This function handles USART interrupt request.
  143. * @param None
  144. * @retval None
  145. */
  146. void USART_IRQHandler(void)
  147. {
  148. /* USER CODE BEGIN USART_IRQn 0 */
  149. /* USER CODE END USART_IRQn 0 */
  150. uint16_t hUSART_SR = pUSART.USARTx->SR;
  151. if (hUSART_SR & USART_SR_ORE) /* Overrun error occurs before SR access */
  152. {
  153. /* Send Overrun message */
  154. UFCP_OVR_IRQ_Handler(&pUSART);
  155. LL_USART_ClearFlag_ORE(pUSART.USARTx); /* Clear overrun flag */
  156. UI_SerialCommunicationTimeOutStop();
  157. /* USER CODE BEGIN USART_ORE */
  158. /* USER CODE END USART_ORE */
  159. }
  160. if (hUSART_SR & USART_SR_RXNE) /* Valid data received */
  161. {
  162. uint16_t retVal;
  163. retVal = *(uint16_t*)UFCP_RX_IRQ_Handler(&pUSART,LL_USART_ReceiveData8(pUSART.USARTx)); /* Flag 0 = RX */
  164. if (retVal == 1)
  165. {
  166. UI_SerialCommunicationTimeOutStart();
  167. }
  168. if (retVal == 2)
  169. {
  170. UI_SerialCommunicationTimeOutStop();
  171. }
  172. /* USER CODE BEGIN USART_RXNE */
  173. /* USER CODE END USART_RXNE */
  174. }
  175. if(LL_USART_IsActiveFlag_TXE(pUSART.USARTx))
  176. {
  177. UFCP_TX_IRQ_Handler(&pUSART); /* Flag 1 = TX */
  178. /* USER CODE BEGIN USART_TXE */
  179. /* USER CODE END USART_TXE */
  180. }
  181. /* USER CODE BEGIN USART_IRQn 1 */
  182. /* USER CODE END USART_IRQn 1 */
  183. }
  184. /**
  185. * @brief This function handles Hard Fault exception.
  186. * @param None
  187. * @retval None
  188. */
  189. void HardFault_Handler(void)
  190. {
  191. /* USER CODE BEGIN HardFault_IRQn 0 */
  192. /* USER CODE END HardFault_IRQn 0 */
  193. TSK_HardwareFaultTask();
  194. /* Go to infinite loop when Hard Fault exception occurs */
  195. while (1)
  196. {
  197. {
  198. if (LL_USART_IsActiveFlag_ORE(pUSART.USARTx)) /* Overrun error occurs */
  199. {
  200. /* Send Overrun message */
  201. UFCP_OVR_IRQ_Handler(&pUSART);
  202. LL_USART_ClearFlag_ORE(pUSART.USARTx); /* Clear overrun flag */
  203. UI_SerialCommunicationTimeOutStop();
  204. }
  205. if (LL_USART_IsActiveFlag_TXE(pUSART.USARTx))
  206. {
  207. UFCP_TX_IRQ_Handler(&pUSART);
  208. }
  209. if (LL_USART_IsActiveFlag_RXNE(pUSART.USARTx)) /* Valid data have been received */
  210. {
  211. uint16_t retVal;
  212. retVal = *(uint16_t*)(UFCP_RX_IRQ_Handler(&pUSART,LL_USART_ReceiveData8(pUSART.USARTx)));
  213. if (retVal == 1)
  214. {
  215. UI_SerialCommunicationTimeOutStart();
  216. }
  217. if (retVal == 2)
  218. {
  219. UI_SerialCommunicationTimeOutStop();
  220. }
  221. }
  222. else
  223. {
  224. }
  225. }
  226. }
  227. /* USER CODE BEGIN HardFault_IRQn 1 */
  228. /* USER CODE END HardFault_IRQn 1 */
  229. }
  230. void SysTick_Handler(void)
  231. {
  232. #ifdef MC_HAL_IS_USED
  233. static uint8_t SystickDividerCounter = SYSTICK_DIVIDER;
  234. /* USER CODE BEGIN SysTick_IRQn 0 */
  235. /* USER CODE END SysTick_IRQn 0 */
  236. if (SystickDividerCounter == SYSTICK_DIVIDER)
  237. {
  238. HAL_IncTick();
  239. HAL_SYSTICK_IRQHandler();
  240. SystickDividerCounter = 0;
  241. }
  242. SystickDividerCounter ++;
  243. #endif /* MC_HAL_IS_USED */
  244. /* USER CODE BEGIN SysTick_IRQn 1 */
  245. /* USER CODE END SysTick_IRQn 1 */
  246. MC_RunMotorControlTasks();
  247. /* USER CODE BEGIN SysTick_IRQn 2 */
  248. /* USER CODE END SysTick_IRQn 2 */
  249. }
  250. /* USER CODE BEGIN 1 */
  251. /* USER CODE END 1 */
  252. /**
  253. * @}
  254. */
  255. /**
  256. * @}
  257. */
  258. /******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/