【培训课件】ARM嵌入式系统基础教程—嵌入式系统概述+ARM7体系结构与指令系统.ppt
文本预览下载声明
* 2.8 ARM体系的异常 快速中断请求异常 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。 * 系统模式 FIQ模式 程 序 寄 存 器 组 FIQ中断的例子 “?”表示该位无关 SPSR_fiq PC CPSR SPSR MOD T F I . . . N Z C V SYS 1 0 0 . . . ? ? ? ? R8 ~ R12 R8_fiq ~ R12_fiq LR LR_sys LR_fiq R0~R7 SP_sys SP_fiq Thumb Thumb 指令1 指令2 指令3 BX指令 BX指令 ARM ARM SYS 1 0 0 . ? ? ? ? FIQ 0 1 1 . . . ? ? ? ? BackAddr JumpAddr Jump 1 0 SYS 1 0 0 . . . ? ? ? ? Jump BackAddr-4 Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。 因此,Thumb指令只需要支持通用功能,必要时可以借助于完善的ARM指令集,比如,所有异常自动进入ARM状态。 在系统模式下运行用户程序,当前处理器处于Thumb状态,执行Thumb指令代码,同时处理器还允许IRQ和FIQ中断。 指令1的在执行过程产生了FIQ中断。 注:完成指令1的执行后才响应中断。 FIQ中断相应过程中,硬件自动执行如下动作: 将CPSR寄存器内容存入IRQ模式的SPSR寄存器 置为F和I(禁止FIQ和IRQ中断); 清零T位(进入ARM状态); 设置MOD位,切换处理器模式至FIQ模式。 将下一条的地址存入FIQ模式的LR寄存器,即指令3的地址。 将跳转地址存入PC,即FIQ中断服务函数的入口地址,实现跳转。 FIQ中断服务程序在ARM状态下执行现场保护等操作。 FIQ中断服务程序使用BX指令,将处理器从ARM状态切换到Thumb状态,通过置位CPSR的T位实现。 FIQ中断服务程序开始执行Thumb指令。 FIQ中断服务程序使用BX指令,将处理器从Thumb状态切换到ARM状态,通过清除CPSR的T位实现。 FIQ中断服务程序在ARM状态下执行恢复中断现场等操作。 FIQ中断异常处理结束后,异常处理程序完成以下动作: 将SPSR寄存器的值复制回CPSR寄存器; 将LR寄存的值减去一个常量(FIQ异常为4)后复制到PC寄存器,跳转到被中断的用户程序(指令2的地址)。 * 2.8 ARM体系的异常 未定义的指令异常 未定义指令异常是内部异常中断,当ARM处理器遇到一条自己和系统内部任何协处理器都无法执行的指令时,就会发生未定义指令异常,从而进入中断处理程序,同时软件可使用这一机制通过仿真未定义的协处理器指令来扩展ARM指令集。 在仿真失败的指令后,捕获处理器执行下面的指令: MOVS PC,R14_und * 2.8 ARM体系的异常 中止异常 中止表示当前对存储器的访问不能被完成,这是由外部ABORT输入信号引起的异常中断。中止类型有2种类型: 预取指中止:由程序存储器引起的中止异常; 数据中止:由数据存储器引起的中止异常。 * 2.8 ARM体系的异常 预取指中止 当发生预取指中止时,ARM内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。 在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令: SUBS PC,R14_abt,#4 * 2.8 ARM体系的异常 数据中止 当发生数据中止异常时,异常会在“导致异常的指令”执行后的下一条指令发生。在这种情况下,理想的状况是进入数据中止异常的ISR,然后在内存中挑选出问题,再重新执行导致异常的指令。 在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令 : SUBS PC,R14_abt,#8 * 2.8
显示全部