第7章 异常.pptx

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 异常7.1 异常类型Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。编号为1-15的对应系统异常,大于等于16的(最多可达240个)则全是外部中断。中断:请求信号来自CM3内核的外面,来自各种片上外设和外扩的外设,对CM3来说是“异步”的;异常:因CM3 内核的活动产生的——在执行指令或访问存储器时产生,因此对CM3来说是“同步”的。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 可编程 系统滴答定时器(也就是周期性溢出的时基定时器——译注) 7.1 异常类型外部中断编号 类型 优先级 简介 16 IRQ #0 可编程 外中断#0 17 IRQ #1 可编程 外中断#1 … … … … 255 IRQ #239 可编程 外中断#239 7.1 异常类型除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。如果一个发生的异常不能被即刻响应,就称它被“悬起”(pending)。异常被悬起的原因,可能是系统当前正在执行一个更高优先级异常的服务例程,或者因相关掩蔽位的设置导致该异常被除能。对于每个异常源,在被悬起的情况下,都会有一个对应的“悬起状态寄存器”保存其异常请求,待到该异常能够响应时,执行其服务例程。7.2 优先级的定义优先级的数值越小,则优先级越高。CM3支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。有3个系统异常:复位,NMI以及硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。所有其它异常的优先级则都是可编程的,但实际上支持的优先级数会更少,如8级,16级,32级等。7.2 优先级的定义 举例1:如果只使用了3个位来表达优先级,则优先级配置寄存器的结构会如图所示,能够使用8个优先级,分别为:0x00(最高),0x20,0x40,0x60,0x80,0xA0,0xC0以及0xE0。CM3允许的最少使用位数为3个位,亦即至少要支持8级优先级。举例2:使用3个位表达优先级与使用4个位表达优先级的对比图7.2 优先级的定义抢占优先级与子优先级:为了使抢占机能变得更可控,CM3还把256级优先级按位分成高低两段,分别称为抢占优先级和子优先级。抢占优先级决定了抢占行为:当系统正在响应某异常L时,如果来了抢占优先级更高的异常H,则H可以抢占L。子优先级则处理“内务”:当抢占优先级相同的异常有不止一个悬起时,就最先响应子优先级最高的异常。 7.2 优先级的定义举例:如果只使用3个位来表达优先级([7:5]),并且优先级组的值是5(从比特5处分组),则得到4级抢占优先级,且在每个抢占优先级的内部有2个子优先级。7.2 优先级的定义7.2 优先级的定义子优先级至少是1个位,抢占优先级最多是7个位(最多只有128级抢占的现象)。在计算抢占优先级和子优先级的有效位数时,必须先求出下列值:芯片实际使用了多少位来表达优先级;优先级组是如何划分的。如果优先级完全相同的多个异常同时悬起,则先响应异常编号最小的那一个。7.3 向量表 当发生了异常并且要响应它时,CM3需要定位其服务例程的入口地址。这些入口地址存储在所谓的“(异常)向量表”中。缺省情况下,CM3认为该表位于零地址处,且各向量占用4字节。地址 异常编号 值(32位

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档