STM32有84个中断,包括68个可屏蔽中断和16个内核中断。STMF103系列只有60个可屏蔽中断。
- 寄存器 ISER【2】、ICER【2】、ISPR【2】、ICPR【2】均是1有效,写0无效;
- ISER【2】:Interrupt Set-Enable Registers,中断使能寄存器。
- ICER【2】:Interrupt Clear-Enable Register,中断清除寄存器。
- ISPR【2】:Interrupt Set-Pending Register,中断挂起寄存器。
- ICPR【2】:Interrupt Clear-Pending Register,中断解挂寄存器。
- IABR【2】:Interrupt Active Bit Register,中断活动标志位寄存器。
- IPR【15】;Interrupt Priority Register,中断优先级控制寄存器。有15个32位寄存器组成,每个可屏蔽中断占8位,IPR【0】的【31~24】、【23~16】、【15~8】、【7~0】分别对应中断3~0,以此类推,控制60个中断。而每个中断占用的8位只有高4位被使用,通过高4位分配抢占式优先级和响应优先级。
分配关系如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
中断优先级分组在一个程序中只能设定一次。
2.抢占式优先级和响应优先级
Cortex-M3中有两个优先级——抢占式优先级和响应优先级。有人把响应优先级称作“亚优先级”或“福优先级,每个中断源都要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级中断执行过程中被响应,这就是中断嵌套。当连个中断源的抢占式优先级相同时,这两个中断源没有嵌套关系,需等待前一个中断执行完成后再执行下一个中断。当两个相同抢占式优先级的中断源同时到来时,具有高响应优先级的中断优先执行,执行完毕后再执行另一个中断;如果两个同时到来的两个中断源具有相同的抢占式优先级和响应优先级时,根据在中断排位表中的顺序决定两个中断执行的顺序。