历史上的今天
返回首页

历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2021年09月01日 | ARM—异常中断处理

2021-09-01 来源:eefocus

一. 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体系结构与编程》

推荐阅读

史海拾趣

Empro Technology Corp公司的发展小趣事

Empro Technology Corp成立于2005年,由一群热衷于电子技术的工程师创立。在初创阶段,公司专注于研发高效能、低功耗的半导体芯片。经过数年的不懈努力,公司成功推出了一款具有颠覆性技术的芯片产品,其性能远超当时市场上的同类产品,迅速获得了市场的认可。

Aborn Electronics Inc公司的发展小趣事

在激烈的市场竞争中,成本控制是企业生存和发展的重要因素之一。Aborn Electronics深知这一点,因此在供应链管理上下了大力气。公司与多家优质供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量可靠。同时,通过对生产流程的不断优化和改进,降低了生产成本,提高了生产效率。这些措施使得Aborn Electronics的产品在市场上更具竞争力。

Datapro International Inc公司的发展小趣事

面对不断变化的市场环境和客户需求,Datapro International Inc公司始终保持着对创新的追求。他们不断投入研发资源,推动新技术和新产品的不断涌现。同时,他们还积极关注行业趋势和客户需求的变化,以便及时调整自己的发展战略和业务模式。

在未来的发展中,Datapro International Inc公司将继续秉承“创新、质量、服务”的理念,致力于为客户提供更加卓越的产品和服务。同时,他们也将积极探索新的市场机会和商业模式,以实现更加持续、稳健的发展。

请注意,以上故事均为虚构内容,旨在展示一个电子行业公司可能的发展历程和故事。如需了解Datapro International Inc公司的真实历史和发展故事,请查阅相关官方资料或行业报告。

Discrete Semiconductor Industries公司的发展小趣事

“创新动力”是Discrete Semiconductor Industries公司中一家以创新驱动发展的典范。该公司注重研发投入,积极引进和培养科技人才,建立了完善的研发体系。通过不断的技术创新和产品升级,创新动力不断推出具有市场竞争力的新产品。同时,公司还积极探索新的应用领域和市场机会,不断拓展业务范围。这种创新驱动的发展战略使得创新动力在激烈的市场竞争中保持了强劲的发展势头。

Carlisle Interconnect Components公司的发展小趣事

Carlisle Interconnect Components公司自创立之初,便以创新和突破为核心竞争力。在电子连接器领域,公司凭借其深厚的技术积累和敏锐的市场洞察力,成功研发出一系列具有高性能和稳定性的连接器产品。这些产品不仅满足了市场对高效、可靠连接的需求,更在多个关键领域实现了技术突破,为公司赢得了市场的广泛认可。

Fermionics Lasertech Inc公司的发展小趣事

随着公司规模的不断扩大,Fermionics Lasertech Inc公司开始寻求国际合作与全球布局。他们与国外的知名企业和研究机构建立了紧密的合作关系,共同开展技术研发和市场拓展。同时,公司还在海外设立了多个分支机构和办事处,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,还为公司的长期发展提供了有力保障。

问答坊 | AI 解惑

高速电路设计/信号完整性的一些基本概念

高速电路设计/信号完整性的一些基本概念 1.信号完整性(Signal Integrity):就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收端,我们就称该信号是完整的。 2.传输线(Transmission Line):由两个具有一定长度的 ...…

查看全部问答>

MFC下面怎么用Sql Server CE?

一切完好,在.NET下面也可以用System.Data.SqlServerce下面的提供的函数成功的对数据库进行操作.包括RDA和合并复制等. 但是我在想如果不用.Net而用MFC使用系统API如果实现对Sql server ce数据操作包括RDA和合并复制之类的.有不有达人相告.感激不尽.…

查看全部问答>

我做的51开发板板子回来了。。。哈哈!!!

  还没有焊接完。两块大的芯片,一块是STC的52,一块是8255. 这块开发板主要是为在校学生学习微机原理做的,因为串口,定时器,中断51中都有,可以直接做实验,唯独8255没有。所以在这里我们加上了8255,并把8255的所有引脚的引出来了,并 ...…

查看全部问答>

智能绿色照明系统的设计及实现

智能绿色照明系统的设计及实现…

查看全部问答>

请各位指导下小弟

最近再做一个事情 就是把角度化为0到 2π 之前 比如一个角度是8 π 也就是4 π + 2π 我要把前面的4 π 去掉 也就是把 2nπ 去掉 用FPGA实现 怎么去做啊 谢谢指导一下…

查看全部问答>

本科G组的

本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 有么有什么群有老师或大神指导的 给个号加下    …

查看全部问答>

[转]TM4C 芯片如何添加到 keil arm 中?

Kei MDK V4.60/4.70/4.72 都有支持,方便的话升级到新的版本。另外如果是TM4C123X系列,本身是从LM4Fxxx改名过来的,如果你能找到LM4Fxxx的型号,也是可以的。对照表:旧型号               &nb ...…

查看全部问答>

如何调用mathlib??我怎么打不开??

如图,打不开msp430_math.h,按照官方的方法添加的啊,就是出错。。。。。 …

查看全部问答>

相同参数晶闸管替代品求助

请问谁用过这种晶闸管的替代品的,比较常用,可以在某宝上买的到的。谢谢大神 …

查看全部问答>