0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM异常中断的原因及处理措施

姚小熊27 来源:电路城论坛 作者:王浩然 2020-06-17 10:05 次阅读

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)、若在进入异常处理时设置了中断禁止位,要在此清除。 复位异常处理程序不需要返回。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222157
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8651

    浏览量

    361780
收藏 人收藏

    评论

    相关推荐

    ARM异常中断返回的几种情况

    [学习引导]ARM异常中断返回的几种情况 异常中断返回的几种情况: 重要基础知识:R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性
    发表于 03-31 16:09

    ARM异常中断返回的几种情况

    ARM异常中断返回的几种情况异常中断返回的几种情况: 重要基础知识:R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行
    发表于 07-22 11:32

    ARM异常中断返回的几种情况

    (A+8); lr = pc – 4(这时处理器决定的,无法更改!)即 A+4。由于这类异常返回后应执行下一条指令(A+4),所以返回时,pc = lr 即可。 2.IRQ 和 FIQ 异常中断
    发表于 05-05 14:47

    ARM异常中断处理流程分析

    现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。本文讨论ARM体系中的异常中断机制。AR
    发表于 08-28 08:09

    教你一种ARM处理异常中断的方法

    的值已经更新,它指向当前指令后面第3条指令(对于ARM指令,它指向当前指令地址加12字节的位置;对于Thumb指令,它指向当前指令地址加6字节的位置),当FIQ/IRQ异常中断产生时,处理器将值
    发表于 08-18 15:26

    ARM体系中的异常中断及其应用

    ARM体系中的异常中断及其应用
    发表于 09-22 16:51 4次下载
    <b class='flag-5'>ARM</b>体系中的<b class='flag-5'>异常中断</b>及其应用

    ARM处理器编程模型之异常中断处理分析

    3.4 异常中断处理 异常中断是用户程序中最基本的一种执行流程和形态。这部分主要对ARM架构下的异常中
    发表于 10-18 13:29 1次下载

    Thumb指令集之异常中断产生指令解析

    11.7 异常中断产生指令(断点指令) Thumb异常中断产生指令与ARM指令集下的异常中断指令十分相似。同ARM指令集相同,Thumb指令
    发表于 10-19 09:32 0次下载
    Thumb指令集之<b class='flag-5'>异常中断</b>产生指令解析

    ARM S3C4510B系统的异常中断机制解析

    本文介绍A了RM S3C4510B系统 的 异常中断 机制,包括异常中断的分类,响应与返回;中断处理程序的安装与调用;SWI,IRQ中断的实
    发表于 02-03 05:32 1590次阅读
    <b class='flag-5'>ARM</b> S3C4510B系统的<b class='flag-5'>异常中断</b>机制解析

    ARM异常中断的集中情况进行总结,并给出了一些解决方法

    ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中
    的头像 发表于 02-08 09:29 6224次阅读
    对<b class='flag-5'>ARM</b><b class='flag-5'>异常中断</b>的集中情况进行总结,并给出了一些解决方法

    ARM异常中断问题详情分析总结

    ARM异常中断的类型问题分析总结 一、ARM异常中断的类型: 异常中断名称 含义 复位(Reset) 当
    发表于 04-05 10:51 1161次阅读

    ARM异常中断发生时的处理措施

    外部中断请求(IRQ) 当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设
    的头像 发表于 08-27 14:21 2378次阅读

    ARM处理器对异常中断的响应过程

    异常中断发生时,程序将当前执行指令的下一条指令的地址存入新的异常模式的链接寄存器LR中(R14_),以便程序在异常处理完后,能正确返回原程序。
    发表于 10-18 17:25 373次阅读

    arm处理器有哪些中断源?arm处理器对异常中断的响应过程

    arm处理器有哪些中断源?arm处理器对异常中断的响应过程 
    的头像 发表于 10-19 16:35 817次阅读

    ARM中的异常中断是如何实现进入中断程序的?如何进入呢?

    ARM中的异常中断是如何实现进入中断程序的?如何进入呢? 在计算机系统中,异常中断是两个常见的概念。 在
    的头像 发表于 10-19 16:36 562次阅读