• 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),所以其实他们的优先级都是一样的,并且相互不抢占。

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

  • 相关阅读:
    POJ 1045
    POJ 1051
    POJ 1047
    POJ 1050
    POJ 1046
    POJ 1036
    POJ 1035
    POJ 1032
    【洛谷P1412】经营与开发
    【洛谷P3377】【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/ironx/p/5293450.html
Copyright © 2020-2023  润新知