一、ARM系统的CPU有以下7种作业形式:
用户形式(usr) 大多数程序运转于用户形式 | ||
特权形式 | 系统形式(sys) 运转具有特权的操作系统使命 | |
反常形式 | 中止形式(irq) | |
快速中止形式(fiq) 有必要进快处理中止请求,并脱离这个形式 | ||
管理形式(svc) 操作系统运用的维护形式 | ||
数据拜访停止形式(abt) 数据或指令预取停止时进入该形式 | ||
未定义指令停止形式(und) 未定义的指令履行时进入该形式 |
注解:
能够经过软件来进行形式切换,或许产生各类中止、反常时CPU主动进入相应的形式;
用户形式与系统形式两者运用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状况寄存器),但系统形式比用户形式有更高的权限;
系统复位或开机时则进入到SVC形式下;
当遇到软中止(SWI,Software Interrupt)时,也将进入到SVC形式下;
进入特权形式是为了处理中止、反常、或许拜访被维护的系统资源;
ARM中止形式(IRQ)和快速中止形式(FIQ)差异:
1. FIQ的优先级比IRQ高。
2. IRQ能够被FIQ所中止,但FIQ不能被IRQ所中止,在处理FIQ时有必要要封闭中止。
3. FIQ形式下,比IRQ形式多了几个独立的寄存器。
不要小看这几个寄存器,ARM在编译的时分,假如你FIQ中止处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时刻。
4. FIQ的中止向量地址在0x1C,而IRQ的在0x18。(也有的在FFFF001C以及FFFF0018)
写过完好汇编系统的都比较理解这点的不同,18只能放一条指令(18-1c 4个字节),为了不与1C处的FIQ抵触,这个当地只能跳转,而FIQ不一样,1C今后没有任何中止向量表了,这样能够直接在1C处放FIQ的中止处理程序,因为跳转的规模约束,至少少了一条跳转指令。
5.IRQ和FIQ的呼应推迟有差异
IRQ的呼应并不及时,从Verilog仿真来看,IRQ会推迟几个指令周期才跳转到中止向量处,看起来像是在等预取的指令履行完。FIQ的呼应不清楚,或许比IRQ快。
二、ARM系统的CPU有两种作业状况
1、ARM:32位,ARM状况履行字对齐的32位ARM指令。
2、THumb:16位,履行半字对齐的16位指令
注:1、ARM和Thumb两种状况之间的切换不影响处理器的作业形式和寄存器的内容。
2、ARM处理器在处理反常时,不过处理器处于什么状况,则都将切换到ARM状况。
3、CPU上电处于ARM状况
三、寄存器
ARM有31个通用的32位寄存器,6个32位程序状况寄存器,共分为7组,有些寄存器是一切作业形式共用的,还有一些寄存器专归于每一种作业形式;
R13——栈指针寄存器,用于保存仓库指针;
R14——程序衔接寄存器,当履行BL子程序调用指令时,R14中得到R15的备份,而当产生中止或反常时,R14保存R15的回来值;
R15——程序计数器;
快速中止形式有7个备份寄存器R8—R14,这使得进入快速中止形式履行很大部分程序时,乃至不需要保存任何寄存器;
其它特权形式都含有两个独立的寄存器副本R13、R14,这样能够令每个形式都具有自己的仓库指针和衔接寄存器;
四、当时程序状况寄存器(CPSR)
CPSR中各位含义如下:
T位:1——CPU处于Thumb状况, 0——CPU处于ARM状况;
I、F(中止制止位): 1——制止中止, 0——中止使能;
作业形式位:能够改动这些位,进行形式切换;
五、程序状况保存寄存器(SPSR)
当切换进入某一个特权形式时,SPSR保存前一个作业形式的CPSR值,这样,当回来前一个作业形式时,能够将SPSR的值康复到CPSR中;
六、形式切换
当反常产生,CPU进入相应的反常形式时,以下作业是由CPU主动完结的:
1、在反常形式的R14中保存前一作业形式的下一条行将履行的指令地址;
2、将CPSR的值到反常形式的SPSR中;
3、将CPSR的作业形式设为该反常形式对应的作业形式;
4、令PC值等于这个反常形式在反常向量表中的地址,即跳转去履行反常向量表中的相应指令;
从反常作业形式退回到之前的作业形式时,需要由软件来完结以下作业:
1、将反常形式的R14减去一个恰当的值(4或8)后赋给PC寄存器;
2、将反常形式SPSR的值赋给CPSR;