抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断
(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),
抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。
而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,
如果两个中断同时到达, 则先处理响应优先级高的中断,
响应属性由NVIC_IRQChannelSubPriority 参数配置。
在配置优先级的时候,还要注意一个很重要的问题,即中断种类的数量。
NVIC 只可以配置16 种中断向量的优先级,
也就是说,抢占优先级和响应优先级的数量由一个4 位的数字来决定,
把这个4 位数字的位数分配成抢占优先级部分和响应优先级部分。有5 组分配方式:
第0 组: 所有4 位用来配置响应优先级。即16 种中断向量具有都不相同的响应优先级。
第1 组:最高1 位用来配置抢占优先级,低3位用来配置响应优先级。
表示有2 种级别的抢占优先级(0 级,1 级),有8 种响应优先级,即在16 种中断向量之中,
有8 种中断,其抢占优先级都为0 级,而它们的响应优先级分别为0~7,
其余8 种中断向量的抢占优先级则都为1 级,响应优先级别分别为0~7。
第2 组:2 位用来配置抢占优先级,2 位用来配置响应优先级。
即4 种抢占优先级,4 种响应优先级。
第3 组:高3 位用来配置抢占优先级,最低1 位用来配置响应优先级。
即有8 种抢占优先级,2 种响应2 优先级。
第4组:所有4 位用来配置抢占优先级,
即NVIC 配置的16 种中断向量都是只有抢占属性,没有响应属性。