bsp_int.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:15k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                     MICIRUM BOARD SUPPORT PACKAGE
  4. *
  5. *                            (c) Copyright 2007-2008; Micrium, Inc.; Weston, FL
  6. *
  7. *                   All rights reserved.  Protected by international copyright laws.
  8. *                   Knowledge of the source code may not be used to write a similar
  9. *                   product.  This file may only be used in accordance with a license
  10. *                   and should not be redistributed in any way.
  11. *********************************************************************************************************
  12. */
  13. /*
  14. *********************************************************************************************************
  15. *
  16. *                                        BOARD SUPPORT PACKAGE
  17. *
  18. *                                     ST Microelectronics STM32
  19. *                                              with the
  20. *                                   STM3210B-EVAL Evaluation Board
  21. *
  22. * Filename      : bsp_int.c
  23. * Version       : V1.00
  24. * Programmer(s) : BAN
  25. *********************************************************************************************************
  26. */
  27. /*
  28. *********************************************************************************************************
  29. *                                             INCLUDE FILES
  30. *********************************************************************************************************
  31. */
  32. #define  BSP_INT_MODULE
  33. #include <bsp.h>
  34. /*
  35. *********************************************************************************************************
  36. *                                            LOCAL DEFINES
  37. *********************************************************************************************************
  38. */
  39. #define  BSP_INT_SRC_NBR                                 42
  40. /*
  41. *********************************************************************************************************
  42. *                                           LOCAL CONSTANTS
  43. *********************************************************************************************************
  44. */
  45. /*
  46. *********************************************************************************************************
  47. *                                          LOCAL DATA TYPES
  48. *********************************************************************************************************
  49. */
  50. /*
  51. *********************************************************************************************************
  52. *                                            LOCAL TABLES
  53. *********************************************************************************************************
  54. */
  55. static  CPU_FNCT_VOID  BSP_IntVectTbl[BSP_INT_SRC_NBR];
  56. /*
  57. *********************************************************************************************************
  58. *                                       LOCAL GLOBAL VARIABLES
  59. *********************************************************************************************************
  60. */
  61. /*
  62. *********************************************************************************************************
  63. *                                      LOCAL FUNCTION PROTOTYPES
  64. *********************************************************************************************************
  65. */
  66. static  void  BSP_IntHandler     (CPU_DATA  int_id);
  67. static  void  BSP_IntHandlerDummy(void);
  68. /*
  69. *********************************************************************************************************
  70. *                                     LOCAL CONFIGURATION ERRORS
  71. *********************************************************************************************************
  72. */
  73. /*
  74. *********************************************************************************************************
  75. *                                              BSP_IntClr()
  76. *
  77. * Description : Clear interrupt.
  78. *
  79. * Argument(s) : int_id      Interrupt to clear.
  80. *
  81. * Return(s)   : none.
  82. *
  83. * Caller(s)   : Application.
  84. *
  85. * Note(s)     : (1) An interrupt does not need to be cleared within the interrupt controller.
  86. *********************************************************************************************************
  87. */
  88. void  BSP_IntClr (CPU_DATA  int_id)
  89. {
  90. }
  91. /*
  92. *********************************************************************************************************
  93. *                                              BSP_IntDis()
  94. *
  95. * Description : Disable interrupt.
  96. *
  97. * Argument(s) : int_id      Interrupt to disable.
  98. *
  99. * Return(s)   : none.
  100. *
  101. * Caller(s)   : Application.
  102. *
  103. * Note(s)     : none.
  104. *********************************************************************************************************
  105. */
  106. void  BSP_IntDis (CPU_DATA  int_id)
  107. {
  108.     if (int_id < BSP_INT_SRC_NBR) {
  109.         CPU_IntSrcDis(int_id + 16);
  110.     }
  111. }
  112. /*
  113. *********************************************************************************************************
  114. *                                           BSP_IntDisAll()
  115. *
  116. * Description : Disable ALL interrupts.
  117. *
  118. * Argument(s) : none.
  119. *
  120. * Return(s)   : none.
  121. *
  122. * Caller(s)   : Application.
  123. *
  124. * Note(s)     : none.
  125. *********************************************************************************************************
  126. */
  127. void  BSP_IntDisAll (void)
  128. {
  129.     CPU_IntDis();
  130. }
  131. /*
  132. *********************************************************************************************************
  133. *                                               BSP_IntEn()
  134. *
  135. * Description : Enable interrupt.
  136. *
  137. * Argument(s) : int_id      Interrupt to enable.
  138. *
  139. * Return(s)   : none.
  140. *
  141. * Caller(s)   : Application.
  142. *
  143. * Note(s)     : none.
  144. *********************************************************************************************************
  145. */
  146. void  BSP_IntEn (CPU_DATA  int_id)
  147. {
  148.     if (int_id < BSP_INT_SRC_NBR) {
  149.         CPU_IntSrcEn(int_id + 16);
  150.     }
  151. }
  152. /*
  153. *********************************************************************************************************
  154. *                                            BSP_IntVectSet()
  155. *
  156. * Description : Assign ISR handler.
  157. *
  158. * Argument(s) : int_id      Interrupt for which vector will be set.
  159. *
  160. *               isr         Handler to assign
  161. *
  162. * Return(s)   : none.
  163. *
  164. * Caller(s)   : Application.
  165. *
  166. * Note(s)     : none.
  167. *********************************************************************************************************
  168. */
  169. void  BSP_IntVectSet (CPU_DATA       int_id,
  170.                       CPU_FNCT_VOID  isr)
  171. {
  172. #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
  173.     CPU_SR   cpu_sr;
  174. #endif
  175.     if (int_id < BSP_INT_SRC_NBR) {
  176.         CPU_CRITICAL_ENTER();
  177.         BSP_IntVectTbl[int_id] = isr;
  178.         CPU_CRITICAL_EXIT();
  179.     }
  180. }
  181. /*
  182. *********************************************************************************************************
  183. *                                            BSP_IntPrioSet()
  184. *
  185. * Description : Assign ISR priority.
  186. *
  187. * Argument(s) : int_id      Interrupt for which vector will be set.
  188. *
  189. *               prio        Priority to assign
  190. *
  191. * Return(s)   : none.
  192. *
  193. * Caller(s)   : Application.
  194. *
  195. * Note(s)     : none.
  196. *********************************************************************************************************
  197. */
  198. void  BSP_IntPrioSet (CPU_DATA    int_id,
  199.                       CPU_INT08U  prio)
  200. {
  201. #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
  202.     CPU_SR    cpu_sr;
  203. #endif
  204.     if (int_id < BSP_INT_SRC_NBR) {
  205.         CPU_CRITICAL_ENTER();
  206.         CPU_IntSrcPrioSet(int_id + 16, prio);
  207.         CPU_CRITICAL_EXIT();
  208.     }
  209. }
  210. /*
  211. *********************************************************************************************************
  212. *********************************************************************************************************
  213. *                                           INTERNAL FUNCTIONS
  214. *********************************************************************************************************
  215. *********************************************************************************************************
  216. */
  217. /*
  218. *********************************************************************************************************
  219. *                                              BSP_IntInit()
  220. *
  221. * Description : Initialize interrupts:
  222. *
  223. * Argument(s) : none.
  224. *
  225. * Return(s)   : none.
  226. *
  227. * Caller(s)   : BSP_Init().
  228. *
  229. * Note(s)     : none.
  230. *********************************************************************************************************
  231. */
  232. void  BSP_IntInit (void)
  233. {
  234.     CPU_DATA  int_id;
  235.     for (int_id = 0; int_id < BSP_INT_SRC_NBR; int_id++) {
  236.         BSP_IntVectSet(int_id, BSP_IntHandlerDummy);
  237.     }
  238. }
  239. /*
  240. *********************************************************************************************************
  241. *                                        BSP_IntHandler####()
  242. *
  243. * Description : Handle an interrupt.
  244. *
  245. * Argument(s) : none.
  246. *
  247. * Return(s)   : none.
  248. *
  249. * Caller(s)   : This is an ISR.
  250. *
  251. * Note(s)     : none.
  252. *********************************************************************************************************
  253. */
  254. void  BSP_IntHandlerWWDG          (void)  { BSP_IntHandler(BSP_INT_ID_WWDG);            }
  255. void  BSP_IntHandlerPVD           (void)  { BSP_IntHandler(BSP_INT_ID_PVD);             }
  256. void  BSP_IntHandlerTAMPER        (void)  { BSP_IntHandler(BSP_INT_ID_TAMPER);          }
  257. void  BSP_IntHandlerRTC           (void)  { BSP_IntHandler(BSP_INT_ID_RTC);             }
  258. void  BSP_IntHandlerFLASH         (void)  { BSP_IntHandler(BSP_INT_ID_FLASH);           }
  259. void  BSP_IntHandlerRCC           (void)  { BSP_IntHandler(BSP_INT_ID_RCC);             }
  260. void  BSP_IntHandlerEXTI0         (void)  { BSP_IntHandler(BSP_INT_ID_EXTI0);           }
  261. void  BSP_IntHandlerEXTI1         (void)  { BSP_IntHandler(BSP_INT_ID_EXTI1);           }
  262. void  BSP_IntHandlerEXTI2         (void)  { BSP_IntHandler(BSP_INT_ID_EXTI2);           }
  263. void  BSP_IntHandlerEXTI3         (void)  { BSP_IntHandler(BSP_INT_ID_EXTI3);           }
  264. void  BSP_IntHandlerEXTI4         (void)  { BSP_IntHandler(BSP_INT_ID_EXTI4);           }
  265. void  BSP_IntHandlerDMA1_CH1      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH1);        }
  266. void  BSP_IntHandlerDMA1_CH2      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH2);        }
  267. void  BSP_IntHandlerDMA1_CH3      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH3);        }
  268. void  BSP_IntHandlerDMA1_CH4      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH4);        }
  269. void  BSP_IntHandlerDMA1_CH5      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH5);        }
  270. void  BSP_IntHandlerDMA1_CH6      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH6);        }
  271. void  BSP_IntHandlerDMA1_CH7      (void)  { BSP_IntHandler(BSP_INT_ID_DMA1_CH7);        }
  272. void  BSP_IntHandlerADC1_2        (void)  { BSP_IntHandler(BSP_INT_ID_ADC1_2);          }
  273. void  BSP_IntHandlerUSB_HP_CAN_TX (void)  { BSP_IntHandler(BSP_INT_ID_USB_HP_CAN_TX);   }
  274. void  BSP_IntHandlerUSB_LP_CAN_RX0(void)  { BSP_IntHandler(BSP_INT_ID_USB_LP_CAN_RX0);  }
  275. void  BSP_IntHandlerCAN_RX1       (void)  { BSP_IntHandler(BSP_INT_ID_CAN_RX1);         }
  276. void  BSP_IntHandlerCAN_SCE       (void)  { BSP_IntHandler(BSP_INT_ID_CAN_SCE);         }
  277. void  BSP_IntHandlerEXTI9_5       (void)  { BSP_IntHandler(BSP_INT_ID_EXTI9_5);         }
  278. void  BSP_IntHandlerTIM1_BRK      (void)  { BSP_IntHandler(BSP_INT_ID_TIM1_BRK);        }
  279. void  BSP_IntHandlerTIM1_UP       (void)  { BSP_IntHandler(BSP_INT_ID_TIM1_UP);         }
  280. void  BSP_IntHandlerTIM1_TRG_COM  (void)  { BSP_IntHandler(BSP_INT_ID_TIM1_TRG_COM);    }
  281. void  BSP_IntHandlerTIM1_CC       (void)  { BSP_IntHandler(BSP_INT_ID_TIM1_CC);         }
  282. void  BSP_IntHandlerTIM2          (void)  { BSP_IntHandler(BSP_INT_ID_TIM2);            }
  283. void  BSP_IntHandlerTIM3          (void)  { BSP_IntHandler(BSP_INT_ID_TIM3);            }
  284. void  BSP_IntHandlerTIM4          (void)  { BSP_IntHandler(BSP_INT_ID_TIM4);            }
  285. void  BSP_IntHandlerI2C1_EV       (void)  { BSP_IntHandler(BSP_INT_ID_I2C1_EV);         }
  286. void  BSP_IntHandlerI2C1_ER       (void)  { BSP_IntHandler(BSP_INT_ID_I2C1_ER);         }
  287. void  BSP_IntHandlerI2C2_EV       (void)  { BSP_IntHandler(BSP_INT_ID_I2C2_EV);         }
  288. void  BSP_IntHandlerI2C2_ER       (void)  { BSP_IntHandler(BSP_INT_ID_I2C2_ER);         }
  289. void  BSP_IntHandlerSPI1          (void)  { BSP_IntHandler(BSP_INT_ID_SPI1);            }
  290. void  BSP_IntHandlerSPI2          (void)  { BSP_IntHandler(BSP_INT_ID_SPI2);            }
  291. void  BSP_IntHandlerUSART1        (void)  { BSP_IntHandler(BSP_INT_ID_USART1);          }
  292. void  BSP_IntHandlerUSART2        (void)  { BSP_IntHandler(BSP_INT_ID_USART2);          }
  293. void  BSP_IntHandlerUSART3        (void)  { BSP_IntHandler(BSP_INT_ID_USART3);          }
  294. void  BSP_IntHandlerEXTI15_10     (void)  { BSP_IntHandler(BSP_INT_ID_EXTI15_10);       }
  295. void  BSP_IntHandlerRTCAlarm      (void)  { BSP_IntHandler(BSP_INT_ID_RTCAlarm);        }
  296. void  BSP_IntHandlerUSBWakeUp     (void)  { BSP_IntHandler(BSP_INT_ID_USBWakeUp);       }
  297. /*
  298. *********************************************************************************************************
  299. *********************************************************************************************************
  300. *                                           LOCAL FUNCTIONS
  301. *********************************************************************************************************
  302. *********************************************************************************************************
  303. */
  304. /*
  305. *********************************************************************************************************
  306. *                                          BSP_IntHandler()
  307. *
  308. * Description : Central interrupt handler.
  309. *
  310. * Argument(s) : int_id          Interrupt that will be handled.
  311. *
  312. * Return(s)   : none.
  313. *
  314. * Caller(s)   : ISR handlers.
  315. *
  316. * Note(s)     : none.
  317. *********************************************************************************************************
  318. */
  319. static  void  BSP_IntHandler (CPU_DATA  int_id)
  320. {
  321. #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
  322.     //CPU_SR         cpu_sr;
  323. #endif
  324.     CPU_FNCT_VOID  isr;
  325.     //CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR            */
  326.     //OSIntNesting++;
  327.     //CPU_CRITICAL_EXIT();
  328.     if (int_id < BSP_INT_SRC_NBR) {
  329.         isr = BSP_IntVectTbl[int_id];
  330.         if (isr != (CPU_FNCT_VOID)0) {
  331.             isr();
  332.         }
  333.     }
  334.     //OSIntExit();                                                /* Tell uC/OS-II that we are leaving the ISR            */
  335. }
  336. /*
  337. *********************************************************************************************************
  338. *                                        BSP_IntHandlerDummy()
  339. *
  340. * Description : Dummy interrupt handler.
  341. *
  342. * Argument(s) : none.
  343. *
  344. * Return(s)   : none.
  345. *
  346. * Caller(s)   : BSP_IntHandler().
  347. *
  348. * Note(s)     : none.
  349. *********************************************************************************************************
  350. */
  351. static  void  BSP_IntHandlerDummy (void)
  352. {
  353. }