这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 为什么要把中断优先级配置为NVICPriorityGroup4

共1条 1/1 1 跳转至

为什么要把中断优先级配置为NVICPriorityGroup4

院士
2023-05-20 12:03:56     打赏

为什么要把中断优先级配置为NVIC_PriorityGroup_4

STM32系列MCU是基于ARM公司Cortex-M3内核设计开发。ARM Cortex_m3 内核支持 256 个中断(16个内核+240 外部)和可编程 256 级中断优先级的设置,中断控制和中断优先级控制寄存器也都属于Cortex M3 内核的部分。

STM32在例化与设计实现中仅支持84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
STM32支持的68个外部中断通道已经固定的分配给响应的外部通道,如(DMA,TIM等)。

每个中断通道都有自己的中断优先级控制字节PRI_n(8位,STM32中只是用高四位),每4个通道的8位中断优先级控制字PRI_n构成一个32位的优先级寄存器(Priority Register)。68个外部通道可以构成17个32位的优先级寄存器。
对于4bit的中断优先级控制位可以进行对抢占式优先级和响应式优先级(又称子优先级、亚优先级)进行分配,其中抢占式优先级在高位,响应式在低位,可以通过设置AIRCR(Application Interrupt / Reset Control Register)寄存器的[10:8]但来确认抢占式和响应式分别能在4bit的中断优先级控制位中占到几个通过分配可以有以下几种情况:

#define NVIC_PriorityGroup_0          ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1          ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2          ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3          ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4          ((uint32_t)0x300) /*!< 4 bits for pre-emption priority

在新版本的stm32CubeMX软件,配置完成工程后,其自动生成的代码里,均将中断配置参考选择了NVIC_PriorityGroup_4。那么问题来了,为什么会推荐或者默认使用这个参数呢?

STM32 有 5 个分组(STM32 中定义的分组 0 对应的值是 7!)如果我们选择分组 4,即 NVIC_PriorityGroup_4 的话,那 4 位优先级就都全是抢占优先级了,没有亚优先级,那么就有 0~15 共 16 个优先级。这就是关键!全部应用了抢占式优先级。

对于中断优先级的知识分享还有好多!比如,在FreeRTOS中,抢占式优先级怎么使用?带来哪些优势?等静待版主补充吧!

P.S. 当然,论坛里面的小伙伴也欢迎来补充!








关键词: 中断     优先级     FreeRTOS    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]