|
ARM7中断疑惑?请哪个大虾帮忙看看。小弟不胜感激!
[复制链接]
在ARM7下写了一个定时器中断程序。下面代码是进入IRQ中断后然后为了可重入中断,就切换到系统模式下。但是在切换的时候出现问题?如何直接MSR CPSR_C,#SYS32_MODE(1)就出现SIGBUS错误。切换代码改成MSR CPSR_C,#(SYS32_MODE|NO_INT)(2)就行了。我的疑惑是为什么(1)种会出错?而修改成(2)这种,那这个中断不就屏蔽IRQ和FIQ中断 这样不就不是可重入中断了吗?
[code]
.equ NO_INT ,0xC0
.equ SYS32_MODE ,0x1F
.equ FIQ32_MODE ,0x11
.equ IRQ32_MODE ,0x12
IRQ_ISR_Handler:
//计算返回地址
sub lr,lr,#4
stmfd sp!,{lr}
mrs r14,spsr
//保存相关寄存器和spsr
stmfd sp!,{r12,r14}
//切换到系统模式
msr cpsr_c,#(NO_INT|SYS32_MODE)
//保存相关寄存器
stmfd sp!,{r0-r11,lr}
//调用C源程序W90P710_IRQ_ISR
bl W90P710_IRQ_ISR
ldmfd sp!,{r0-r11,lr}
//切换到IRQ模式
msr cpsr_c,#(NO_INT|IRQ32_MODE)
ldmfd sp!,{r12,r14}
msr spsr,r14
ldmfd sp!,{pc}^
|
|