优先级分组 | 抢占优先级 | 响应优先级 | bit[7:4] 分配情况 | 备注 | NVIC_PriorityGroup_0 | 取值:0 | 取值:0~15 | 0:4 | 0bit抢占优先级、4bit响应优先级 | NVIC_PriorityGroup_1 | 取值:0~1 | 取值:0~7 | 1:3 | 1bit抢占优先级、3bit响应优先级 | NVIC_PriorityGroup_2 | 取值:0~3 | 取值:0~3 | 2:2 | 2bit抢占优先级、2bit响应优先级 | NVIC_PriorityGroup_3 | 取值:0~7 | 取值:0~1 | 3:1 | 3bit抢占优先级、1bit响应优先级 | NVIC_PriorityGroup_4 | 取值:0~15 | 取值:0 | 4: | 4bit抢占优先级、0bit响应优先级 |
注意:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
-
整个系统执行过程中,只设置一次中断分组。(NVIC_PriorityGroupConfig只是对一个寄存器操作。多次操作以最后一次设置为准。) -
针对每个中断,设置对应的抢占优先级和响应优先级。 -
如何不设置中断优先级分组,则中断优先级分组默认为0,即0位抢占优先级,4位响应优先级。
1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。
(注意:优先级数字越小,优先级越高)
2、抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。
(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高)
3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。
(硬件中断编号从中断向量表当中查看)
|