Cortex M内核中
每个中断都有一个8位的优先级设置寄存器
这个8位的寄存器可以分为抢占优先级和子优先级两个部分(通过设置优先级组设置)
抢占优先级和子优先级有什么用?
举例说明:
有两个中断A、B
A的抢占优先级比B的高
当B发生中断,正在执行B的中断服务函数时
A发生了中断,这个时候,会跳转到A的中断服务函数
A的中断服务函数执行完毕后,再接着执行B的中断服务函数
这就是中断抢占
子优先级的作用是当两个中断的抢占优先级相同时,这两个中断同时发生(或者都被挂起的状态下)
子优先级高的先执行,低的暂时挂起,等子优先级高的执行完后再执行
由于抢占优先级一样,不会发生中断抢占
虽然这个是8位的寄存器,但是一般的单片机都不会使用全部8位
规定最少使用高3位(具体可以参考《Cortex-M4权威指南》)
LPC54606的优先级就只用了高3位(程序注释可能没有改)
而K60、K66、KV58、RT1052都是用了高4位
只用高3位的情况下
设置中断优先级组 0: 0个抢占优先级 8个子优先级
1: 2个抢占优先级 4个子优先级
2: 4个抢占优先级 2个子优先级
3: 8个抢占优先级 0个子优先级
只用高4位的情况下 0: 0个抢占优先级 16个子优先级
1: 2个抢占优先级 8个子优先级
2: 4个抢占优先级 4个子优先级
3: 8个抢占优先级 2个子优先级
4: 16个抢占优先级 0个子优先级
因为用的是高位 所以设置优先级分组时,需要用 优先级分组 = 0x07 - 序号