Cortex-M3的异常处理.ppt_第1页
Cortex-M3的异常处理.ppt_第2页
Cortex-M3的异常处理.ppt_第3页
Cortex-M3的异常处理.ppt_第4页
Cortex-M3的异常处理.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 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 字段可以设置优先级,范围为 0255。 通过软件设置的优先级权限高于硬件优先级。但通过软件设置的优先级对复位、不可屏蔽中断和硬故障没有影响。 当多个中断具有相同的优先级时,拥有最小中断号的挂起中断优先执行。,优先级分组,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+程序在运行时先完成最初的三步,然后调用 main()。 复位服务子程序用来启动应用程序和允许中断。,系统复位之后的启动步骤,系统复位之后的启动步骤(续),复位服务子程序,在中断处理完成后,有三种方式可调用复位服 务子程序:(通过例子说明) 例 1,纯粹 Sleep-on-exit 的复位服务子程序(复位程序不进行主循环); 例 2,带有通过 WFI(Wait For Interrupt)选择睡眠模式的复位服务子程序; 例 3,选定的 Sleep-on-exit,可被要求的 ISR 唤醒而产生复位子程序。,例 1,纯粹 Sleep-on-exit,例 2,通过 WFI选择睡眠模式,例 3, Sleep-on-exit,可被要求的 ISR 唤醒,4.5 多堆栈的设置,为了实现多堆栈,应用程序须执行下面操作: 用 MSR 指令来设置 Process_SP 寄存器; 如果使用 MPU(Memory Protection Unit),可适当地保护栈; Thread 模式下初始化栈和访问方式。,Thread 模式下的栈,如果 Thread 模式下的访问方式由特权方式变成用户方式,仅可通过其他的 ISR,例如 SVCall,才能使之从用户方式返回到特权方式。 在 Thread 模式下所用的栈可在 Main 栈和 Process 栈之间切换,但是这样做会影响对线程局部变量的访问。因此,在 Thread 模式下最好是通过一个 ISR 来改变所使用的栈。,栈的切换过程(一):,(1) 调用设置程序,完成: a. 用 MSR 指令设置其他栈; b. 如果有 MPU,则使能 MPU 以支持基区; c. 调用启动程序; d. 从设置程序中返回; (2) 将Thread 模式的访问方式改为无特权方式(用户方式);,栈的切换过程(二):,(3) 使用 SVC 调用内核,内核将: a. 启动线程; b. 使用 MRS 指令为当前用户线程读取 SP,并 将其保存在 TCB(线程控制块)中; c. 使用 MSR 指令为下个线程设置 SP,通常是Process_SP; d. 如果需要,为新的当前线程设置 MPU; e. 返回到新的当前线程。,例子:显示如何利用 PSP在 ISR 中修改EXC_RETURN 的值,用于返回。,例子:显示如何使用 PSP 完成切换线程后的内容切换。,4.6 Abort 模式,有一些异常称为故障,有四种事件能产生故障: 取指令或从向量表加载向量时总线出错; 数据访问时总线出错; 内部检查错误,如未定义指令或试图用 BX 指令改变状态。在 NVIC 中的故障状态寄存器将指出故障的原因; 超越访问方式特权或未管理区导致 MPU 故障。,Abort 模式,当处理器发生故障后,进入 Abort 模式,故障处理可分为两类: 固定优先级硬故障; 优先权可设定的 local 故障。,4.6.1 硬故障,如果故障由于优先级或可配置的故障处理程序被禁止而不能激活,此时所有这些故障均为 硬故障。 所有异常中,仅有复位和 NMI 能抢占固定优先级硬故障。 硬故障可以抢占除了复位和 NMI或其他硬故障之外的其他任何异常。,4.6.2 Local 故障和升级,当允许时,Local 故障处理程序处理所有一般故障。 当遇到以下几种情况时 Local 故障将升级到硬故障: 一个 Local 故障处理引起了一个与之所服务的故障类型相同的故障; 一个 Local 故障处理引起了一个相同或更高优先级的故障; 一个异常处理引起了一个有相同或更高优先级的故障; 禁止Local 故障。,Local 故障列表(1),Local 故障列表(2),Local 故障列表(3),4.6.3 故障状态寄存器和故障地址寄存器,每个故障都有一个故障状态寄存器,用以对该故障的状态进行标志。Cortex-M3 处理器共有 5 个故障状态寄存器(Statue Register,SR): 三个可配置的故障状态寄存器(Mem Manage SR- MMSR、Bus Fault SR - BFSR、Usage Fault UFSR),与三个可配置的故障处理相对应; 一个硬故障状态寄存器(Hard Fault SR - HFSR); 一个调试故障状态寄存器(Debug Mo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论