stm32f10x_it.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. ******************************************************************************
  3. * @file Project/STM32F10x_StdPeriph_Template/stm32f10x_it.c
  4. * @author MCD Application Team
  5. * @version V3.5.0
  6. * @date 08-April-2011
  7. * @brief Main Interrupt Service Routines.
  8. * This file provides template for all exceptions handler and
  9. * peripherals interrupt service routine.
  10. ******************************************************************************
  11. * @attention
  12. *
  13. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  14. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  15. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  16. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  17. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  18. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  19. *
  20. * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  21. ******************************************************************************
  22. */
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32f10x_it.h"
  25. #include "includes.h"
  26. #include "radio.h"
  27. #include "encoder.h"
  28. /** @addtogroup STM32F10x_StdPeriph_Template
  29. * @{
  30. */
  31. /* Private typedef -----------------------------------------------------------*/
  32. /* Private define ------------------------------------------------------------*/
  33. /* Private macro -------------------------------------------------------------*/
  34. /* Private variables ---------------------------------------------------------*/
  35. /* Private function prototypes -----------------------------------------------*/
  36. /* Private functions ---------------------------------------------------------*/
  37. /******************************************************************************/
  38. /* Cortex-M3 Processor Exceptions Handlers */
  39. /******************************************************************************/
  40. extern volatile bool IrqFired;
  41. //typedef void ( DioIrqHandler )( void* context );
  42. //static DioIrqHandler *dio1IrqCallback=NULL; //记录DIO1的回调函数句柄
  43. //在中断回调函数中回调 void SX126xIoIrqInit( DioIrqHandler dioIrq ) 中注册的 dioIrq 回调
  44. void EXTI9_5_IRQHandler(void){
  45. if(EXTI_GetITStatus(EXTI_Line8) != RESET)//lora中断
  46. {
  47. IrqFired = true;
  48. EXTI_ClearITPendingBit(EXTI_Line8);//清除中断标志位
  49. }
  50. if(EXTI_GetITStatus(EXTI_Line6) != RESET)//编码器中断
  51. {
  52. encoder_irq_handle(EXTI_LINE6);
  53. EXTI_ClearITPendingBit(EXTI_Line6);//清除中断标志位
  54. }
  55. if(EXTI_GetITStatus(EXTI_Line7) != RESET)//编码器中断
  56. {
  57. encoder_irq_handle(EXTI_LINE7);
  58. EXTI_ClearITPendingBit(EXTI_Line7);//清除中断标志位
  59. }
  60. if(EXTI_GetITStatus(EXTI_Line9) != RESET)//编码器中断
  61. {
  62. encoder_irq_handle(EXTI_LINE9);
  63. EXTI_ClearITPendingBit(EXTI_Line9);//清除中断标志位
  64. }
  65. }
  66. void EXTI15_10_IRQHandler(void){
  67. if(EXTI_GetITStatus(EXTI_Line10) != RESET)//编码器中断
  68. {
  69. encoder_irq_handle(EXTI_LINE10);
  70. EXTI_ClearITPendingBit(EXTI_Line10);//清除中断标志位
  71. }
  72. if(EXTI_GetITStatus(EXTI_Line12) != RESET)//编码器中断
  73. {
  74. encoder_irq_handle(EXTI_LINE12);
  75. EXTI_ClearITPendingBit(EXTI_Line12);//清除中断标志位
  76. }
  77. if(EXTI_GetITStatus(EXTI_Line13) != RESET)//编码器中断
  78. {
  79. encoder_irq_handle(EXTI_LINE13);
  80. EXTI_ClearITPendingBit(EXTI_Line13);//清除中断标志位
  81. }
  82. if(EXTI_GetITStatus(EXTI_Line14) != RESET)//编码器中断
  83. {
  84. encoder_irq_handle(EXTI_LINE14);
  85. EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志位
  86. }
  87. if(EXTI_GetITStatus(EXTI_Line15) != RESET)//编码器中断
  88. {
  89. encoder_irq_handle(EXTI_LINE15);
  90. EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标志位
  91. }
  92. }
  93. /**
  94. * @brief This function handles NMI exception.
  95. * @param None
  96. * @retval None
  97. */
  98. void NMI_Handler(void)
  99. {
  100. }
  101. /**
  102. * @brief This function handles Hard Fault exception.
  103. * @param None
  104. * @retval None
  105. */
  106. void HardFault_Handler(void)
  107. {
  108. /* Go to infinite loop when Hard Fault exception occurs */
  109. while (1)
  110. {
  111. }
  112. }
  113. /**
  114. * @brief This function handles Memory Manage exception.
  115. * @param None
  116. * @retval None
  117. */
  118. void MemManage_Handler(void)
  119. {
  120. /* Go to infinite loop when Memory Manage exception occurs */
  121. while (1)
  122. {
  123. }
  124. }
  125. /**
  126. * @brief This function handles Bus Fault exception.
  127. * @param None
  128. * @retval None
  129. */
  130. void BusFault_Handler(void)
  131. {
  132. /* Go to infinite loop when Bus Fault exception occurs */
  133. while (1)
  134. {
  135. }
  136. }
  137. /**
  138. * @brief This function handles Usage Fault exception.
  139. * @param None
  140. * @retval None
  141. */
  142. void UsageFault_Handler(void)
  143. {
  144. /* Go to infinite loop when Usage Fault exception occurs */
  145. while (1)
  146. {
  147. }
  148. }
  149. /**
  150. * @brief This function handles SVCall exception.
  151. * @param None
  152. * @retval None
  153. */
  154. void SVC_Handler(void)
  155. {
  156. }
  157. /**
  158. * @brief This function handles Debug Monitor exception.
  159. * @param None
  160. * @retval None
  161. */
  162. void DebugMon_Handler(void)
  163. {
  164. }
  165. /**
  166. * @brief This function handles PendSVC exception.
  167. * @param None
  168. * @retval None
  169. */
  170. //void PendSV_Handler(void)
  171. //{
  172. //}
  173. /******************************************************************************/
  174. /* STM32F10x Peripherals Interrupt Handlers */
  175. /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
  176. /* available peripheral interrupt handler's name please refer to the startup */
  177. /* file (startup_stm32f10x_xx.s). */
  178. /******************************************************************************/
  179. /**
  180. * @brief This function handles PPP interrupt request.
  181. * @param None
  182. * @retval None
  183. */
  184. /*void PPP_IRQHandler(void)
  185. {
  186. }*/
  187. /**
  188. * @}
  189. */
  190. void DMA1_Channel4_IRQHandler(void)
  191. {
  192. OSIntEnter();
  193. if( DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET )
  194. {
  195. USART_DMACmd(USART1, USART_DMAReq_Tx, DISABLE);
  196. DMA_Cmd (DMA1_Channel4, DISABLE);//USART1 TX
  197. DMA_ClearFlag(DMA1_FLAG_TC4);
  198. while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  199. {};
  200. GPIO_ResetBits(GPIOA,GPIO_Pin_8);//ENABLE 485 Receive
  201. }
  202. OSIntExit();
  203. }
  204. void DMA1_Channel7_IRQHandler(void)
  205. {
  206. OSIntEnter();
  207. if( DMA_GetFlagStatus(DMA1_FLAG_TC7) == SET )
  208. {
  209. USART_DMACmd(USART2, USART_DMAReq_Tx, DISABLE);
  210. DMA_Cmd (DMA1_Channel7, DISABLE);//USART2 TX
  211. DMA_ClearFlag(DMA1_FLAG_TC7);
  212. while( USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
  213. {};
  214. GPIO_ResetBits(GPIOA,GPIO_Pin_1); //ENABLE 485 Receive
  215. }
  216. OSIntExit();
  217. }
  218. //void USART1_IRQHandler(void) //串口1中断服务程序
  219. //{
  220. // OS_ERR err;
  221. // OSIntEnter();
  222. //
  223. // if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET) //检测到总线空闲
  224. // {
  225. // USART1_RxBUF.len = USATR1_RX_SIZE - DMA_GetCurrDataCounter(DMA1_Channel5);
  226. // OSTaskQPost ((OS_TCB *)&AppTask_OTA_HandleTCB, //目标任务的控制块
  227. // (void *)USART1_RxBUF.buff, //消息内容
  228. // (OS_MSG_SIZE )USART1_RxBUF.len, //消息长度
  229. // (OS_OPT )OS_OPT_POST_FIFO, //发布到任务消息队列的入口端
  230. // (OS_ERR *)&err); //返回错误类型
  231. // DMA_Cmd (DMA1_Channel5, DISABLE);
  232. // DMA_SetCurrDataCounter(DMA1_Channel5, USATR1_RX_SIZE);
  233. // DMA_Cmd (DMA1_Channel5, ENABLE);
  234. // USART_ClearFlag(USART1, USART_FLAG_RXNE);
  235. // USART_GetITStatus(USART1, USART_IT_IDLE); //Clear IDLE Flag
  236. // USART_ReceiveData(USART1); //Clear IDLE Flag
  237. // }
  238. //
  239. // OSIntExit();
  240. //}
  241. //void USART2_IRQHandler(void)
  242. //{
  243. // OS_ERR err;
  244. // OSIntEnter();
  245. // if(USART_GetITStatus(USART2, USART_IT_IDLE) == SET)
  246. // {
  247. // ErrFlag = 0;//计数清零
  248. //
  249. // USART2_RxBUF.len = USATR2_RX_SIZE - DMA_GetCurrDataCounter(DMA1_Channel6);
  250. //
  251. // OSTaskQPost ((OS_TCB *)&AppTask_Server_ComTCB, //目标任务的控制块
  252. // (void *)USART2_RxBUF.buff, //消息内容
  253. // (OS_MSG_SIZE )USART2_RxBUF.len, //消息长度
  254. // (OS_OPT )OS_OPT_POST_FIFO, //发布到任务消息队列的入口端
  255. // (OS_ERR *)&err); //返回错误类型
  256. // DMA_Cmd (DMA1_Channel6, DISABLE);
  257. // DMA_SetCurrDataCounter(DMA1_Channel6, USATR2_RX_SIZE);
  258. // DMA_Cmd (DMA1_Channel6, ENABLE);
  259. //
  260. // USART_ClearFlag(USART2, USART_FLAG_RXNE);
  261. // USART_GetITStatus(USART2, USART_IT_IDLE); //Clear IDLE Flag
  262. // USART_ReceiveData(USART2); //Clear IDLE Flag
  263. // }
  264. //
  265. // OSIntExit();
  266. //}
  267. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/