ARM—异常中断处理

发布者:hzx312895379最新更新时间:2021-09-01 来源: eefocus关键字:ARM  异常中断处理  程序执行 手机看文章 扫描二维码
随时随地手机看文章

一. ARM程序执行流程

在ARM体系中,程序执行的流程有三种:


顺序执行程序,在正常顺序执行代码的时候,每次执行一条ARM指令,PC=PC+4(Byte)。(THUMB状态下PC=PC+2)

跳转执行程序,利用跳转指令,程序可以跳转到指定的地址处执行程序,或者跳转到特定的子程序处执行。


异常中断发生,当发生异常时,程序会跳转到相应的异常中断处理程序处执行,在执行完异常中断处理程序之后,又会返回原地址继续执行程序。


要了解ARM处理异常中断的流程原理,就要先熟悉一下ARM的工作模式与寄存器


二. ARM工作模式

在这里插入图片描述

如图,ARM有七种工作模式,大多数程序是工作在用户模式usr下的,其他六种工作模式属于特权模式,特权模式的存在是为了处理中断、异常,或者访问被保护的系统资源。不同模式之间的转换可以通过软件来切换,或者是发生各类中断、异常时CPU自动进入相应的模式。在特权模式下可以编程操作CPSR寄存器直接进入其他模式,用户模式下不可以通过写程序进入其他模式(只能通过发生各类中断、异常时CPU自动进入相应的模式)。


各种模式的简要介绍如下:


usr:用户模式,程序执行的正常状态

sys:兴奋模式,系统模式

und:未定义指令中止模式,当遇到未定义的指令时进入此模式

svc:管理模式,操作系统使用的保护模式

abt:中止模式:当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护

IRQ:中断模式,系统中各外设通常通过中断模式来处理异常中断

FIQ:快中断模式,可以快速处理异常中断


三. ARM中异常中断的种类

ARM体系中的异常中断种类如下图:

在这里插入图片描述
在这里插入图片描述

可以看出,异常中断的种类与ARM的模式基本对应。


四. 异常中断向量表及优先级

ARM中要进入异常中断的处理程序,首先要触发异常中断的条件,然后通过异常中断向量表跳转到相应的异常中断处理程序的地址中去执行程序,当同时触发多个异常中断,就涉及到异常中断的优先级问题了。


中断向量表中指定了异常中断及其处理程序的对应关系,通常存放在存储地址低端,ARM体系中,异常中断向量表的大小是32字节,每个异常中断占据4个字节大小。这4字节大小的空间中一般存放一个跳转指令或者是一个向PC赋值的数据访问指令(这样也可以跳转程序),具体的向量表如下:

在这里插入图片描述

在相应的地址中,存放着程序跳转指令,当发生异常中断时,程序就会指向向量表中的相应地址(与中断种类对应),然后执行地址中的指令,通过地址中的程序跳转指令跳转到异常中断处理程序中,或者是执行重启等相关操作。


当有多个异常中断同时发生的时候,就要给不同的异常中断规定不同的优先级了,各异常中断的优先级如下:

关于不同异常中断有相同的优先级问题,是因为有些异常中断是不可能同时发生的。


五. 异常中断用到的寄存器

不同的ARM模式下对应的寄存器也是不一样的,而且在处理异常中断的时候保持现场、转换模式、恢复现场等操作的实现都需要用到寄存器。


ARM920T中有31个通用寄存器和6个程序状态寄存器,一共37个寄存器,37个寄存器分为七组(与七种模式相对应),进入哪个模式就使用哪组的寄存器,有些寄存器是共用的、有些寄存器在不同的模式下有独有的副本,这些独有的寄存器称为备份寄存器,在图中用灰色三角做了标记:

在这里插入图片描述

通用寄存器

r0~r15的寄存器都可以直接访问,除了r15都是通用寄存器,通用寄存器既可以用于保存数据也可以保存地址,其中r13、r14这两个寄存器比较特殊。r13又称为栈指针寄存器sp,常用于保存栈指针。r14又称为程序连接寄存器lr,用于保存发生异常时的指令地址,在程序跳转的时候lr得到pc的备份,以便于恢复现场。


程序状态寄存器

每种模式下除了r0~r15寄存器之外,还共有一个程序状态寄存器CPSR,顾名思义CPSR寄存器中位用来标识当前模式的状态。当程序切换工作模式的时候,要将原来工作模式的信息(也就是CPSR)存储在SPSR中进行保存,以便恢复现场。CPSR寄存器中每个位相应的作用如下:

在这里插入图片描述

其中条件代码解释如下:

在这里插入图片描述

控制位解释如下:

在这里插入图片描述
在这里插入图片描述

另外,PSR中的其余位是保留的。在更改PSR的标志或控制位时,必须确保这些未使用的位没有被更改


六. ARM进入处理异常中断时的操作

在这里插入图片描述

1.将下一条指令的地址保存在相应的链接寄存器lr中。如果从ARM状态输入了异常,那么下一条指令的地址将被复制到链接寄存器(即当前PC + 4或PC + 8,这取决于异常)。

2.将当前的CPSR拷贝到SPSR中。

3.根据异常中断修改CPSR中对应的值。

4.强制pc从异常中断向量表中跳转到异常中断处理程序。


注意:还可以设置中断禁用标志,以防止异常的难以管理的嵌套


lr与pc的偏移量的关系如示:

在这里插入图片描述

七. ARM退出处理异常中断时的操作

从异常中断中返回时的操作与进入异常中断时的操作对称的:

在这里插入图片描述

1.将lr寄存器减去适当的偏移量,赋值给pc,恢复到原来的指令地址中。

2.将SPSR中保留的值返回给CPSR,恢复原来的CPSR。

3.清除中断禁用标志(如果它们是在进入时设置的)。


参考资料:杜春雷《ARM体系结构与编程》

关键字:ARM  异常中断处理  程序执行 引用地址:ARM—异常中断处理

上一篇:S3C2440—11.und异常
下一篇:S3C2440—10.代码重定位

推荐阅读最新更新时间:2024-11-02 19:50

基于ARM7和CPLD的数字公交站亭系统设计
  摘要:提出了一种基于ARM7 和CPLD 架构的数字公交站亭系统。系统通过GPRS 模块与公交控制中心实时通信,使用CA 认证保证通信的安全性,采用两块SRAM 组成具有“乒乓逻辑”的高速缓存确保显示数据的连续性,可实现同一站亭多条线路信息动态显示、实时车辆到站预报、公众信息发布、线路信息及时更新以及系统在线升级等功能,具有实时性好、安全性高,可扩展性强等特点。   针对现有印刷公交站亭提供信息少、无法提供车辆到站预报、增加线路或者修改线路信息麻烦等不足,本文提出了一种新数字公交站亭系统。该系统基于ARM7 和CPLD 架构,通过GPRS 与公交控制中心通信,采用CA 认证保证通信的安全性,能实现实时车辆到站预报、公众信息(
[嵌入式]
基于<font color='red'>ARM</font>7和CPLD的数字公交站亭系统设计
CSR推出ARM mbed操作系统连接方案
Wi-Fi®、 蓝牙®及Bluetooth Smart连接方案为物联网应用的开发消除准入壁垒。 CSR公司日前发布了几款即将推出的面向新型ARM® mbed™操作系统(OS)的连接方案产品细节,这些方案将使开发人员能够更加轻松、快速地开发出完整的物联网(IoT)解决方案。 CSR将为IoT社区开发者提供两款mbed扩展板,其中一款集成了基于CSR6030™和 CSR8311™的Wi-Fi与蓝牙连接方案,另一款则可提供基于CSR1010™的Bluetooth Smart连接功能,将于2015年初全面上市。两款扩展板专为与2014年10月上市的ARM mbed操作系统进行无缝协作而设计,可为所有IoT设备提供所需的基础
[物联网]
CSR推出<font color='red'>ARM</font> mbed操作系统连接方案
如何使用FlashPro-ARM编程器实现STM32H563/573的生命周期管理?
用户使用调试器可以访问嵌入式系统的大部分资源,调试身份验证(Debug authentication)是系统的一个关键安全特性,可以控制调试端口的安全锁定或回归打开,可用于MCU的开发、和现场返回分析。 在TrustZone使能或禁止情况下,STM32H563/573都支持调试认证。在禁用TZ的情况下,使用密码实现回归。在启用TZ的情况下,可以使用加密证书打开调试端口。 ELprotronic公司的FlashPro是一种用于单件和小批量生产的单通道编程器,一次编程1个目标。FlashPro-ARM编程器支持所有STM32H563/573 MCU产品状态,包括配置密码管理和完全回归。目前支持禁止TrustZone时,实现STM3
[单片机]
如何使用FlashPro-<font color='red'>ARM</font>编程器实现STM32H563/573的生命周期管理?
ARM处理器体系结构概述
本文主要介绍ARM7系列处理器。呵呵,不是相关专业可能有很多人不知道arm是个什么东西吧,我现在简要介绍一下各种处理器分类,目前我们的处理器阵营中分为CISC和RISC两大系列,CISC是复杂指令集处理器,这种处理器每条指令可以执行比较多的复杂操作,而且指令长度不定,我知道的有X86处理器是CISC处理器,目前intel和amd出的处理器主要都是x86处理器,intel的x86从8086开始到80186,283,386,486,Pemtium,pentium pro,pentium 2,pentium 3,pentium 4,扣肉2,四核志强等,还有赛扬,pentium M,pentium D等很多变种,有些提供高的性价比,有的专
[单片机]
ARM可能制造低功率PC处理器 全面反击Intel
据英国金融时报报道,由于Intel近期宣称Atom处理器将大举进军手机和其他掌上设备市场,业界普遍担心ARM在该市场中的地位将被动遥。对此,ARM公司首席执行官WarrenEast日前表示,他们丝毫不会惧怕Intel进军手机市场,相反认为ARM能够在更大的市场中打败Intel。 WarrenEast称,只要用户需求更加节能的处理器,ARM有可能制造PC用处理器,和Intel展开正面竞争,“谁会说情况一定会是Intel抢夺了ARM的市场份额,为什么不能是反过来呢?Intel的特长在于提高处理器速度,而ARM则可以造出功耗更低的。我们在这方面仍然遥遥领先。” 由于全球环保意识的逐渐提高,各大IT厂商都希望自己的产品更
[焦点新闻]
瑞芯微欲与苹果M1争市场,将发布RK3588
苹果和高通肯定不是唯一采用 ARM 架构开发桌面电脑系统的芯片公司,国内的无晶圆厂芯片设计公司正在开发其高端的 RK3588 SoC,承诺会将性能和低功耗结合起来,是本年度最受期待的处理器之一。 2020 年 11 月 26 日 -11 月 27 日,第五届瑞芯微开发者大会在福州喜来登酒店举行。据 CNX Software 报道,瑞芯微在大会上透露,期望其 RK3588 能够解决各种对性能要求较高的应用,包括高端平板电脑、笔记本电脑、AR/VR、电视,甚至 NVR(网络视频录像机)监控系统。 现在的旗舰智能手机和平板电脑的高端 SoC 已经具备了几年前主流电脑所使用的处理器相当甚至更高的性能。事实上,瑞芯微的 RK3
[嵌入式]
瑞芯微欲与苹果M1争市场,将发布RK3588
ARM裸机开发笔记1(指令简介)
1.非常简单的ARM程序: arm.s文件内容 AREA Example,CODE,READONLY ;声明代码段 AREA:定义代码段 Example是代码段名称CODE:代码段关键字READONLY:只读关键字 ENTRY ;相当于C程序中的main函数,标识程序的入口 CODE32 ;使用32位指令集 START MOV R0,#1 ;具体的汇编指令 MOV R0,#0
[单片机]
ARM架构下添加系统调用(与32位x86区别)
在这两种架构下添加系统调用的步骤是类似的,简要地比较一下,以2.6.28.6内核为例。 1.在内核源码相应位置(如sys.c或其他与这个函数联系紧密的文件)添加新的内核函数作为系统调用,形如 asmlinkage long sys_foo(void) { } 2.加入系统调用表。ARM架构存放于/arch/arm/kernel/call.S中,形如CALL(sys_foo);x86架构放于/arch/x86/kernel/syscall_table_32.S中,形如.long sys_foo。 3.定义系统调用号。ARM架构存放于/arch/arm/include/asm/unistd.h中,形如 #defin
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved