当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行。在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。

1、引起异常的原因 对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理 程序进行处理。

(1)、指令执行引起的异常 软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。

(2)、外部产生的中断 复位、FIQ、IRQ。

2、ARM中异常中断的种类

(1)、复位(RESET)

a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。

b、通过设置PC跳转到复位中断向量处执行称为软复位。

(2)、未定义的指令 当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。

(3)、软件中断 这是一个由用户定义的中断指令(SWI)。可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制实现系统功能调用。

(4)、指令与取终止(Prefech Abort) 如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。

(5)、数据访问终止(DATAABORT) 如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。

(6)、外部中断请求(IRQ) 当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设通过该异常中断请求处理服务。

(7)、快速中断请求(FIQ) 当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。

3、异常的响应过程 除了复位异常外,当异常发生时,ARM处理器尽可能完成当前指令(除了复位异常)后,再去处理异常。并执行如下动作: (1)、将引起异常指令的下一条指令的地址保存到新模式的R14中,若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或 PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态 进入的。例如:在软件中断异常SWI,指令MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状 态执行。

(2)、将CPSR的内容保存到要执行异常中断模式的SPSR中。

(3)、设置CPSR相应的位进入相应的中断模式。

(4)、通过设置CPSR的第7位来禁止IRQ。如果异常为快速中断和复位。则还要设置CPSR的第6位来禁止快速中断。

(5)、给PC强制赋向量地址值。 上面的异常处理操作都是由ARM核硬件逻辑自动完成的,程序计数器PC总是跳转到相应的固定地址。 如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态,则异常处理返回时,自动切换到Thumb状态。

4、异常中断处理返回 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

(1)、将所有修改过的用户寄存器从处理程序的保护栈中恢复。

(2)、将SPSR复制回CPSR中,将连接寄存器LR的值减去相应的偏移量后送到PC中。

(3)、若在进入异常处理时设置了中断禁止位,要在此清除。 复位异常处理程序不需要返回。

打开APP精彩内容

点击阅读全文

arm中断保护和恢复_ARM异常中断的原因及处理措施相关推荐

  1. arm中断保护和恢复_ARM中断异常处理的返回

    举个小例子,下面是一段ARM汇编代码: 地址 指令 0x3000 BL add 0x3004 MOV r0,#0 0x3008 MOV r1,#1 0x300C MOV r2,#2 AREA test ...

  2. arm中断保护和恢复_ARM的中断处理详细过程

    ARM有七种异常中断类型,优先级.工作模式(有七种工作模式).地址.功能都不一样.如其中软件中断SWI优先级为6,工作模式管理模式,异常向量地址为0x00000008,功能是用户定义的中断指令,可用于 ...

  3. arm中断保护和恢复_ARM中断返回的详细分析

    原标题:ARM中断返回的详细分析 在ARM体系中,通常有以下3种方式控制程序的执行流程: 1.在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节:每执行一条Thumb指令,程序计数器 ...

  4. arm中断保护和恢复_ARM中断处理过程

    以s3c2440 ARM9核为例: 一:s3c2440 ARM处理器特性: 1.S3C2440支持60个中断源,含子中断源: 2.ARM9采用五级流水线方式: 3.支持外部中断和内部中断: 二.s3c ...

  5. arm中断保护和恢复_浅谈ARM处理器的七种异常处理

    昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq ...

  6. webclient 请求期间发生异常_ARM异常中断的原因及处理措施

    当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行.在进入异常中断处理程序时,要保存被中断程序的 ...

  7. arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结

    关于异常处理,分为三部分: 1. ARM异常和模式:core处理异常时的操作,几种模式介绍. 2. Vector table: 3. 异常优先级 4. lr偏移:几种异常如何返回 异常和中断处理简介 ...

  8. ARM裸机篇(五)——异常和中断

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  9. arm workbench ide 用户指南_ARM_异常和中断

    ARM_异常和中断 问题1.中断向量表为于存储器的什么位置? ARM7系列,除ARM720T可以放高端地址,ARM9或更高都放高端地址上. 2.FIQ或IRQ异常返回指令是什么? 答案见下面.... ...

最新文章

  1. Linux LVM 的使用详解
  2. 智能车竞赛技术报告 | 智能车视觉 - 扬州大学 - 这辆盲车不吃水果
  3. 单机结构 集群结构 分布式结构
  4. cmd imp导入dmp文件_PLSQL Developer导入导出表数据结构
  5. 10.9 ping:测试主机之间网络的连通性
  6. 解决思科认证学员与高校网络及信息安全专业实验限制的解决方案
  7. Pytorch cifar100离线加载二进制文件
  8. 5月8日全国软考办专家做客51CTO谈:软考政策、考前复习方法及考场技巧
  9. 10个JavaScript代码片段,帮助你成为更好的开发者
  10. apache点NET环境
  11. ExcelHelper代码
  12. python类和对象详解_python面向对象编程:类和对象详解介绍 – Python高级开发教程...
  13. get请求中url传参中文乱码问题
  14. 嵌入式——Linux 学习之路(二):Docker
  15. 2021基于vscode以及jlink调试esp32最新
  16. TCP/IP传输层协议实现 - TCP接收窗口/发送窗口/通告窗口(lwip)
  17. C语言读取wav文件
  18. 用python画满屏爱心_python怎么画爱心
  19. 泛型+IO流+网络编程
  20. 089day(JAVA变量输入输出,类型转换,运算符的练习和概念的内涵和外延)

热门文章

  1. 应用场景三:西门子PLC通过WIFI实现PLC之间的无线通讯
  2. 设计模式学习笔记之(桥接模式brid…
  3. goland navigate back and forward
  4. mysql逻辑架构连接池_GitHub - zzjzzb/ycsocket: 基于swoole的socket框架,支持协程版MySQL、Redis连接池、Actor模型...
  5. 【矩阵论】广义逆矩阵与线性方程组求解思维导图
  6. android+原点扩散动画,捋一捋Android的转场动画
  7. vant库 van-image标签无法引用本地图片
  8. php 字符去空格 无效,无法使用str_replace()去除PHP字符串中的空格
  9. 分销软件为何如此火爆?
  10. 游戏陪玩系统源码,陪玩APP开发系统自动化代码实践