- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 Cortex-M3 异常和中断
7.1 异常
7.2 NVIC 和中断控制
1
7.1.1 异常类型
所有能打断正常执行流的事件都称为异常。CM3支持为数众多的系统异常和外部中断。
编号为1~15的对应系统异常;编号为16~255的对应外部中断
大部分的异常可编程优先级,其中很少的一些有固定的优先级。
当前运行的异常值,是由特殊寄存器IPSR或NVIC的中断控制状态寄存器表示的。
2
7.1 异常
编号
类型
优先级
描述
1
复位
-3 (最高)
复位
2
NMI
2
不可屏蔽中断(外部NMI 输入)
3
硬异常
-1
所有被除能的fault,都将“上访”(escalation)成硬fault。只要FAULTMASK没有置位,硬fault服务例程就被强制执行。Fault被除能的原因包括被禁用,或者PRIMASK/BASEPRI被掩蔽。若FAULTMASK也置位,则硬fault也被除能,此时彻底“关中”
4
MemManage fault
可编程
存储器管理fault,MPU访问违例以及访问非法位置均可引发。企图在“非执行区”取指也会引发此fault
5
总线fault
可编程
从总线系统收到了错误响应,原因可以是预取流产(Abort)或数据流产,企图访问协处理器也会引发此fault
6
用法(usage) fault
可编程
由于程序错误导致的异常。通常是使用了一条无效指令,或者是非法的状态转换,例如尝试切换到ARM状态
3
编号
类型
优先级
描述
7-10
保留
N/A
—
11
SVCall
可编程
执行系统服务调用指令(SVC)引发的异常
12
调试监视器
可编程
调试监视器(断点,数据观察点,或者是外部调试请求)
13
保留
N/A
—
14
PendSV
可编程
为系统设备而设的“可悬挂请求”
15
SysTick
可编程
系统滴答定时器
16
IRQ#0
可编程
外中断#0
17
IRQ#1
可编程
外中断#1
…
…
…
…
255
IRQ#239
可编程
外中断#239
4
续
7.1.2 优先级定义
在CM3中,优先级决定一个异常是否能被掩蔽,以及在未掩蔽的情况下何时可以响应。
优先级的数值越小,则优先级越高。
CM3支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。
3个系统异常:复位,NMI以及硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。
所有其它异常的优先级则都是可编程的。
CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精简设计,裁掉表达优先级的几个低端有效位,以减少优先级的级数,如8级,16级,32级等。
5
3 比特优先级
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
用于表达优先级
不使用, 读出值为0
4比特优先级
优先级寄存器的最小宽度值为3比特。
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
用于表达优先级
不使用, 读出值为0
6
3位或4位宽度的可用优先级
7
通过让优先级以MSB对齐,可以简化程序的跨器件移植。
分别使用3-bit, 5-bit, 和8-bit 优先级寄存器的使用情况:
优先级
异常类型
3比特表达
5比特表达
8比特表达
-3 (Highest)
复位
-3
-3
-3
-2
NMI
-2
-2
-2
-1
硬件错误
-1
-1
-1
0
1
…
0xFF
具有优先级并且可编程的异常
0x00
0x20
…
0xE0
0x00
0x08
…
0xF8
0x00, 0x01
0x02, 0x03
…
0xFE, 0xFF
8
抢占优先级和亚优先级
通过NVIC中“应用程序中断及复位控制寄存器”的位段“PRIGROUP优先级组”设置。该位段的值对每一个优先级可配置的异常都有影响,把其优先级分为2个位段:MSB所在的位段(左边的)对应抢占优先级,而LSB所在的位段(右边的)对应亚优先级。
抢占优先位段和亚优先级位段在优先级寄存器中的定义
优先组
抢占优先级位段
亚优先级位段
0
Bit [7:1]
Bit [0]
1
Bit [7:2]
Bit [1:0]
2
Bit [7:3]
Bit [2:0]
3
Bit [7:4]
Bit [3:0]
4
Bit [7:5]
Bit [4:0]
5
Bit [7:6]
Bit [5:0]
6
Bit [7]
Bit [6:0]
7
None
Bit [7:0]
9
应用程序中断和复位控制寄存器(地址0xE000ED0C)
Bits
名称
类型
复位值
描述
文档评论(0)