When handling an exception, the ARM720T processor behaves as follows:
当处理一个异常时,arm720T(arm9,10,11同)有下列行为:
保存下一条指令地址到LR(链接寄存器)。
复制CPSR到SPSR寄存器
根据当前异常模式强制CPSR 模式位设置到一个对应值
4. It forces the PC to fetch the next instruction from the relevant exception vector.
迫使PC获取该异常向量的下一条要执行的指令
It can also set the interrupt disable flags to prevent otherwise unmanageable nestings of
exceptions.
它也能设置中断使能标志来预防其他未知的异常
On completion, the exception handler:
在完成异常处理后:arm将做如下处理
1. Moves the LR, minus an offset where appropriate, to the PC. The offset varies
depending on the type of exception.
移动LR里面保存的地址到PC,以使代码能正常返回到发生异常的地方继续执行。
2. Copies the SPSR back to the CPSR.
拷贝SPSR到CPSR。
清楚中断标志位
=======================================================================================
By 下家山 Q群 75303301 上海松江文汇路928号258室 松江大学城
上海索漫科技 http://www.xiajiashan.com 专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训
;Build the SVC stack
;设置管理模式堆栈
MSR CPSR_c, #0xd3
LDR SP, StackSvc
;Build the IRQ stack
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;Build the FIQ stack
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;Build the DATAABORT stack
;设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;Build the UDF stack
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;Build the SYS stack
;设置系统模式堆栈
MSR CPSR_c, #0xdf
LDR SP, =StackSys
在上述过程中,为什么SPSR的值一值是nzcvqift_User?????
当设置系统模式的时候,为什么SPSR显示Unavailable?????
上述过程中,为什么没有设置用户模式????
翻译整理:下家山(上海索漫科技培训教材 转载请注明)http://www.xiajiashan.com
2012-6-19
写于上海松江
文章评论(0条评论)
登录后参与讨论