第7章-Cortex-M3-异常和中断.pptxVIP

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章-Cortex-M3-异常和中断

第7章 Cortex-M3 异常和中断 7.1 异常 7.2 NVIC 和中断控制 ;7.1.1 异常类型 所有能打断正常执行流的事件都称为异常。CM3支持为数众多的系统异常和外部中断。 编号为1~15的对应系统异常;编号为16~255的对应外部中断 大部分的异常可编程优先级,其中很少的一些有固定的优先级。 当前运行的异常值,是由特殊寄存器IPSR??或NVIC的中断控制状态寄存器表示的。 ;编号;编号;7.1.2 优先级定义 在CM3中,优先级决定一个异常是否能被掩蔽,以及在未掩蔽的情况下何时可以响应。 优先级的数值越小,则优先级越高。 CM3支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。 3个系统异常:复位,NMI以及硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。 所有其它异常的优先级则都是可编程的。 CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精简设计,裁掉表达优先级的几个低端有效位,以减少优先级的级数,如8级,16级,32级等。;3 比特优先级;3位或4位宽度的可用优先级;分别使用3-bit, 5-bit, 和8-bit 优先级寄存器的使用情况:;抢占优先级和亚优先级 通过NVIC中“应用程序中断及复位控制寄存器”的位段“PRIGROUP优先级组”设置。该位段的值对每一个优先级可配置的异常都有影响,把其优先级分为2个位段:MSB所在的位段(左边的)对应抢占优先级,而LSB所在的位段(右边的)对应亚优先级。;应用程序中断和复位控制寄存器(地址0xE000ED0C);11;12;7.1.3 向量表 响应异常时,CM3需要定位其服务例程的入口地址。这些入口地址存储在所谓的“(异常)向量表”中。 缺省情况下,CM3认为该表位于零地址处,且各向量占用4字节。;通过设置NVIC中的向量表偏移寄存器,可以将向量表重定位到其它的内存地址。 向量表的起始地址:先求出系统中共有多少个向量,再把这个数字向上“圆整”到2的整次幂,而起始地址必须对齐到后者的边界上。 例:如果一共有32个中断,则共有32+16(系统异常)=48个向量,向上圆整到2的整次幂后值为64,因此向量表重定位的地址必须能被64*4=256整除,合法的起始地址为:0x0, 0x100, 0x200等。;7.1.4 中断输入和挂起行为 当中断输入脚被置为有效(assert)后,该中断就被悬起。即使后来中断源撤消了中断请求,已经被标记成悬起的中断也被记录下来。到了系统中它的优先级最高的时候,就会得到响应。 如果在某个中断得到响应之前,其悬起状态被清除了(例如,在PRIMASK或FAULTMASK置位的时候软件清除了悬起状态标志),则中断被取消。 ;当处理器开始执行一个中断,中断被激活,同时挂起位将被自动清除。;如果一个中断源持续保持中断响应型号活跃,在中断服务程序结束时,中断将被再次挂起。;如果一个中断在处理器执行前有多次脉冲,它将被视为一次中断请求,而不是多次。;如果在服务例程执行时,中断请求释放了,但是在服务例程返回前又重新被置为有效,则CM3会记住此动作,重新悬起该中断。;7.1.5 Fault异常 有若干个系统异常专用于fault处理。CM3中的Faults可分为以下几类: 总线faults 存储器管理faults 用法faults 硬faults ;欲使能总线fault服务例程,需要在NVIC的“系统Handler控制及状态寄存器”中置位BUSFAULTENA位。 发生了总线fault后,可通过NVIC中的“总线fault状态寄存器”(BFSR)确定产生fault的场合。;(2) 内存管理错误 常见的内存管理错误包括: ? 访问了所有MPU regions覆盖范围之外的地址 ? 访问了没有存储器与之对应的空地址 ? 往只读region写数据 ? 用户级下访问了只允许在特权级下访问的地址 ;(3) 用法错误 可以引起用法错误的有: 执行了协处理器指令。Cortex-M3本身并不支持协处理器,但是通过fault异常机制,可以建立一套“软件模拟”的机制,来执行一段程序模拟协处理器的功能,从而可以方便地在其它Cortex处理器间移植。 执行了未定义的指令。同上一点的道理,亦可以软件模拟未定义指令的功能。 尝试进入ARM状态。因为CM3不支持ARM状态,所以用法fault会在切换时产生。软件可以利用此机制来测试某处理器是否支持ARM状态。 无效的中断返回(LR中包含了无效/错误的值) 使用多重加载/存储指令时,地址没有对齐。 另外,可以让CM3在遇到除数为零的时候,以及遇到未对齐访问的时候也产生用法fault。在NVIC中

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档