- 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章异常剖析
1
第7章 异常
Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。编号为1-15的对应系统异常,大于等于16的(最多可达240个)则全是外部中断。
中断:请求信号来自CM3内核的外面,来自各种片上外设和外扩的外设,对CM3来说是“异步”的;
异常:因CM3 内核的活动产生的——在执行指令或访问存储器时产生,因此对CM3来说是“同步”的。
2
7.1 异常类型
编号 类型 优先级 简介
0
N/A
N/A
没有异常在运行
1
复位
-3(最高)
复位
2
NMI
-2
不可屏蔽中断(来自外部 NMI 输入脚)
3
硬(hard)fault
-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 状态
保留
N/A
N/A
11
SVCall
可编程
执行系统服务调用指令(SVC)引发的异常
12
调试监视器
可编程
调试监视器(断点,数据观察点,或者是外部调试请求)
13
保留
N/A
N/A
14
PendSV
可编程
为系统设备而设的“可悬挂请求”(pendable request)
15
SysTick
可编程
系统滴答定时器(也就是周期性溢出的时基定时器——译注)
3
7.1 异常类型——内部异常
编号
类型
优先级
简介
16
IRQ #0
可编程
外中断#0
17
IRQ #1
可编程
外中断#1
…
…
…
…
255
IRQ #239
可编程
外中断#239
4
7.1 异常类型
外部中断
除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。
如果一个发生的异常不能被即刻响应,就称它被“悬起”(pending)。异常被悬起的原因,可能是系统当前正在执行一个更高优先级异常的服务例程,或者因相关掩蔽位的设置导致该异常被除能。对于每个异常源,在被悬起的情况下,都会有一个对应的“悬起状态寄存器”保存其异常请求,待到该异常能够响应时,执行其服务例程。
5
7.1 异常类型
优先级的数值越小,则优先级越高。CM3支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。
有3个系统异常:复位,NMI以及硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。
所有其它异常的优先级则都是可编程的,但实际上支持的优先级数会更少,如8级,16级,32级等。
6
7.2 优先级的定义
举例1:如果只使用了3个位来表达优先级,则优先级配置寄存器的结构会如图所示,能够使用8个优先级,分别为:0x00(最高),0x20,0x40,0x60,0x80,0xA0,0xC0以及0xE0。
CM3允许的最少使用位数为3个位,亦即至少要支持8级优先级。
7
7.2 优先级的定义
举例2:
使用3个位表达优先级与
使用4个位表达优先级的
对比图
7.2 优先级的定义
8
抢占优先级与子优先级:
为了使抢占机能变得更可控,CM3还把256级优先级按位分成高低两段,分别称为抢占优先级和子优先级。
抢占优先级决定了抢占行为:当系统正在响应某异常L时,如果来了抢占优先级更高的异常H,则H可以抢占L。
子优先级则处理“内务”:当抢占优先级相同的异常有不止一个悬起时,就最先响应子优先级最高的异常。
7.2 优先级的定义
9
举例:如果只使用3个位来表达优先级([7:5]),并且优先级组的值是5(从比特5处分组),则得到4级抢占优先级,且在每个抢占优先级的内部有2个子优先级。
7.2 优先级的定义
10
子优先级至少是1个位,抢占优先级最多是7个位(最多只有128级抢占的现象)。
在计算抢占优先级和子优先级的有效位数时,必须先求出下列值:芯片实际使用了多少位来表达优先级;优先级组是如何划分的。
如果优先级完全相同的多个异常同时悬
文档评论(0)