完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在学习与开发ARM处理器的过程中,一个不能绕开的话题就是异常处理流程。它在ARM的体系架构中,占据着不可动摇的重要地位。此处就以Coterx-A系列的ARM处理器简单分析一下异常中断处理流程。 说异常处理流程之前,我们先说一下ARM处理器的工作模式和异常源。 在Coterx-A系列之前的ARM处理器,一共有个基本工作模式: User : 非特权模式,大部分任务执行在这种模式; FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式; IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式; Supervisor :当复位或软中断指令执行时将会进入这种模式; Abort : 当存取异常时将会进入这种模式; Undef : 当执行未定义指令时会进入这种模式; System : 使用和User模式相同寄存器集的特权模式; 而Coterx-A系列处理器则多了一种工作模式: Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式; 我们先想一下现实生活中遇到的类似情况,看看我们是怎么处理的。假如我们现在正在听歌,突然门铃响了,我们怎么办呢?首先把歌暂停一下,也就是保存当前正在播放的状态。然后去开门看看是谁,忙完了,继续回来听歌。总结一下:突然情况发生时,保存当前状态,去处理突发事件,完成后,恢复保存的状态,继续进行。 而在ARM内核规定的异常处理流程也采用了类似的流程。 当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_ 设置适当的 CPSR 位: 改变处理器状态进入ARM态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要) 保存返回地址到 LR_ 设置 PC 为相应的异常向量 返回时, 异常处理需要: 从 SPSR_恢复CPSR 从LR_恢复PC 以上所有的操作都是在ARM态下进行的。大家看看这个流程是否符合我们从实际生活中所总结的流程。 异常发生时,ARM Core自动保存CPSR->SPSR(对应的异常模式下的SPSR寄存器)、保存返回地址->LR(对应的异常模式下的LR寄存器),这些操作都是为了保存现场,以便将来返回。而设置CPSR则是为了处理异常。保存的返回地址则是异常发生前正在执行指令的下一条指令的地址,即此时的(pc-4)。 处理完成时,我们自己需要恢复CPSR、PC则是为了继续执行异常发生前的指令。 而ARM汇编中的跳转指令的执行也才用了同样的流程。大家有兴趣的话,可以自己编写代码调试,观察现象。 |
|
相关推荐
|
|
返回地址不一定是PC-4
|
|
|
|
|
|
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之编写程序
121 浏览 0 评论
RK3568国产处理器_教学实验箱_操作教程:1-22 密码学编程实验
241 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之六轴传感器icm20607介绍
441 浏览 0 评论
FacenetPytorch人脸识别方案--基于米尔全志T527开发板
1691 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
1116 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:12 , Processed in 0.512203 second(s), Total 67, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号