ARM嵌入式系统基础教程—嵌入式系统概述ARM7体系结构与指令系统.ppt

ARM嵌入式系统基础教程—嵌入式系统概述ARM7体系结构与指令系统.ppt

  1. 1、本文档共140页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM嵌入式系统基础教程—嵌入式系统概述ARM7体系结构与指令系统

* 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

文档评论(0)

xjj2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档