GD32 NVIC 结构体成员解析

[复制链接]
 楼主| sunmeat 发表于 2015-7-12 19:31 | 显示全部楼层 |阅读模式
vi, ic, BLE, IO, rio
本帖最后由 sunmeat 于 2015-7-12 19:40 编辑

    当我们要使用NVIC来配置中断时,GD32中有个NVIC的初始化函数,函数如下NVIC_Init(NVIC_InitPara* NVIC_InitStruct);对 NVIC 初始化,首先要定义并填充一个 NVIC_InitPara 类型的结构体。这个结构体有 4 个成员,如下所示:
  1. typedef struct
  2. {
  3.     uint8_t NVIC_IRQ;                    /*!< The IRQ type,detailed in [url=home.php?mod=space&uid=144993]@ref[/url] IRQn_Type */

  4.     uint8_t NVIC_IRQPreemptPriority;     /*!< The pre-emption priority of NVIC_IRQ, detailed in [url=home.php?mod=space&uid=144993]@ref[/url] NVIC_Priority_Table */

  5.     uint8_t NVIC_IRQSubPriority;         /*!< The  SubPriority  of NVIC_IRQ, detailed in [url=home.php?mod=space&uid=144993]@ref[/url] NVIC_Priority_Table */

  6.     TypeState NVIC_IRQEnable;            /*!< Enable or disable the IRQ,this parameter can be ENABLE or DISABLE */

  7. } NVIC_InitPara;

  PS:直接复制过来的代码,支持度不是很好

   
 楼主| sunmeat 发表于 2015-7-12 19:44 | 显示全部楼层
uint8_t NVIC_IRQ;//这个参数为需要配置的中断向量,GD32中包含的中断向量的定义在gd32f10x.h中的结构体IRQn_Type中,涉及到的代码如下
  1. /*!< Interrupt Number Definition */
  2. typedef enum IRQn
  3. {
  4. /******  Cortex-M3 Processor Exceptions Numbers ***************************************************/
  5.     NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                             */
  6.     MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M3 Memory Management Interrupt              */
  7.     BusFault_IRQn               = -11,    /*!< 5 Cortex-M3 Bus Fault Interrupt                      */
  8.     UsageFault_IRQn             = -10,    /*!< 6 Cortex-M3 Usage Fault Interrupt                    */
  9.     SVCall_IRQn                 = -5,     /*!< 11 Cortex-M3 SV Call Interrupt                       */
  10.     DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */
  11.     PendSV_IRQn                 = -2,     /*!< 14 Cortex-M3 Pend SV Interrupt                       */
  12.     SysTick_IRQn                = -1,     /*!< 15 Cortex-M3 System Tick Interrupt                   */

  13. /******  GD32 specific Interrupt Numbers *********************************************************/
  14.     WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                            */
  15.     LVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt            */
  16.     TAMPER_IRQn                 = 2,      /*!< Tamper Interrupt                                     */
  17.     RTC_IRQn                    = 3,      /*!< RTC global Interrupt                                 */
  18.     FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                               */
  19.     RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                 */
  20.     EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                 */
  21.     EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                 */
  22.     EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                 */
  23.     EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                 */
  24.     EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                 */
  25.     DMA1_Channel1_IRQn          = 11,     /*!< DMA1 Channel 1 global Interrupt                      */
  26.     DMA1_Channel2_IRQn          = 12,     /*!< DMA1 Channel 2 global Interrupt                      */
  27.     DMA1_Channel3_IRQn          = 13,     /*!< DMA1 Channel 3 global Interrupt                      */
  28.     DMA1_Channel4_IRQn          = 14,     /*!< DMA1 Channel 4 global Interrupt                      */
  29.     DMA1_Channel5_IRQn          = 15,     /*!< DMA1 Channel 5 global Interrupt                      */
  30.     DMA1_Channel6_IRQn          = 16,     /*!< DMA1 Channel 6 global Interrupt                      */
  31.     DMA1_Channel7_IRQn          = 17,     /*!< DMA1 Channel 7 global Interrupt                      */

  32. #ifdef GD32F10X_MD
  33.     ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  34.     USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  35.     USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  36.     CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  37.     CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  38.     EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  39.     TIMER1_BRK_IRQn             = 24,     /*!< TIMER1 Break Interrupt                               */
  40.     TIMER1_UP_IRQn              = 25,     /*!< TIMER1 Update Interrupt                              */
  41.     TIMER1_TRG_COM_IRQn         = 26,     /*!< TIMER1 Trigger and Commutation Interrupt             */
  42.     TIMER1_CC_IRQn              = 27,     /*!< TIMER1 Capture Compare Interrupt                     */
  43.     TIMER2_IRQn                 = 28,     /*!< TIMER2 global Interrupt                              */
  44.     TIMER3_IRQn                 = 29,     /*!< TIMER3 global Interrupt                              */
  45.     TIMER4_IRQn                 = 30,     /*!< TIMER4 global Interrupt                              */
  46.     I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  47.     I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  48.     I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  49.     I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  50.     SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  51.     SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  52.     USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  53.     USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  54.     USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  55.     EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  56.     RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  57.     USBWakeUp_IRQn              = 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */
  58.     EXMC_IRQn                   = 48     /*!< EXMC global Interrupt                                */  
  59. #endif /* GD32F10X_MD */  

  60. #ifdef GD32F10X_HD
  61.     ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  62.     USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  63.     USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  64.     CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  65.     CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  66.     EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  67.     TIMER1_BRK_IRQn             = 24,     /*!< TIMER1 Break Interrupt                               */
  68.     TIMER1_UP_IRQn              = 25,     /*!< TIMER1 Update Interrupt                              */
  69.     TIMER1_TRG_COM_IRQn         = 26,     /*!< TIMER1 Trigger and Commutation Interrupt             */
  70.     TIMER1_CC_IRQn              = 27,     /*!< TIMER1 Capture Compare Interrupt                     */
  71.     TIMER2_IRQn                 = 28,     /*!< TIMER2 global Interrupt                              */
  72.     TIMER3_IRQn                 = 29,     /*!< TIMER3 global Interrupt                              */
  73.     TIMER4_IRQn                 = 30,     /*!< TIMER4 global Interrupt                              */
  74.     I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  75.     I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  76.     I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  77.     I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  78.     SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  79.     SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  80.     USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  81.     USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  82.     USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  83.     EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  84.     RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  85.     USBWakeUp_IRQn              = 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */
  86.     TIMER8_BRK_IRQn             = 43,     /*!< TIMER8 Break Interrupt                               */
  87.     TIMER8_UP_IRQn              = 44,     /*!< TIMER8 Update Interrupt                              */
  88.     TIMER8_TRG_COM_IRQn         = 45,     /*!< TIMER8 Trigger and Commutation Interrupt             */
  89.     TIMER8_CC_IRQn              = 46,     /*!< TIMER8 Capture Compare Interrupt                     */
  90.     ADC3_IRQn                   = 47,     /*!< ADC3 global Interrupt                                */
  91.     EXMC_IRQn                   = 48,     /*!< EXMC global Interrupt                                */
  92.     SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                */
  93.     TIMER5_IRQn                 = 50,     /*!< TIMER5 global Interrupt                              */
  94.     SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                */
  95.     UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                               */
  96.     UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                               */
  97.     TIMER6_IRQn                 = 54,     /*!< TIMER6 global Interrupt                              */
  98.     TIMER7_IRQn                 = 55,     /*!< TIMER7 global Interrupt                              */
  99.     DMA2_Channel1_IRQn          = 56,     /*!< DMA2 Channel 1 global Interrupt                      */
  100.     DMA2_Channel2_IRQn          = 57,     /*!< DMA2 Channel 2 global Interrupt                      */
  101.     DMA2_Channel3_IRQn          = 58,     /*!< DMA2 Channel 3 global Interrupt                      */
  102.     DMA2_Channel4_5_IRQn        = 59      /*!< DMA2 Channel 4 and Channel 5 global Interrupt        */
  103. #endif /* GD32F10X_HD */  

  104. #ifdef GD32F10X_XD
  105.     ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  106.     USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  107.     USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  108.     CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  109.     CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  110.     EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  111.     TIMER1_BRK_TIMER9_IRQn      = 24,     /*!< TIMER1 Break Interrupt and TIMER9 global Interrupt   */
  112.     TIMER1_UP_TIMER10_IRQn      = 25,     /*!< TIMER1 Update Interrupt and TIMER10 global Interrupt */
  113.     TIMER1_TRG_COM_TIMER11_IRQn = 26,     /*!< TIMER1 Trigger and Commutation Interrupt and TIMER11 global interrupt */
  114.     TIMER1_CC_IRQn              = 27,     /*!< TIMER1 Capture Compare Interrupt                     */
  115.     TIMER2_IRQn                 = 28,     /*!< TIMER2 global Interrupt                              */
  116.     TIMER3_IRQn                 = 29,     /*!< TIMER3 global Interrupt                              */
  117.     TIMER4_IRQn                 = 30,     /*!< TIMER4 global Interrupt                              */
  118.     I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  119.     I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  120.     I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  121.     I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  122.     SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  123.     SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  124.     USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  125.     USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  126.     USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  127.     EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  128.     RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  129.     USBWakeUp_IRQn              = 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */
  130.     TIMER8_BRK_TIMER12_IRQn     = 43,     /*!< TIMER8 Break Interrupt and TIMER12 global Interrupt  */
  131.     TIMER8_UP_TIMER13_IRQn      = 44,     /*!< TIMER8 Update Interrupt and TIMER13 global Interrupt */
  132.     TIMER8_TRG_COM_TIMER14_IRQn = 45,     /*!< TIMER8 Trigger and Commutation Interrupt and TIMER14 global interrupt */
  133.     TIMER8_CC_IRQn              = 46,     /*!< TIMER8 Capture Compare Interrupt                     */
  134.     ADC3_IRQn                   = 47,     /*!< ADC3 global Interrupt                                */
  135.     EXMC_IRQn                   = 48,     /*!< EXMC global Interrupt                                */
  136.     SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                */
  137.     TIMER5_IRQn                 = 50,     /*!< TIMER5 global Interrupt                              */
  138.     SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                */
  139.     UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                               */
  140.     UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                               */
  141.     TIMER6_IRQn                 = 54,     /*!< TIMER6 global Interrupt                              */
  142.     TIMER7_IRQn                 = 55,     /*!< TIMER7 global Interrupt                              */
  143.     DMA2_Channel1_IRQn          = 56,     /*!< DMA2 Channel 1 global Interrupt                      */
  144.     DMA2_Channel2_IRQn          = 57,     /*!< DMA2 Channel 2 global Interrupt                      */
  145.     DMA2_Channel3_IRQn          = 58,     /*!< DMA2 Channel 3 global Interrupt                      */
  146.     DMA2_Channel4_5_IRQn        = 59      /*!< DMA2 Channel 4 and Channel 5 global Interrupt        */
  147. #endif /* GD32F10X_XD */  

  148. #ifdef GD32F10X_CL
  149.     ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  150.     CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupts                                   */
  151.     CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupts                                  */
  152.     CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  153.     CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  154.     EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  155.     TIMER1_BRK_TIMER9_IRQn      = 24,     /*!< TIMER1 Break Interrupt and TIMER9 global Interrupt   */
  156.     TIMER1_UP_TIMER10_IRQn      = 25,     /*!< TIMER1 Update Interrupt and TIMER10 global Interrupt */
  157.     TIMER1_TRG_COM_TIMER11_IRQn = 26,     /*!< TIMER1 Trigger and Commutation Interrupt and TIMER11 global interrupt */
  158.     TIMER1_CC_IRQn              = 27,     /*!< TIMER1 Capture Compare Interrupt                     */
  159.     TIMER2_IRQn                 = 28,     /*!< TIMER2 global Interrupt                              */
  160.     TIMER3_IRQn                 = 29,     /*!< TIMER3 global Interrupt                              */
  161.     TIMER4_IRQn                 = 30,     /*!< TIMER4 global Interrupt                              */
  162.     I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  163.     I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  164.     I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  165.     I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  166.     SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  167.     SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  168.     USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  169.     USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  170.     USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  171.     EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  172.     RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  173.     OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS WakeUp from suspend through EXTI Line Interrupt */
  174.     TIMER8_BRK_TIMER12_IRQn     = 43,     /*!< TIMER8 Break Interrupt and TIMER12 global Interrupt  */
  175.     TIMER8_UP_TIMER13_IRQn      = 44,     /*!< TIMER8 Update Interrupt and TIMER13 global Interrupt */
  176.     TIMER8_TRG_COM_TIMER14_IRQn = 45,     /*!< TIMER8 Trigger and Commutation Interrupt and TIMER14 global interrupt */
  177.     TIMER8_CC_IRQn              = 46,     /*!< TIMER8 Capture Compare Interrupt                     */
  178.     EXMC_IRQn                   = 48,     /*!< EXMC global Interrupt                                */
  179.     TIMER5_IRQn                 = 50,     /*!< TIMER5 global Interrupt                              */
  180.     SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                */
  181.     UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                               */
  182.     UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                               */
  183.     TIMER6_IRQn                 = 54,     /*!< TIMER6 global Interrupt                              */
  184.     TIMER7_IRQn                 = 55,     /*!< TIMER7 global Interrupt                              */
  185.     DMA2_Channel1_IRQn          = 56,     /*!< DMA2 Channel 1 global Interrupt                      */
  186.     DMA2_Channel2_IRQn          = 57,     /*!< DMA2 Channel 2 global Interrupt                      */
  187.     DMA2_Channel3_IRQn          = 58,     /*!< DMA2 Channel 3 global Interrupt                      */
  188.     DMA2_Channel4_IRQn          = 59,     /*!< DMA2 Channel 4 global Interrupt                      */
  189.     DMA2_Channel5_IRQn          = 60,     /*!< DMA2 Channel 5 global Interrupt                      */
  190.     ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                            */
  191.     ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt          */
  192.     CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                    */
  193.     CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                   */
  194.     CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                   */
  195.     CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                   */
  196.     OTG_FS_IRQn                 = 67      /*!< USB OTG FS global Interrupt                          */
  197. #endif /* GD32F10X_CL */     
  198. } IRQn_Type;

 楼主| sunmeat 发表于 2015-7-12 19:56 | 显示全部楼层
TypeState NVIC_IRQEnable;//使能(ENABLE)或关闭(DISABLE)(uint8_t NVIC_IRQ)打开的中断。
 楼主| sunmeat 发表于 2015-7-12 19:58 | 显示全部楼层
uint8_t NVIC_IRQPreemptPriority和uint8_t NVIC_IRQSubPriority; //分别配置的是中断的抢占优先级和响应优先级。   
long009 发表于 2015-7-15 10:54 | 显示全部楼层
一般不设置抢占优先级和响应优先级,这个设置错误的话,会出现不可预知的错误的。
shenmu2012 发表于 2015-7-15 20:07 | 显示全部楼层
NVIC_InitPara 类型的结构体的用法的,就尽量调用库里面的,避免自己重新去定义的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

208

主题

2132

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部