历史上的今天
返回首页

历史上的今天

今天是:2025年03月15日(星期六)

2020年03月15日 | ARM的异常响应过程

2020-03-15 来源:eefocus

其他内容不再赘述,现在粘贴三张需要的表


表1 异常类型,优先级及向量地址

image.png?imageView2/2/w/550

表2 ARM状态下的寄存器组织(Thumb下是其一部分,就不列了)

image.png?imageView2/2/w/550

Thumb状态下的寄存器组织


Thumb状态下的寄存器组是ARM状态下的子集,高位寄存器R8~R12在Thumb状态


下不可见,在Thumb-2下可使用


表3 当前程序状态寄存器CPSR - 1个,备份程序寄存器SPSR_mode(svc,irq,und,fiq,abt)-5个

image.png?imageView2/2/w/550

N~Q为条件码,不做赘述

...........................

控制位含义如下:


I 为中断禁止控制位,I=1禁止外部IRQ中断,I=0允许IRQ中断。


F 为禁止快速中断FIQ的控制位,F=1禁止,F=0允许。


T 为ARM与Thumb指令切换,T=1执行Thumb指令,T=0执行ARM指令。若不具备Thumb指令的处理器,T=1时表示强制下一条执行的指令产生未定义的指令中断。


M4~M0为模式选择位,决定处理器处于何种模式,具体见表1


表4 ARM处理器工作模式

image.png?imageView2/2/w/550

eg:对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止IRQ中断,Thumb状态,则CPSR的值为:0x000000B0.


嗯,看完这些,就可以描述ARM异常中断的响应过程和异常处理程序的返回过程了


一:ARM异常的中断响应过程


除了复位异常立即中止当前指令外,其他情况都是处理器完成当前指令才去执行异常处理程序。


1.保存CPSR(当前程序状态寄存器)的值到将要执行异常中断对应的SPSR(备份程序寄存器)。


--SPSR有五组,分别是svc,irq,und,fiq,abt


2.设置当前状态寄存器CPSR的值


设置CPSR的M0-M4的5个位,进入相应工作模式。同时也可以设置F,I,T来禁止允许相应中断,例:设置I=0禁止IRQ中断;设置F=1进入复位模式或者FIQ模式以禁止FIQ中断。


3.将引起异常指令的下一条地址(断点地址)保存到新的异常工作模式的LR(R14_mode,程序链接寄存器)中,使得异常处理程序执行完后能正确返回原来的程序处继续执行。


例如异常中断发生,R13_mode存放堆栈指针,R14_mode存放断点地址。


4.给程序计数器PC强制赋值,转入表1所示的向量地址,以便执行相应的处理程序。


二:从异常处理程序中返回


复位异常发生后,从0x00000000开始重新执行程序,无需返回。其余异常处理完成后必须回到原来程序处执行。


1.将SPSR_mode寄存器的值复制到CPSR中,使得CPSR恢复到原先状态。


1.根据异常类型将PC值恢复成断点地址,以继续执行用户原来运行着的程序。


2.清除CPSR的中断禁止标志I和F,开放外部中断IRQ和快速中断FIQ。


程序状态字和断点地址的恢复是同时进行的,先恢复一方会产生错误。


先恢复CPSR,则保存断点地址的R14_mode不能访问。


先恢复断点地址,则异常处理程序失去对指令的控制,以至于CPSR不能恢复。


在应用程序的设计中,首先要进行异常向量的初始化处理,采用的方法是在异常向量表的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应得异常向量,从而跳转到异常处理程序,当异常处理完成以后返回到主程序继续执行。

推荐阅读

史海拾趣

eLED.com Corp公司的发展小趣事

随着国内市场的逐渐饱和,eLED.com Corp开始将目光投向国际市场。公司积极参与各类国际展会,向全球客户展示其优质的产品和技术。同时,eLED.com Corp还与国际知名企业开展合作,共同研发新技术,推动LED行业的发展。通过与国际巨头的合作,eLED.com Corp不仅提升了自身的技术水平,还拓展了国际市场,实现了品牌的全球化布局。

Gore公司的发展小趣事
在需要精确控制电压和电流的工业控制系统中,三电平直流变换器能够提供稳定的电源输出。
Cornell Dubilier公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,Cornell Dubilier公司积极引进智能化生产设备和解决方案。例如,公司部署了Rethink Robotics的智能协作机器人,显著提高了生产效率和质量。通过与机器人技术的结合,Cornell Dubilier公司在电力电容制造领域取得了显著的成绩,实现了生产过程的自动化和智能化。

安纳森(AnaSem)公司的发展小趣事

在追求经济效益的同时,安纳森始终不忘企业的社会责任。公司深知电子产品在生产和使用过程中可能对环境造成的影响,因此将环保理念融入产品设计和生产过程中。安纳森的产品原料材质标准均符合全球最新的环保指令和有害物质禁用条约,确保用户在使用产品的同时,也能为地球环境保护做出贡献。这一举措不仅赢得了用户的广泛赞誉,也为整个电子行业的绿色发展树立了典范。

爱浦电子(AIPULNION)公司的发展小趣事

在产品质量得到保障的同时,爱浦电子也积极开展市场拓展和品牌建设工作。公司积极参加国内外电子展会和技术交流活动,与众多行业伙伴建立了紧密的合作关系。此外,爱浦电子还注重品牌形象的塑造,通过统一的对外标识和全新的VI企业形象,提升了公司整体形象。这些努力使得爱浦电子在市场上逐渐树立起了良好的口碑和品牌形象。

H&D Wireless公司的发展小趣事

2017年,高创被美的集团全资收购,成为美的工业技术事业群的重要业务板块之一。这一转变标志着高创进入了一个全新的发展阶段。借助美的集团的平台力量,高创在技术研发、生产制造、供应链管理等方面得到了显著提升。同时,与美的集团旗下其他业务板块如库卡机器人等的协同合作,进一步拓宽了高创的市场应用领域。

问答坊 | AI 解惑

wince上下载图片文件并保存

现在我知道网上有个图片的地址,我想用代码实现下载并保存下,有什么方法实现阿…

查看全部问答>

《AlientekSTM32例程手册》28个实验连载--串口实验--整理后

1.注意我们的教材讲解是基于寄存器操作,方便初学者理解透彻, 2.我们另外还提供了该实例的库函数源码,下载链接:https://bbs.eeworld.com.cn/icview-210815-1-1.html 3.此实验的教程在《Alientek STM32不完全手册》的 3.3节:   ...…

查看全部问答>

51最小系统(含原理图和PCB)

51最小系统(含原理图和PCB)…

查看全部问答>

NVIC_SetPriority(SysTick_IRQn, 0x04)

replyreload += \',\' + 1316591;NVIC_SetPriority(SysTick_IRQn, n);n=0x00~0x03  设置Systick为抢占优先级0n=0x04~0x07  设置Systick为抢占优先级1n=0x08~0x0B  设置Systick为抢占优先级2n=0x0C~0x0F   ...…

查看全部问答>

招业余工程师

我公司招业余工程师,不需要到公司,熟悉STM32F10X单片机,CAN通信编程。联系电话:13874216976…

查看全部问答>

g2553与nrf24l01接收端总能检测到载波

暑假期间要做一个5发一收的小玩意,因为以前调过51的24l01,决定移植到2553上,改用spi模块做,按教程一步一步调,发送端调完了,接收端出问题了,只有接收端,检测载波,不管哪个信道,全是有载波,把发送端上电,依旧没有接收,但是一直有载波没 ...…

查看全部问答>

基于ADE7758的功率表

亲爱的各位大神啊,玩过ADE7758的请给支个招呀…

查看全部问答>

[ESP32-Audio-Kit音频开发板测评]五、读一下ID

这个跑起来我觉得比上个还简单,直接找到读ID的例程 然后点向右键头的编译下载,并按住BOOT键,显示下载成功,按RESET键开始运行: …

查看全部问答>

PWM信号读取问题(换方式了麻烦删一下帖子吧)

本帖最后由 凉冰 于 2022-11-9 11:24 编辑 PWM信号读取问题(换方式了麻烦删一下帖子吧) …

查看全部问答>