arm处理器复位cpu后的模式切换是怎样的?

arm处理器复位cpu后先进入管理模式,然后内核是怎样切换模式的,在程序中好像无法体现出来。

ARM 内核工作模式的切换是要自己写代码的, 设置CPSR 寄存器低5位进行切换

0b10001 快速中断模式
0b10010 中断模式
0b10011 管理模式
0b10111 中止模式
0b11011 未定义
0b11111 系统模式

以下代码就是切换CPU工作模式的示例

;********** Begin init stact ***********/
;在6种模式下切换并设置堆栈指针
MRS R0,CPSR ;把CPSR读取到R0
BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Fiq ;设置R1 为0b10001
ORR R0,R0,R1 ;R0和R1相或,设置低5位
MSR CPSR_c,R0 ;把R0的值重新赋值到CPSR
LDR SP,=Stact_Fiq

BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Irq
ORR R0,R0,R1
MSR CPSR_c,R0
LDR SP,=Stact_Irq

BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Svc
ORR R0,R0,R1
MSR CPSR_c,R0
LDR SP,=Stact_Svc

BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Abort
ORR R0,R0,R1
MSR CPSR_c,R0
LDR SP,=Stact_Abort

BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Undef
ORR R0,R0,R1
MSR CPSR_c,R0
LDR SP,=Stact_Undef

BIC R0,#0x1f ;低5位清零
LDR R1,=MODE_Sys
ORR R0,R0,R1
MSR CPSR_c,R0
LDR SP,=Stact_Sys
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-25
当arm处理器的复位电平有效时,产生复位异常,arm处理器立刻停止执行当前指令,程序跳转到复位异常程序处执行指令
第2个回答  2010-12-29
http://baike.baidu.com/view/11200.htm
在这里有你要找的答案哦。
相似回答