现在的位置: 首页 > 综合 > 正文

COTEX-M3中断和异常

2018年08月24日 ⁄ 综合 ⁄ 共 1158字 ⁄ 字号 评论关闭

中断和异常

ARMv7‐M 开创了一个全新的异常模型,CM3 采用了它。请你一定要划清界线:这种异常模型跟传统ARM 处理器使用的完全是两码事。新的异常模型“使能”了非常高效的异常处理。它支持16‐4‐1=11 种系统异常(保留了4+1 个档位),外加240 个外部中断输入。在CM3 中取消了FIQ 的概念(v7 前的ARM 都有这个FIQ,快中断请求),这是因为有了更新更好的机制——中断优先级管理以及嵌套中断支持,它们被纳入CM3
的中断管理逻辑中。因此,支持嵌套中断的系统就更容易实现FIQ。

CM3
的所有中断机制都由NVIC 实现
。除了支持240 条中断之外,NVIC 还支持16‐4‐1=11 个内部异常源,可以实现fault 管理机制。结果,CM3 就有了256 个预定义的异常类型,如表2.2 所示。

虽然CM3 是支持240 个外中断的,但具体使用了多少个是由芯片生产商决定。CM3 还有一个NMI(不可屏蔽中断)输入脚。当它被置为有效(assert)时,NMI 服务例程会无条件地执行。

 

Cortex‐M3 支持大量异常,包括16‐4‐1=11 个系统异常,和最多240 个外部中断——简

称IRQ。具体使用了这240 个中断源中的多少个,则由芯片制造商决定。由外设产生的中断

信号,除了SysTick 的之外,全都连接到NVIC 的中断输入信号线。典型情况下,处理器一般

支持16 到32 个中断,当然也有在此之外的。

作为中断功能的强化,NVIC 还有一条NMI 输入信号线。NMI 究竟被拿去做什么,还要

视处理器的设计而定。在多数情况下,NMI 会被连接到一个看门狗定时器,有时也会是电压监视功能块,以便在电压掉至危险级别后警告处理器。NMI 可以在任何时间被激活,甚至是在处理器刚刚复位之后。

表3.4 (同表2.2)列出了Cortex‐M3 可以支持的所有异常。有一定数量的系统异常是用于fault 处理的,它们可以由多种错误条件引发。NVIC 还提供了一些fault 状态寄存器,以便于fault 服务例程找出导致异常的具体原因。

 

向量表s

当一个发生的异常被CM3 内核接受,对应的异常handler 就会执行。为了决定handler 的入

口地址,CM3 使用了“向量表查表机制”。这里使用一张向量表。向量表其实是一个WORD

(32 位整数)数组,每个下标对应一种异常,该下标元素的值则是该异常handler 的入口地

址。向量表的存储位置是可以设置的,通过NVIC 中的一个重定位寄存器来指出向量表的地

址。在复位后,该寄存器的值为0。因此,在地址0 处必须包含一张向量表,用于初始时的

异常分配。

举个例子,如果发生了异常11(SVC),则NVIC 会计算出偏移移量是11x4=0x2C,然后

从那里取出服务例程的入口地址并跳入。0 号异常的功能则是个另类,它并不是什么入口地

址,而是给出了复位后MSP 的初值。

抱歉!评论已关闭.