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

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

3天内不再提示

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

STM32嵌入式开发 来源:STM32嵌入式开发 2020-08-27 14:21 次阅读

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

    文章

    19461

    浏览量

    231413
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9184

    浏览量

    369725
  • 存储器
    +关注

    关注

    38

    文章

    7534

    浏览量

    164486

原文标题:ARM异常中断的原因及处理措施

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电力系统应急处理措施

    的重要性 电力系统应急处理是指在电力系统发生突发事件时,采取的一系列措施以最小化事件对电力供应的影响。这些突发事件可能包括自然灾害、设备故障、人为破坏等。有效的应急处理
    的头像 发表于 01-18 09:42 249次阅读

    串口通讯异常处理方法 串口设备连接方式

    串口通信异常处理方法 1. 异常检测 在串口通信中,首先需要能够检测到异常情况。异常检测可以通过以下几种方式实现: 硬件检测 :利用串口硬件
    的头像 发表于 12-27 09:53 938次阅读

    单片机有哪些中断类型

    单片机中断是指在单片机执行程序的过程中,外部设备或内部条件发生某个特定事件时,能够暂停当前正在执行的程序,转而去执行一个特定的服务程序(称为中断服务程序或
    的头像 发表于 10-17 18:12 975次阅读

    ARM处理器的工作模式和特点

    ARM处理器具有多种工作模式,这些模式根据处理器执行的任务和当前的状态进行划分。常见的ARM处理器工作模式包括用户模式(User Mode)
    的头像 发表于 09-10 11:22 1486次阅读

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

    ARM处理器的异常中断响应是嵌入式系统设计中一个至关重要的环节,它确保了系统在面对内部或外部事件时能够稳定、可靠地运行。
    的头像 发表于 09-10 11:18 1192次阅读

    Panasonic松下焊接电异常处理

    电子发烧友网站提供《Panasonic松下焊接电异常处理.pdf》资料免费下载
    发表于 08-19 14:24 0次下载

    ARM异常有哪些?ARM异常向量表基地址

    我们先回忆一下在单片机上的中断的使用。
    的头像 发表于 08-07 09:22 1209次阅读
    <b class='flag-5'>ARM</b>的<b class='flag-5'>异常</b>有哪些?<b class='flag-5'>ARM</b>的<b class='flag-5'>异常</b>向量表基地址

    嵌入式C编程常用的异常错误处理

    。 3. 中断服务程序 (Interrupt Service Routines, ISR) 在嵌入式系统中,中断处理异常情况的常用方法。ISR用于
    发表于 08-06 14:32

    plc突然断电会导致什么异常

    PLC(Programmable Logic Controller,可编程逻辑控制器)是一种广泛应用于工业自动化领域的控制器。PLC突然断电时,可能会导致一些异常情况,这些异常情况可能
    的头像 发表于 07-25 10:11 1743次阅读

    如何降低功率元器件发生绝缘品质异常

    绝缘体内存在气泡(Void)或绝缘体间存在气隙(Airgap)时,在正常工作电压下气泡或气隙容易发生局部放电(PartialDischarge,PD),导致绝缘劣化造成绝缘品质异常。例如:树酯内有
    的头像 发表于 05-28 10:51 347次阅读
    如何降低功率元器件<b class='flag-5'>发生</b>绝缘品质<b class='flag-5'>异常</b>

    RISC-V的中断处理 中断操作三个步骤

    中断操作三个步骤: 1、中断初始化 2、trap处理 3、用户中断处理
    的头像 发表于 05-20 16:38 1412次阅读

    STM32中关于USB的mass storage类通信中输入中断处理的疑问求解

    发生输入中断进入非零端点处理的输入中断处理的回调函数EP1_IN_Callback中使用了Mass_Storage_In函数,其中需要判断
    发表于 05-17 07:40

    STM32F429IGT6初始化LCD-TFT导致的晶振输出异常怎么解决?

    干扰),此不影响产品的正常运行,但是导致U盘在播放MP3歌曲时异常中断,请问这是ST的stm32F429系列的硬件BUG吗?
    发表于 04-01 07:48

    请问STM32IDE如何设定代码到ITCM中运行?

    摸索到了如何将变量定义到某个地址,但是不清楚如何让代码在指定RAM中运行。按照设定变量的方式设定代码,程序直接进入了异常中断{:16:}。
    发表于 03-26 06:08

    算术运算期间发生除以零或下溢/溢出时,ARM926EJ-S内核的行为是什么?

    算术运算期间发生除以零或下溢/溢出时,ARM926EJ-S 内核的行为是什么。 我知道有些架构已经定义了行为,或者可以将其配置为触发中断以响应其中一个算术
    发表于 02-22 07:35