好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第7章-cortex-m3-异常和中断.pptx

52页
  • 卖家[上传人]:小**
  • 文档编号:44862230
  • 上传时间:2018-06-14
  • 文档格式:PPTX
  • 文档大小:910.23KB
  • / 52 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 嵌入式系统原理与实验 第7章 Cortex-M3 异常和中断7.1 异常 7.2 NVIC 和中断控制1嵌入式系统原理与实验 7.1.1 异常类型Ø 所有能打断正常执行流的事件都称为异常CM3支持为 数众多的系统异常和外部中断Ø 编号为1~15的对应系统异常;编号为16~255的对应外 部中断 Ø 大部分的异常可编程优先级,其中很少的一些有固定的优 先级 Ø 当前运行的异常值,是由特殊寄存器IPSR或NVIC的中断 控制状态寄存器表示的27.1 异常嵌入式系统原理与实验 编号类型优先级描述1复位-3 (最高)复位2NMI-2 不可屏蔽中断(外部NMI 输入)3硬异常-1所有被除能的fault,都将“上访 ”(escalation)成硬fault只要FAULTMASK 没有置位,硬fault服务例程就被强制执行 Fault被除能的原因包括被禁用,或者 PRIMASK/BASEPRI被掩蔽若 FAULTMASK也置位,则硬fault也被除能, 此时彻底“关中” 4MemManage fault 可编程存储器管理fault,MPU访问违例以及访问非 法位置均可引发企图在“非执行区”取指也 会引发此fault 5总线fault 可编程从总线系统收到了错误响应,原因可以是预取 流产(Abort)或数据流产,企图访问协处理 器也会引发此fault 6用法(usage) fault可编程由于程序错误导致的异常。

      通常是使用了一条 无效指令,或者是非法的状态转换,例如尝试 切换到ARM状态 3嵌入式系统原理与实验 编号类型优先级描述7-10保留N/A—11SVCall可编程执行系统服务调用指令(SVC)引发的异常 12调试监视器可编程调试监视器(断点,数据观察点,或者是外部 调试请求) 13保留N/A—14PendSV 可编程为系统设备而设的“可悬挂请求”15SysTick 可编程系统滴答定时器16IRQ#0可编程外中断#0 17IRQ#1可编程外中断#1…………255IRQ#239可编程外中断#2394续嵌入式系统原理与实验 7.1.2 优先级定义Ø 在CM3中,优先级决定一个异常是否能被掩蔽,以及在 未掩蔽的情况下何时可以响应 Ø 优先级的数值越小,则优先级越高 Ø CM3支持中断嵌套,使得高优先级异常会抢占(preempt) 低优先级异常 Ø 3个系统异常:复位,NMI以及硬fault,它们有固定的优 先级,并且它们的优先级号是负数,从而高于所有其它异 常 Ø 所有其它异常的优先级则都是可编程的 Ø CM3支持3个固定的高优先级和多达256级的可编程优先 级,并且支持128级抢占但是,绝大多数CM3芯片都会 精简设计,裁掉表达优先级的几个低端有效位,以减少优 先级的级数,如8级,16级,32级等。

      5嵌入式系统原理与实验 3 比特优先级Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表达优先级不使用, 读出值为04比特优先级优先级寄存器的最小宽度值为3比特Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0用于表达优先级不使用, 读出值为06嵌入式系统原理与实验 3位或4位宽度 的可用优先级7通过让优先级以 MSB对齐,可以 简化程序的跨器 件移植嵌入式系统原理与实验 分别使用3-bit, 5-bit, 和8-bit 优先级寄存器的使用情况:优先级异常类型3比特表达5比特表达8比特表达-3 (Highest)复位-3-3-3-2NMI-2-2-2-1硬件错误-1-1-101…0xFF具有优先 级并且可 编程的异 常0x000x20…0xE00x000x08…0xF80x00, 0x010x02, 0x03…0xFE, 0xFF8嵌入式系统原理与实验 抢占优先级和亚优先级通过NVIC中“应用程序中断及复位控制寄存器”的位段“PRIGROUP优 先级组”设置该位段的值对每一个优先级可配置的异常都有影响,把其 优先级分为2个位段:MSB所在的位段(左边的)对应抢占优先级,而 LSB所在的位段(右边的)对应亚优先级。

      抢占优先位段和亚优先级位段在优先级寄存器中的定义优先组抢占优先级位段亚优先级位段0Bit [7:1]Bit [0]1Bit [7:2]Bit [1:0]2Bit [7:3]Bit [2:0]3Bit [7:4]Bit [3:0]4Bit [7:5]Bit [4:0]5Bit [7:6]Bit [5:0]6Bit [7]Bit [6:0]7NoneBit [7:0]9嵌入式系统原理与实验 应用程序中断和复位控制寄存器(地址0xE000ED0C)Bits名称类型复位值描述31:16VECTKEYR/W—存取关键字;为了写入这个寄存器必 须向这个位段写人 0x05FA15ENDIANNESSR—表示数据的排列顺序: 1 表示大端 (BE8) 而0表示小端10:8PRIGROUPR/W0优先组2SYSRESETREQW—请求芯片控制逻辑产生一个复位信号1VECTCLRACTI VEW—清除异常的所有活跃状态信息0VECTRESETW—复位Cortex-M3 处理器 但不会复 位处理器以外的电路10嵌入式系统原理与实验 11Bit 7Bit 6Bit 5Bit 4 ~ Bit 0抢占级亚不使用, 读出值0嵌入式系统原理与实验 12Bit 7Bit 6Bit 5Bit 4 ~ Bit 2Bit 1Bit 0抢占级不使用亚优先级嵌入式系统原理与实验 7.1.3 向量表 Ø 响应异常时,CM3需要定位其服务例程的入口地址。

      这 些入口地址存储在所谓的“(异常)向量表”中 Ø 缺省情况下,CM3认为该表位于零地址处,且各向量占 用4字节上电后的异常向量表地址异常号值(大小为“字”)0x00000000—MSP 初始值0x000000041复位向量(程序计数器初始值)0x000000082NMI 服务例程的入口地址 0x0000000C3硬fault服务例程的入口地址 ……其它异常服务例程的入口地址 13嵌入式系统原理与实验 n通过设置NVIC中的向量表偏移寄存器,可以将向量表重定 位到其它的内存地址n向量表的起始地址:先求出系统中共有多少个向量,再把 这个数字向上“圆整”到2的整次幂,而起始地址必须对 齐到后者的边界上n例:如果一共有32个中断,则共有32+16(系统异常) =48个向量,向上圆整到2的整次幂后值为64,因此向量 表重定位的地址必须能被64*4=256整除,合法的起始地 址为:0x0, 0x100, 0x200等14向量表偏移寄存器(地址0xE000ED08)Bits名类型复位值描述29TBLBASER/W0表基地址在Code (0) 或RAM (1)28:7TBLOFFR/W0来自CODE区或RAM区的表偏移范围嵌入式系统原理与实验 7.1.4 中断输入和挂起行为n当中断输入脚被置为有效(assert)后,该中断就被悬起。

      即使后来 中断源撤消了中断请求,已经被标记成悬起的中断也被记录下来到 了系统中它的优先级最高的时候,就会得到响应 n如果在某个中断得到响应之前,其悬起状态被清除了(例如,在 PRIMASK或FAULTMASK置位的时候软件清除了悬起状态标志), 则中断被取消 中断挂起15中断在得到处理器响应之前被清除悬起状态 嵌入式系统原理与实验 当处理器开始执行一个中断,中断被激活,同时挂起位将被自动清除在处理器进入服务例程后对中断活跃状态的设置 16嵌入式系统原理与实验 如果一个中断源持续保持中断响应型号活跃,在中断服务程序结束时, 中断将被再次挂起在中断结束后,连续中断请求再次挂起17嵌入式系统原理与实验 如果一个中断在处理器执行前有多次脉冲,它将被视为一次中断请求, 而不是多次18嵌入式系统原理与实验 如果在服务例程执行时,中断请求释放了,但是在服务例程返回前又重 新被置为有效,则CM3会记住此动作,重新悬起该中断19嵌入式系统原理与实验 7.1.5 Fault异常 有若干个系统异常专用于fault处理CM3中的Faults可分为以下几 类: n总线faults n存储器管理faults n用法faults n硬faults 20(1)总线错误 当在AHB接口数据传输过程中一个错误响应被接收时,产生总线Fault: 1. 取指令 2. 数据读/写 3. 在中断进程开始的压栈 4. 中断进程结束时的出栈 5. 当处理器开始中断句柄序列时,读一个中断向量地址嵌入式系统原理与实验 欲使能总线fault服务例程,需要在NVIC的“系统Handler控制及状态 寄存器”中置位BUSFAULTENA位。

      发生了总线fault后,可通过NVIC中的“总线fault状态寄存器”(BFSR) 确定产生fault的场合21总线错误状态寄存器(0xE000ED29)位段名称类型复位值描述7BFARVALID—0=1时表示BFAR有效 6:5————4STKERRR/Wc0入栈时发生错误 3UNSTKERRR/Wc0出栈时发生错误 2IMPREISERRR/Wc0不精确的数据访问冲突1PRECISERRR/Wc0精确的数据访问冲突0IBUSERRR/Wc0指令访问冲突嵌入式系统原理与实验 (2) 内存管理错误常见的内存管理错误包括:n 访问了所有MPU regions覆盖范围之外的地址 n 访问了没有存储器与之对应的空地址 n 往只读region写数据 n 用户级下访问了只允许在特权级下访问的地址 22位段名称类型复位值描述7MMARVALID—0=1时表示MMAR有效 6:5————4MSTKERRR/Wc0入栈时发生错误 3MUNSTKERRR/Wc0出栈时发生错误 2————1DACCVIOLR/Wc0数据访问冲突0IACCVIOLR/Wc0取指访问违例 内存管理错误寄存器MFSR(0xE000ED28)嵌入式系统原理与实验 (3) 用法错误可以引起用法错误的有:n执行了协处理器指令。

      Cortex-M3本身并不支持协处理器,但是通过 fault异常机制,可以建立一套“软件模拟”的机制,来执行一段程序 模拟协处理器的功能,从而可以方便地在其它Cortex处理器间移植 n执行了未定义的指令同上一点的道理,亦可以软件模拟未定义指令的 功能 n尝试进入ARM状态因为CM3不支持ARM状态,所以用法fault会在 切换时产生软件可以利用此机制来测试某处理器是否支持ARM状态 n无效的中断返回(LR中包含了无效/错误的值) n使用多重加载/存储指令时,地址没有对齐 n另外,可以让CM3在遇到除数为零的时候,以及遇到未对齐访问的时 候也产生用法fault在NVIC中有两个控制位分别与它们对应通过设 置这两个控制位,就可以激活它们 23嵌入式系统原理与实验 NVIC提供一个用法错误寄存器 (UFSR) 使得用法错误异常程序能够确 定错误的原因用法错误寄存器(0xE000ED2A)24位段名称类型复位值描述9DIVBYZEROR/Wc0表示除法运算时除数为零(只有在 DIV_0_TRP置位时才会发生) 8UNALIGNEDR/Wc0未对齐访问导致的fault 7:4————3NOCPR/Wc0试图执行协处理器相关指令 2INVPCR/Wc0在异常返回时试图非法地加载 EXC_RETURN到PC。

      包括非法的指令 ,非法的上下文以及非法的 EXC_RETURN值The return PC指 向的指令试图设置PC的值1INVSTATER/Wc0试图切入ARM状态 0UNDEFINSTRR/Wc0执行的指令其编码是未定义的解码不能 嵌入式系统原理与实验 (4) 硬Fault可以引起硬件错误的有:n用法错误,总线错误,内存管理错误n获取向量时产生的总线错误硬件错误寄存器(0xE000ED2C)25位段名称类型复位值描述31DEBUGEVTR/Wc0硬fault因调试事件而产生。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.