- 1、本文档共53页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04-第四章Cortex-M3的异常处理.
第四章 Cortex-M3 的异常处理 Cortex-M3的一些特性(一) 处理器状态的自动保存和恢复; 中断向量表读取与处理器状态保存并行处理; 支持尾链技术,当处理背靠背的中断时,不需在两个中断服务子程序之间进行入栈和出栈操作; 可动态重设中断优先级; NVIC 和 Cortex-M3 处理器核紧密耦合,可尽早处理中断,尤其是晚到的高优先级中断; Cortex-M3的一些特性(二) 中断的数目可以配置,从 1 到 240; 为 Handler 和 Thread 模式分别提供独立的栈和访问特权等级; ISR 调用采用 C/C++标准ARM 体系结构过程调用标准(AAPCS); 可屏蔽优先级以支持临界区。 这些特性提高了处理异常的效率并降低了时间的延迟。 4.1 异常的类型 4.2 异常的优先级 4.3 异常处理 4.4 复位过程 4.5 多堆栈的设置 4.6 Abort 模式 4.1 异常的类型 Cortex-M3 处理器将复位、不可屏蔽中断、外部中断、故障都统一为异常。 故障(fault)是指令执行时由于错误的条件所导致的异常。同步故障是指当指令产生错误时就同时报告错误。异步故障则是指当指令产生错误时无法保证同时报告错误。 4.2 异常的优先级 NVIC 支持通过软件设置优先级。通过写中断优先级寄存器的 PRI_N 字段可以设置优先级,范围为 0~255。 通过软件设置的优先级权限高于硬件优先级。但通过软件设置的优先级对复位、不可屏蔽中断和硬故障没有影响。 当多个中断具有相同的优先级时,拥有最小中断号的挂起中断优先执行。 优先级分组 NVIC 支持优先级分组。通过设定应用中断和复位控制寄存器中的 PRIGROUP 字段,可以将PRI_N 字段分成两部分:抢占优先级和次要优先级。 抢占优先级可认为是优先级分组,当多个挂起的异常具有相同的抢占优先级时,次要优先级就起作用。 当两个挂起的异常具有完全相同的优先级时,硬件位置编号低的异常优先被激活。 优先级分组 异常处理中与优先级相关的操作 异常激活等级 当没有异常发生时,处理器处在 Thread 模式。 当进入中断处理(ISR)或故障处理激活时,处理器将进入 Handler 模式。 不同类型异常处理所对应的处理器工作模式、访问级别以及栈的使用是有所不同的,也就是激活等级不同。 不同激活等级下的特权和栈 异常转换 异常子类转换 4.3 异常处理 当处理器处理异常 发生时,会将PC、 处理器状态寄存器、 r0-r3、r12,LR 等 8 个寄存器的信息 依次保存到堆栈 指针SP 所指之处。 4.3 异常处理 如果 NVIC 配置控制寄存器的 STKALIGN 位已经被设置,则在压栈之前会插入一个额外的字。 从 ISR 返回后,处理器将自动从栈中弹出 8 个寄存器。 中断返回是通过 LR 寄存器传递数据,故ISR 可以是通常的 c/c++函数,而且不需要修饰符。 处理器进入 ISR 前执行的操作步骤 在处理器不同情况下进入异常处理ISR 的过程 中断进入及处理流程图 抢占处理流程 4.3.2 异常处理的退出 当从异常中返回时,处理器可能: 尾链到一个已挂起的异常:该异常比栈中所有异常的优先级都高; 返回到最近一个已压栈的 ISR:没有挂起的异常,或是栈中最高优先级的异常比挂起的最高优先级异常具有更高的优先级; 返回到 Thread 模式:没有异常已经挂起或位于栈中。 异常退出操作 异常返回 在 ISR 中可用以下指令将值 0xFFFFFFFX 加载到 PC,以发生异常返回: ? POP/LDM,载入 PC; ? LDR,PC 作为目的地址; ? BX,使用任何寄存器进行跳转。 当采用这种方法返回时,写入到 PC 的值被截取,并且作为 EXC_RETURN 的值。 异常返回行为 异常返回 在 Thread 模式下,如果通过其他任何指令或者从向量表将EXC_RETURN 的值载入 PC,则就将该值看成是地址,而非一个特殊的值。 该地址区间被定义为不可执行区间,并导致一个内存管理故障。 中断返回流程图 4.4 复位过程 4.4.1 向量表 异常处理程序的入口地址组成向量表,每个入口地址占用4个字节,向量表位于零地址处; 在向量表的0处必须放置main栈的栈顶地址,也就是MSP的初值; 复位、NMI和硬fault的优先级是固定的。 4.4.1 向量表 在向量表的位置0处,必须包含以下4个值: main 栈顶地址 MSP; 复位程序的入口地址; 非屏蔽中断(NMI)ISR 的入口地址; 硬故障 ISR 的入口地址。 一个完整向量表的例子: 一个完整向量表的例子: 4.4.2 启动过程 正常情况,系统复位之后按下页表所示步骤启动 一个 C/C+
文档评论(0)