问:ARM在从SVC模式,进入IRQ中断时,现场是如何保存的?
答:在保存现场时,处于svc模式下时,cpsr寄存器是写入irq模式下的spsr_irq寄存器,而不是svc模式下的spsr_svc,这样,在中断模式下恢复的话,将spsr_irq寄存器里的内容写入cpsr,就能恢复到svc模式了,因为,spsr_irq寄存器里的内容就是svc模式下的状态。
另外 ,PC指针地址,在中断发生时会向LR寄存器赋值,但是赋值对象也不是LR_svc寄存器,而是在IRQ模式下的LR_irq寄存器。
因此,在进入中断IRQ模式以后,一定要第一时间把SPSR和LR寄存器给压入栈中,在需要返回的时候再弹出。
问:LR寄存器在什么时候会被赋值?
答:两种情况,一种是在发生中断异常时,会将LR赋值。如上述情况;另一种就是在发生函数调用的时候,使用BLX和BL指令,这样就会发生LR寄存器被赋予返回地址的情况。
问:通过手动更改CPSR寄存器末几位来切换模式时,会不会发生硬件赋值的情况?
答:不会,手动切换模式后,对应的如LR,spsr寄存器的映射地址就会变掉,访问的就不是同一个位置的寄存器,但是不会发生任何的硬件的赋值。模式切换不影响代码,代码还是继续该怎么在那儿跑,就在那儿跑。
问:程序返回时,为什么只需要赋值PC地址就行?为什么没有将SPSR赋值给CPSR的指令发生?
答:关于恢复CPSR原值问题:
如果指令带有S后缀(除了比较指令以外),同时又以PC为目标寄存器进行操作,
在异常模式下:则操作的同时从SPSR恢复CPSR。比如:
movs pc, #0xff /* cpsr = spsr; pc = 0xff /
adds pc, r1, #0xffffff00
/ cpsr = spsr; pc = r1 + 0xffffff00 /
ands pc, r1, r2 / cpsr = spsr; pc = r1 & r2; */
在user或者system模式:会产生不可预料的结果,因为在这两种模式下没有SPSR。
通俗解释:这是为了实现模式间的切换,因为,如果要从其他的模式转到用户模式,必须通过一条指令实现,不能通过一条指令实现就会出现问题,如:先将spsr复制到cpsr,这条指令一结束,模式就会切换,这时的LR存的就不是要跳转的目标地址了,因为模式变了,LR的映射就变了,同理,如果先将LR拷贝到PC,则下一个时钟节拍一到,CPU会执行PC指向的内容,恢复SPSR的程序也就无法执行了。
上一篇:ARM体系中的CPSR与SPSR
下一篇:ARM(包括ARMv7 工作模式介绍)寄存器、工作模式和指令集
推荐阅读最新更新时间:2024-11-11 18:36
推荐帖子
- 光纤通信基本知识
- 光纤通信基本知识包括光纤传输系统的构成通信原理以及涉及到的光器件的介绍光纤通信基本知识回复:光纤通信基本知识谢谢,收了回复:光纤通信基本知识好东西正需要呢呵呵谢谢!!!好东西啊!正需要的!!!!11谢谢收了~光纤通信基本知识
- mdreamj RF/无线
- 关于单片机控制蜂鸣器演奏音乐的一些资料
- 分享一些我之前学习单片机控制蜂鸣器演奏音乐的一些资料,还有将网上STC89系列播放音乐程序,修改成1T的stc15f2k60s2单片机的程序。关于单片机控制蜂鸣器演奏音乐的一些资料
- 五四青春 51单片机
- 初学者请教一个语法问题
- 请问这两种写法有什么不同:and#2u1(q,a,b)与and#(2)u1(q,a,b)?\0\0\0eeworldpostqq初学者请教一个语法问题非常棒,讲的太高了,价值非常高,收获很多啊
- 瓷娃娃 FPGA/CPLD
- 串口通信中的问题(接收数据不对)
- 我在用串口通信的时候,我想让他实现的是:在输入口中输入abck+12,在回显中显示+12。我的思路是:在串口中断中将输入的字符赋值到数组中去,当检测到数组中有'k'这个字符的时候,再次将检测的字符赋值到一个新的数组中去,最后在主函数中让他显示新数组中的字符。现在的现象是:会显得字符为kkk(三个字符k)。求大神帮我看看代码。#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbit
- 胡豆豆的春天 51单片机
- 可以直接通过nboot来引导NK.nb0吗?
- 请问是否可以直接修改NBOOT源码,将NK.nb0搬移到内存中运行?以达到跳过eboot的目的,请朋友们指教。可以直接通过nboot来引导NK.nb0吗?按照理论上来讲应该是可以实现的。可以的之所以要用eboot,主要的问题就是nboot有空间的限制,必须在4K以内。如果能实现nboot+eboot的基本功能并能将nboot的空间限制在4K内,就可以实现。其实NBOOT里无非就是初始化一下基本设置,然后从nandflash读取TOC结构,然后按照TOC结构里的信息,copy一段代码到
- eeworld_tw 嵌入式系统
- 突发!两大电池巨头“干上了”
- 先把新闻内容给大家放上了10月18日,中创新航披露,已向宁德时代及相关公司侵犯其专利权提起四项诉讼,索赔金额合计10.07亿元。其中,索赔额最高的一项涉及液冷板式电池模组专利,该诉讼针对宁德时代与特斯拉汽车销售服务(武汉)有限公司。中创新航称两家公司侵犯了其专利权,要求停止侵权行为,并停止制造、销售侵权产品。中创新航同时要求宁德时代赔偿其经济损失5.6亿元及200万元维权支出。另外三项专利诉讼中,被告方除宁德时代外,还包括宁德时代控股子公司四川时代以及汽车制
- okhxyyo 电源技术
设计资源 培训 开发板 精华推荐
- LB1939TGEVB,LB1939T 单步电机恒压驱动器评估板
- LTC3240-3.3 演示板,升压/降压充电泵 DC-DC 转换器
- 【ART-Pi】【ART-PI】摄像机扩展板
- DC2067A,使用 LT8710、6A、-5V 同步反相 DC/DC 转换器的演示板
- LT1021CIN8-10 具有全调整范围的精密电压基准的典型应用
- 使用 MaxLinear, Inc 的 SPX385M1-1.2/TR 的参考设计
- 效率高达 80%、EMI 性能裕度为 15dB 的 3W 非隔离式偏置电源参考设计
- LTC3615EFE 演示板、双通道、4MHz、3A 同步降压型 DC/DC 转换器,采用 TSSOP 封装
- 智能插座
- LT1183CS LCD对比度正升压/充电泵转换器的典型应用电路
- 免费申请|中科亿海微神针系列FPGA开发板EQ6HL45 1V0
- 直播:TI及安富利带你快速通过新能源汽车安全系统认证 预报名、看直播赢好礼!
- MPS 隔离式稳压 DC/DC 模块——MIE系列首发,邀你一探究竟!
- EEWorld Datasheet 伴你同行!快来领取200芯积分福利啦~
- 【抢楼】正式开始!来抢TI LM3S811评估板吧!!!
- 免费体验业界最快编译速度&最好性能 Quartus II v15.0网页版下载有礼!
- 瑞萨电子RL78/G14评估板DIY精彩上演!
- 有奖直播:万物互联 -世健公司携手Microchip专家,共同探讨IoT解决方案
- TI工业月参考设计亮点抢先看
- 2018,EEWORLD邀请你定下新年成长计划