STM32 抢先优先级和响应优先级的详细介绍的中断配置 (转载)

来源:互联网 发布:刀哥swift3.0源码 编辑:程序博客网 时间:2024/05/16 11:29

对于这 4bit 的中断优先级控制位还必须分成 2 组看:从高位开始,前面是定义抢先式优
先级的位,后面用于定义子优先级(即所谓的响应优先级)。4bit 的分组组合可以有以下几种形式: 
 
编 号   分配情况   
 0:4  无抢先式优先级,16 个子优先级 
 1:3  2 个抢先式优先级,8 个子优先级 
 2:2  4 个抢先式优先级,4 个子优先级 
 3:1  8 个抢先式优先级,2 个子优先级 
 4:0  16 个抢先式优先级,无子优先级 


上电 Reset 后,寄存器 AIRC 中 PRIGROUP[10:8]的值为 0(编号 0) ,因此此时系统使用 16 个抢先优先级,无子优先级。另外由于所有外部中断通道的优先级控制字 PRI_n 也都是 0,所以根据上面的定义可以得出,此时 68 个外部中断通道的抢先优先级都是 0 号,没有子优先级的区分。故此时不会发生任何的中断嵌套行为,谁也不能打断当前正在执行的中断服务。当多个中断出现后,则看它们的中断向量地址:地址越低,中断级别越高,STM32优先响应。 


如果在你的系统中使用了 TIME2(中断通道 28)和 EXTI0(中断通道 6)两个中断,而TIME2 中断必须优先响应,而且当系统在执EXIT0 中断服务时也必须打断(抢先、嵌套),就必须设置 TIME2 的抢先优先级比 EXTI0 的抢先优先级要高(数目小) 。假定 EXTI0 为 2 号抢先优先级,那么 TIME2 就必须设置成 0 或 1 号抢先优先级。这些工作需要在 AIRC 中的PRIGROUP 设置完成,确定了整个系统所具有的优先级个数后,再分别对每个中断通道(设备)进行设置。 
 
具体优先级的确定和嵌套规则。ARM cortex_m3(STM32)规定 a/ 只能高抢先优先级的中断可以打断低抢先优先级的中断服务,构成中断嵌套。 b/ 当 2(n)个相同抢先优先级的中断出现,它们之间不能构成中断嵌套,但 STM32 首先响应子优先级高的中断。 c/ 当 2(n)个相同抢先优先级和相同子优先级的中断出现,STM32 首先响应中断通道所对应的中断向量地址低的那个中断(见 ROM0008,表52) 。 
具体一点: 
0 号抢先优先级的中断,可以打断任何中断抢先优先级为非 0 号的中断;1 号抢先优先级的中断,可以打断任何中断抢先优先级为 2、3、4 号的中断;……;构成中断嵌套。 如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果一起出现(或挂在那里等待),就看它们 2 个谁的子优先级高了,如果子优先级也相同,就看它们的中断向量位置了。 

0 0
原创粉丝点击