注:本文资料全部来源于网络或书籍,同时加上个人理解。若有侵权,告知即删。若有错误,留言商讨。
1、ARM处理器有两种工作状态,7种工作模式
2种状态:
- ARM指令状态:32位指令
- Thumb指令状态:16位指令
- 【补充】调试状态
7种工作模式:
管理模式和系统模式的区别:
系统模式和用户模式相比,使用相同的寄存器,增加了一些在usr模式下不能访问的资源。
管理模式相比系统模式可以访问资源的能力相同,都属于特权模式,并且管理模式有自己模式下的影子寄存器R13_svc和R14_svc。
uboot的目的是初始化硬件,设置为svc模式更有利于其工作。
2、ARM体系的异常中断
ARM体系中程序执行流程主要3中方式:
顺序执行:每执行一条指令,ARM状态下PC=4;Thumb状态下PC+2
跳转执行:
- B:执行跳转操作
- B:执行跳转操作,并且保存子程序的返回地址
- BX:执行跳转操作,并且根据目标地址的最低位将程序切换到Thumb状态
- BLX:执行跳转操作,并且保存子程序的返回地址,且根据目标地址的最低位将程序切换到Thumb状态
异常中断发生:执行完当前指令,跳转到相应的异常中断处理程序处执行。异常处理程序完成,返回到异常中断处。
异常中断的响应过程:
- 保存当前处理器状态、即将cpsr保存到相应的异常模式下spsr_xxx中
- 设置当前cpsr的相应位,包括:mode修改、T、禁止IRQ中断(I)、FQR模式下,禁止FIQ(F位)
- 将寄存器r14_xxx设置为返回地址,保存pc的值
- 将PC设置为异常中断向量的中断向量地址,从而跳转程序。
异常中断返回:
- 恢复处理器状态,将spsr_xxx复制到cpsr
- 将r14_xxx复制到pc中
3、FRQ和IRQ对比
FRQ要比IRQ快的原因:
- IRQ保护现场,需要保存的寄存器更多,FRQ不需要保存R8-R12;
- FRQ比IRQ中断优先级高
- FIQ在中断向量表的最高处,这就为我们直接在FIQ上面的地址直接写异常处理程序提供了可能,其他的异常必须通过跳转,而跳转就需要保存IR值