ARM Cortex-M3 异常优先级以及CMSIS RTOS RTX的中断优先级

通常异常包括一些系统异常,以及中断。

异常类型

Cortex-M3处理器支持多种类型的异常:

  1. RESET, NMI, HardWare Fault;
  2. PSV,SVC等可编程中断;
  3. 其他的可编程中断,例如timer,GPIO等。

其中第1类异常的优先级是固定,不可改变的。其他都是可以修改的。

Cortex-M3处理器提供了PRIMASK选项,用来屏蔽所有可编程的中断;提供了FAULTMASK来屏蔽HardWare Fault和所有可屏蔽中断。

异常优先级

Cortex-M3处理器支持NVIC的中断处理,也就是说中断嵌套处理。中断的优先级由1个8bit寄存器确定,但ARM芯片厂商在实现的时候通常实现了其中的几个bit而已。ARM要求最少实现3个bit。从寄存器的bit 7开始从高往低。

而这几个bit还会分为抢占优先级,普通优先级。见下图:

抢占优先级,是指如果两个中断的普通优先级一样,在抢占优先级低的中断A执行时,如果抢占优先级高的中断B发生了,那么就会中断B就会抢占中断A,处理器开始执行中断B的ISR。

普通优先级,是指如果两个中断的抢占优先级一样,那么中断之间是不会发生抢占的,也就是一个中断不会打断另外一个中断的处理。但是如果两个中断同时发生了,普通优先级高的,先处理。

数字越小,优先级越高。

如果两个中断抢占优先级,普通优先级全部一样,那么中断号小的中断,会先处理,但还是不会发生抢占。

异常向量

根据cortex-M3的技术文档描述,异常向量"vector tables"是放在从地址0x4开始的地方,地址0x0处放的是MSP的初始值。

如下所示,异常向量对应的地址处直接放置的异常处理函数地址,而不是跳转指令。

CMSIS RTOS RTX的中断优先级

由于ARM公司后来搞了CMSIS,也就是在CMSIS层增加了对RTOS的支持。所以很多种RTOS都可以依靠CMSIS RTOS API来实现。

而ARM也把Keil RTX操作系统,也改装成支持CMSIS了,就叫CMSIS RTOS RTX了。

在RTX里面,systick timer/SVC/PSV的中断优先级都是0xFF(具体对应到硬件,要看芯片厂商实现了8bit优先级的几个bit),所以其实他们的优先级都是一样的,并且相互不抢占。

用户可以配置其他可编程优先级,不要求是

posted @ 2016-07-23 23:34  ironX  阅读(2892)  评论(0编辑  收藏  举报