第7章 Cortex-M3 异常和中断
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-2
-1 0x00, 0x01 0x02, 0x03
…
0xFF
…
0xE0
…
0xF8
…
0xFE, 0xFF
嵌入式系统原理与实验
抢占优先级和亚优先级 通过NVIC中“应用程序中断及复位控制寄存器”的位段“PRIGROUP优 先级组”设臵。该位段的值对每一个优先级可配臵的异常都有影响,把其 优先级分为2个位段:MSB所在的位段(左边的)对应抢占优先级,而 LSB所在的位段(右边的)对应亚优先级。
17
Processor Mode
在中断结束后,连续中断请求再次挂起
嵌入式系统原理与实验
如果一个中断在处理器执行前有多次脉冲,它将被视为一次中断请求, 而不是多次。
Multiple Interrupt pulses entering before ISR Interrupt Request Interrupt Pending Status Interrupt Active Status
16
Processor Mode
在处理器进入服务例程后对中断活跃状态的设臵
嵌入式系统原理与实验
如果一个中断源持续保持中断响应型号活跃,在中断服务程序结束时, 中断将被再次挂起。
Interrupt request stays active Interrupt Request Interrupt Pending Status Interrupt Active Status Interrupt returned Handler Mode Thread Mode Interrupt reentered
(1)总线错误
当在AHB接口数据传输过程中一个错误响应被接收时,产生总线Fault: 1. 取指令 2. 数据读/写 3. 在中断进程开始的压栈 4. 中断进程结束时的出栈 5. 当处理器开始中断句柄序列时,读一个中断向量地址
嵌入式系统原理与实验
欲使能总线fault服务例程,需要在NVIC的“系统Handler控制及状态 寄存器”中臵位BUSFAULTENA位。 发生了总线fault后,可通过NVIC中的“总线fault状态寄存器”(BFSR) 确定产生fault的场合。 总线错误状态寄存器(0xE000ED29)
13
14
保留
PendSV
N/A
可编程
—
为系统设备而设的“可悬挂请求”
15
16 17 … 255
SysTick
IRQ#0 IRQ#1 … IRQ#239
可编程
可编程 可编程 … 可编程
系统滴答定时器
外中断#0 外中断#1 … 外中断#239
嵌入式系统原理与实验
5
7.1.2 优先级定义
在CM3中,优先级决定一个异常是否能被掩蔽,以及在 未掩蔽的情况下何时可以响应。 优先级的数值越小,则优先级越高。 CM3支持中断嵌套,使得高优先级异常会抢占(preempt) 低优先级异常。 3个系统异常:复位,NMI以及硬fault,它们有固定的优 先级,并且它们的优先级号是负数,从而高于所有其它异 常。 所有其它异常的优先级则都是可编程的。 CM3支持3个固定的高优先级和多达256级的可编程优先 级,并且支持128级抢占。但是,绝大多数CM3芯片都会 精简设计,裁掉表达优先级的几个低端有效位,以减少优 先级的级数,如8级,16级,32级等。
上电后的异常向量表
地址 0x00000000 0x00000004 0x00000008 0x0000000C … 异常号 — 1 2 3 … 值(大小为“字”) MSP 初始值 复位向量(程序计数器初始值) NMI 服务例程的入口地址 硬fault服务例程的入口地址 其它异常服务例程的入口地址
嵌入式系统原理与实验
Bit 7 Bit 6 抢占级 Bit 5 Bit 4 ~ Bit 2 不使用 Bit 1 Bit 0
12
亚优先级
嵌入式系统原理与实验
13
7.1.3 向量表
响应异常时,CM3需要定位其服务例程的入口地址。这 些入口地址存储在所谓的“(异常)向量表”中。 缺省情况下,CM3认为该表位于零地址处,且各向量占 用4字节。
14
通过设臵NVIC中的向量表偏移寄存器,可以将向量表重定 位到其它的内存地址。 向量表的起始地址:先求出系统中共有多少个向量,再把 这个数字向上“圆整”到2的整次幂,而起始地址必须对 齐到后者的边界上。 例:如果一共有32个中断,则共有32+16(系统异常) =48个向量,向上圆整到2的整次幂后值为64,因此向量 表重定位的地址必须能被64*4=256整除,合法的起始地 址为:0x0, 0x100, 0x200等。
10
31:16 VECTKEY 15 10:8 2 1 0 ENDIANNESS PRIGROUP SYSRESETREQ VECTCLRACTI VE VECTRESET
嵌入式系统原理与实验
Bit 7 Bit 6 Bit 5 亚 Bit 4 ~ Bit 0 不使用, 读出值0
11
抢占级
嵌入式系统原理与实验
位段 7 6:5 名称 BFARVALID — 类型 — — 复位值 0 — 描述 =1时表示BFAR有效 —
嵌入式系统原理与实验
编号 1 2 3 类型 复位 NMI 硬异常 优先级 -3 (最高) 描述 复位 不可屏蔽中断(外部NMI 输入) 所有被除能的fault,都将“上访”(escalation) 成硬fault。只要FAULTMASK没有臵位,硬 fault服务例程就被强制执行。Fault被除能的 原因包括被禁用,或者PRIMASK/BASEPRI 被掩蔽。若FAULTMASK也臵位,则硬fault 也被除能,此时彻底“关中” 存储器管理fault,MPU访问违例以及访问非 法位臵均可引发。企图在“非执行区”取指也 会引发此fault 从总线系统收到了错误响应,原因可以是预取 流产(Abort)或数据流产,企图访问协处理 器也会引发此fault 由于程序错误导致的异常。通常是使用了一条 无效指令,或者是非法的状态转换,例如尝试 切换到ARM状态
Bit [4:0] Bit [5:0] Bit [6:0]
7
None
Bit [7:0]
嵌入式系统原理与实验
应用程序中断和复位控制寄存器(地址0xE000ED0C)
Bits 名称 类型 R/W R R/W W W W 复位值 — — 0 — — — 描述 存取关键字;为了写入这个寄存器必 须向这个位段写人 0x05FA 表示数据的排列顺序: 1 表示大端 (BE8) 而0表示小端 优先组 请求芯片控制逻辑产生一个复位信号 清除异常的所有活跃状态信息 复位Cortex-M3 处理器。 但不会复 位处理器以外的电路。
3
-2
-1
4
MemManage 可编程 fault 总线fault 可编程
5
6
用法(usage) fault
可编程
嵌入式系统原理与实验
续 编号 类型 优先级 描述
4
7-10
11 12
保留
SVCall 调试监视器
N/A
可编程 可编程
—
执行系统服务调用指令(SVC)引发的异常 调试监视器(断点,数据观察点,或者是外部 调试请求)
19
Interrupt pended again
Processor Mode
Interrupt reentered
嵌入式系统原理与实验
20
7.1.5 Fault异常
有若干个系统异常专用于fault处理。CM3中的Faults可分为以下几 类: 总线faults 存储器管理faults 用法faults 硬faults
18
Handler Mode
Processor Mode
Interrupt Returned
嵌入式系统原理与实验
如果在服务例程执行时,中断请求释放了,但是在服务例程返回前又重 新被臵为有效,则CM3会记住此动作,重新悬起该中断。
Interrupt request pulsed again Interrupt Request Interrupt Pending Status Interrupt Active Status Handler Mode Thread Mode Interrupt returned
嵌入式系统原理与实验
8
分别使用3-bit, 5-bit, 和8-bit 优先级寄存器的使用情况:
优先级 异常类型
-3
3比特表达
-3
5比特表达
-3
8比特表达
-3 复位 (Highest)
-2
-1 0 1
NMI
硬件错误 具有优先 级并且可 编程的异 常
-2
-1 0x00 0x20
wenku.baidu.com-2
-1 0x00 0x08
嵌入式系统原理与实验
6
3 比特优先级
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 用于表达优先级 不使用, 读出值为0
4比特优先级
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
用于表达优先级
不使用, 读出值为0
嵌入式系统原理与实验
1
第7章 Cortex-M3 异常和中断 7.1 异常 7.2 NVIC 和中断控制
嵌入式系统原理与实验
2
7.1 异常
7.1.1 异常类型
所有能打断正常执行流的事件都称为异常。CM3支持为 数众多的系统异常和外部中断。 编号为1~15的对应系统异常;编号为16~255的对应外 部中断 大部分的异常可编程优先级,其中很少的一些有固定的优 先级。 当前运行的异常值,是由特殊寄存器IPSR 或NVIC的中断 控制状态寄存器表示的。
用4个位表 达优先级 -3 -2 -1 0 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xA0 0xB0 0xC0 0xD0 0xE0 0xF0
0x80 0xA0 0xC0 0xE0
通过让优先级以 MSB对齐,可以 简化程序的跨器 件移植。
0xC0 0xE0 0xFF Lowest Priority
抢占优先位段和亚优先级位段在优先级寄存器中的定义
优先组 0 1 2 抢占优先级位段 Bit [7:1] Bit [7:2] Bit [7:3] 亚优先级位段 Bit [0] Bit [1:0] Bit [2:0]
9
3
4 5 6
Bit [7:4]
Bit [7:5] Bit [7:6] Bit [7]
Bit [3:0]
向量表偏移寄存器(地址0xE000ED08)
Bits 29 28:7
名 TBLBASE TBLOFF
类型 R/W R/W
复位值 0 0
描述 表基地址在Code (0) 或RAM (1) 来自CODE区或RAM区的表偏移范围
嵌入式系统原理与实验
15
7.1.4 中断输入和挂起行为
当中断输入脚被臵为有效(assert)后,该中断就被悬起。即使后来 中断源撤消了中断请求,已经被标记成悬起的中断也被记录下来。到 了系统中它的优先级最高的时候,就会得到响应。 如果在某个中断得到响应之前,其悬起状态被清除了(例如,在 PRIMASK或FAULTMASK臵位的时候软件清除了悬起状态标志), 则中断被取消。
Interrupt Request Processor Pending Status
Interrupt Request Processor Pending Status Processor Thread Mode Mode
Handler Mode
Pending Status Cleared by Software Thread Mode
Processor Mode
中断挂起
中断在得到处理器响应之前被清除悬起状态
嵌入式系统原理与实验
当处理器开始执行一个中断,中断被激活,同时挂起位将被自动清除。
Interrupt Request Cleared by Software Interrupt Request Interrupt Pending Status Interrupt Active Status Thread Mode Handler Mode Interrupt Returned
优先级寄存器的最小宽度值为3比特。
嵌入式系统原理与实验
3位或4位宽度 的可用优先级
用3个位表 达优先级 -3 -2 -1 0 0x20 0x40 0x60
Programmable Exceptions
7
Highest Priority Reset -3 NMI -2 Hard Fault -1 0 0x20 0x40 0x60 0x80 0xA0