完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.ARM的37个寄存器
ARM的37个寄存器中,30个寄存器是“通用”,1个固定用作PC(程序控制寄存器),一个固定用作CPSR(程序状态寄存器),5个固定用作5种异常模式下的SPSR(程序状态保存寄存器),特别注意user模式和sys模式共用寄存器集。上面的37个寄存器不是同时可见的,只有在特定模式下才能访问某些寄存器。例如sp和lr寄存器各有6个,但是只有在相应模式下才能访问相应的寄存器,在user模式下访问的是user的sp和lr,FIQ模式下访问的是FIQ的sp和lr,这叫做影子寄存器。模式切换时寄存器会自动切换,其中用r13作sp,用r14作lr并不是一定的,用其他的寄存器作sp和lr也是可以的,只是大家约定俗成的用r13和r14来作sp和lr。其中比较特殊的是FIQ模式(快速中断模式),只有FIQ模式有单独的r8—r12寄存器,其他模式都是共用的r8—r12寄存器,这样做的原因是实现快速中断,因为有自己特有的寄存器,切换模式时保护现场和恢复现场都比较快。每个异常模式都有自己的lr寄存器和SPSR寄存器,主要是为了模式切换时的保护、恢复现场,有独立的sp寄存器是为了各个模式间的栈空间独立,彼此互不影响,不会因为一个模式有问题就导致系统崩溃。 1.1重要寄存器介绍: 1.1.1 CPSR寄存器: CPSR中各个bit位表明了CPU的某些状态信息,譬如bleq指令中的eq就和CPSR中的Z标志位有关;CPSR中的I、F位和开中断、关中断有关;CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。 1.1.2 SPSR、lr、PC寄存器: SPSR是切换模式时用来保存CPSR寄存器的,PC寄存器里是下一条要执行指令的地址,lr寄存器是切换模式时保存pc寄存器的。程序大部分时间运行在user和sys模式下,当有中断产生时,会切换成相应的中断模式,此时需要将CPSR保存到相应中断模式的SPSR中,将pc寄存器的值保存到lr寄存器中,设置PC为相应的异常向量;当从中断返回时,再将SPSR寄存器写到CPSR寄存器,将lr寄存器的值写到PC寄存器中,完成恢复现场,继续之前的代码执行。 2. 异常处理机制: 异常向量表是硬件提供的一种机制,在CPU设计时就定好了,当发生中断时就会将对应异常向量的值加载到PC中,去执行中断处理函数,我们需要编写的就是中断处理函数,并把中断处理函数的地址放到异常向量表中。上图中的是异常处理的介绍,包括了保护现场和恢复现场。异常向量表中,每个向量里保存的是中断处理程序的地址,从图中可以看出,每个向量占4个字节,不可能保存下整个中断处理函数,但是可以保存中断处理程序的地址,当中断发生时,硬件会把把地址加载到PC中,完成跳转。这里是一级向量表,有的还有二级向量表,处理思路和一级向量表是一致的,会有二级向量表的原因主要是中断类型太多,一级向量表表示不下。 原作者:正在起飞的蜗牛 |
|
相关推荐
1个回答
|
|
666
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
852 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2844 浏览 1 评论
867 浏览 0 评论
1710 浏览 1 评论
2758 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 11:00 , Processed in 0.689988 second(s), Total 72, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号