FreeRTOS学习笔记—CM4内核中断在RTOS中的使用方法

最近要移植FreeRTOS操作系统,这也是个学习的过程,在此以笔记的形式记录下来。本篇文章主要是谈Cortex-M4内核中断的一些概念以及其在FreeRTOS中的使用方法,部分内容摘自《Cortex-M3权威指南(宋岩译)》,在此向作者表示感谢。

1 优先级值和逻辑优先级

首先要解释一下优先级值和逻辑优先级:在Cortex-M内核中,假如有8级优先级,我们说优先级值是0~7,但数值最大的优先级7却代表着最低的逻辑优先级。

接下来需要清楚的是,在Cortex-M4内核中,一个中断的优先级数值越低,逻辑优先级却越高。比如,中断优先级为2的中断可以抢占中断优先级为5的中断,但反过来就不行。换句话说,中断优先级2比中断优先级5的优先级更高。这是Cortex-内核最容易让人犯错之处,因为大多数的非Cortex-M内核微控制器的中断优先级表述是与之相反的。

FreeRTOS中所说的优先级均指逻辑优先级。

2 异常类型与优先级

异常类型
Cortex-M4内核支持众多的系统异常和外部中断。其中,编号1-15对应系统异常(没有编号为0的异常),大于等于16的则全是外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。Cortex-M4内核异常如下。
Cortex-M4内核异常

优先级
在CM4中,优先级对于异常来说很关键的,它会决定一个异常是否能被掩蔽,以及在未掩蔽的情况下何时可以响应。优先级的数值越小,则优先级越高。CM4支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。有3个系统异常:复位,NMI 以及Hard Fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。所有其它异常的优先级则都是可编程的(但不能被编程为负数)。

中断优先级的设定是通过Interrupt Priority-Level Registers (0xE000E400-0xE000E4EF),即NVIC->IP[IRQn]寄存器,该寄存器共有240个。这些寄存器都是8位,原则上,其可支持3个固定的高优先级和多达256级的可编程优先级。但是,绝大多数CM4芯片都会精简设计,以致实际上支持的优先级数会更少,如8级、16 级、32 级等。它们在设计时会裁掉表达优先级的几个低端有效位,以减少优先级的级数,但不管使用多少位来表达优先级,都是以MSB对齐。举例来说,如果只使用了3个位来表达优先级,则NV

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值