首页 理论教育 STM系列单片机的异常优先级探究

STM系列单片机的异常优先级探究

时间:2023-11-23 理论教育 版权反馈
【摘要】:在Cortex-M3中,优先级对于异常来说是很关键的,它会影响一个异常是否能被响应,以及何时可以响应。原则上,Cortex-M3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数Cortex-M3芯片都会精简设计,以致实际上支持的优先级数会更少,如8级、16级、32级等。Cortex-M3允许的最少使用位数为3个位,即至少要支持8级优先级。图3.293位表达的优先级位与4位表达的优先级位对比通过让优先级以MSB对齐,可以简化程序的跨器件移植。

STM系列单片机的异常优先级探究

在Cortex-M3中,优先级对于异常来说是很关键的,它会影响一个异常是否能被响应,以及何时可以响应。优先级的数值越小,则优先级越高。Cortex-M3支持中断嵌套,使得高优先级异常会抢占低优先级异常。有3个系统异常:复位、NMI以及硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其他异常。所有其他异常的优先级则都是可编程的(但不能编程的为负数)。

原则上,Cortex-M3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数Cortex-M3芯片都会精简设计,以致实际上支持的优先级数会更少,如8级、16级、32级等。它们在设计时会裁掉表达优先级的几个低端有效位,以达到减少优先级数的目的(不管使用多少位,优先级号都是与MSB对齐的)。

举例来说,如果只使用了3个位来表达优先级,则优先级配置寄存器的结构如图3.28所示。

图3.28 使用3个位来表达优先级的情况

在图3.28中,[4:0]没有被实现,所以读它们总是返回零,写它们则忽略写入的值。因此,对于3个位的情况,能够使用的8个优先级为:0x00(最高)、0x20、0x40、0x60、0x80、0xA0、0xC0以及0xE0。

如果使用更多的位来表达优先级,则能够使用的值也更多,同时需要的逻辑门也更多,从而给微控制器带来更多的成本和功耗。Cortex-M3允许的最少使用位数为3个位,即至少要支持8级优先级。图3.29给出3位表达的优先级位和4位表达的优先级位对比。

(www.xing528.com)

图3.29 3位表达的优先级位与4位表达的优先级位对比

通过让优先级以MSB对齐,可以简化程序的跨器件移植。比如,如果一个程序早先在支持4位优先级的器件上运行,则在移植到只支持3位优先级的器件后,其功能不受影响。但若是对齐到LSB,则会使MSB丢失,导致数值大于7的低优先级一下子升高了,甚至会反转小于等于7的高优先级。例如,8号优先级如果损失了MSB,就变成0号优先级了。表3.10展示了使用3位、5位和8位来表达优先级时的情况。

表3.10 3位、5位和8位表达优先级时,优先级寄存器的使用情况

续表

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈