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

    文章

    20325

    浏览量

    254684
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9583

    浏览量

    393484
  • 存储器
    +关注

    关注

    39

    文章

    7753

    浏览量

    172156

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CAN进入异常中断是为什么?

    我在S32K310芯片上使用CAN1和CAN2,当前只有在CAN1的总线上有两个节点,CAN2上是单节点状态。但是CAN2在没有触发任何故障的情况下重复进入ERR_IRQHandler。这是为什么?
    发表于 03-16 06:58

    RK806中断处理流程深度解析:从架构到调试实战

    RK806 作为瑞芯微主流 PMIC(电源管理芯片),其中断机制是实现“电源键响应、电压异常保护、休眠唤醒、 watchdog 超时处理” 等核心功能的基础。Linux 驱动基于regmap_irq框架设计,屏蔽了底层寄存器操作
    的头像 发表于 02-05 13:46 2219次阅读
    RK806<b class='flag-5'>中断</b><b class='flag-5'>处理</b>流程深度解析:从架构到调试实战

    Cortex-M3工作模式及异常

    一、工作模式 线程模式和手柄模式。 处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。 二、异常
    发表于 01-20 08:24

    CW32F030中断解析

    中断 1 概述 ARM® Cortex®-M0+ 内核的嵌套向量中断控制器 (NVIC),用于管理中断异常。NVIC 和
    发表于 01-12 08:41

    RISC-V异常中断机制全解析

    RISC-V 作为开源、模块化的精简指令集架构,其异常中断机制是保障系统可靠运行、响应外部事件与处理内部错误的核心支撑。
    的头像 发表于 12-28 14:41 1925次阅读
    RISC-V<b class='flag-5'>异常中断</b>机制全解析

    深入剖析ARM64异常处理:开发者必须掌握的底层核心逻辑

    与软件的协同操作逻辑,都是开发者必备的核心能力。今天我们就深度拆解ARM64异常处理机制,同时聊聊 开发者为何必须关注这一技术点 。 一、异常发生
    的头像 发表于 12-24 07:05 1316次阅读
    深入剖析<b class='flag-5'>ARM</b>64<b class='flag-5'>异常</b><b class='flag-5'>处理</b>:开发者必须掌握的底层核心逻辑

    使用setjmp及longjmp函数处理异常

    ,例如在发生错误或异常时,直接跳转到错误处理或资源释放的代码,而不需要逐层返回。setjmp和longjmp函数定义在setjmp.h头文件中,其语法为: int setjmp(jmp_buf
    发表于 12-11 08:00

    C++程序异常处理机制

    运行代码进行分离,使得程序更加模块化;另一方面,C++的异常处理可以不需要异常处理异常发生时的
    发表于 12-02 07:12

    芯源MCU中断相关寄存器

    5.5.1 NVIC 中断使能和禁止使能 ARM® Cortex-M0+ 处理器支持最多32 个外部中断源,分别对应中断使能设置寄存器NIV
    发表于 11-27 07:23

    线路保护光纤通道异常处理方法

    通道异常的 常见原因、处理步骤及预防措施 ,帮助运维人员快速定位问题,提升故障处理效率。 广州邮科光纤线路保护系统 一、光纤通道异常的常见表
    的头像 发表于 11-17 10:01 1541次阅读
    线路保护光纤通道<b class='flag-5'>异常</b><b class='flag-5'>处理</b>方法

    IAR下全志T113-S3 ARM Cortex-A7开启FPU后异常怎么解决?

    花了几天移植rt-thread到IAR,目前测试线程正常运行,但是想尝试开启FPU,开启了宏定义 RT_USING_FPU后启动后出现异常,程序运行后进入 Undef_Handler 异常中断
    发表于 10-14 06:18

    如果在FMC执行“程序”或“擦除”时发生中断事件,是否会处理中断事件?

    如果在FMC执行“程序”或“擦除”时发生中断事件,是否会处理中断事件?
    发表于 08-27 08:01

    UART数据传输过程中发生RLS(接收线状态)中断时,如何处理PEF、FEF和BIF标志?

    UART数据传输过程中发生RLS(接收线状态)中断时,如何处理PEF、FEF和BIF标志
    发表于 08-22 07:25

    如果在FMC执行“程序”或“擦除”时发生中断事件,是否会处理中断事件呢?

    如果在FMC执行“程序”或“擦除”时发生中断事件,是否会处理中断事件?
    发表于 08-22 06:58

    33250A信号发生器通讯异常?维修案例分享

    近期某客户送修一台安捷伦33250A安捷伦信号发生器,报修故障是通讯异常,随后工程师进行拆机检测,发现与客户报修故障一致。
    的头像 发表于 04-27 17:50 818次阅读
    33250A信号<b class='flag-5'>发生</b>器通讯<b class='flag-5'>异常</b>?维修案例分享