Cortex-M3中断

1 异常

M3支持15个系统异常,240个外部异常IRQ,其中NMI,复位,hardfault三个异常的优先级固定不可更改且是负数,其余的都可编程。
M3的异常分为抢占优先级和子优先级。

2 关于中断优先级

M3中,除了复位,NMI以及硬fault有固定的优先级,其他优先级都是可编程的。原则上,CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精简设计,以致实际上支持的优先级数会更少,如8级,16级,32级等。它们在设计时会裁掉表达优先级的几个低端有效位。
如使用3个位表示优先级则配置寄存器的结构如图所示:
(https://img-blog.youkuaiyun.com/20150918210348709)
在M3中,优先级分为两个部分,一个是抢占优先级优先级,一个是子优先级。在计算抢占优先级和子优先级的有效位数时,必须要知道
    1、芯片实际使用了多少位来表达优先级
    2、优先级组是如何划分的。
    举个例子,如果只使用3个位来表达优先级([7:5]),并且优先级组的值是5(从比特5处分组),则得到4级抢占优先级,且在每个抢占优先级的内部有2个子优先级,
(https://img-blog.youkuaiyun.com/20150918210522808)
    当然也可设置全部是抢占优先级没有子优先级
(https://img-blog.youkuaiyun.com/20150918210552871)
    在编写应用程序的时候,只需要系统所需要的中断分组和组内优先级即可,直接调用m3提供的API函数即可。
    在CM3中,允许使用3个位到8个位来表达优先级。为了确定具体的位数,可以先往一个优先级寄存器中写0xFF,再读回来,读出多少个1,就表示使用多少个位来表达优先级。

关于中断配置基础
每个外部中断都在NVIC的下列寄存器中“挂号”:

 1. 使能与除能寄存器
 2. 悬起与“解悬”寄存器
 3. 优先级寄存器
 4. 活动状态寄存器
 5. 异常掩蔽寄存器(PRIMASK, FAULTMASK以及BASEPRI)
另外,下列寄存器也对中断处理有重大影响
 1. 向量表偏移量寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值