s3c2440进去到IRQ中断后无法正确返回现场:
这是我的启动代码异常部分:
Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
DCD 0x00004000 ;保留
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
Reset_Addr DCD ResetHandler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0x00000000
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
Undef_Handler B UndefHandler
SWI_Handler B SWIHandler
PAbt_Handler B PAbtHandler
DAbt_Handler B DAbtHandler
IRQ_Handler B IRQHandler
FIQ_Handler B FIQHandler
--------------------------------------------------无关代码掠过----------------------
IRQHandler
SUB LR, LR, #4 ; Update Link Register
STMFD SP!, {R0-R12, LR} ; Save Workspace & LR to Stack
MRS R0, SPSR ; Copy SPSR to R0
STMFD SP!, {R0} ; Save SPSR to Stack (8-byte)
LDR LR, =Return_Address ; Read Return Address
LDR R0, =INTOFFSET
LDR R0, [R0] ; Offset
ldr R1, =HandleEINT0
ADD PC, R1, R0, lsl #2 ; Branch to IRQ Handler
Return_Address
LDMFD SP!, {R0} ; Restore SPSR to R0
MSR SPSR_cxsf, R0 ; Restore CPSR
LDMFD SP!, {R0-R12, PC}^ ; Return to program
HandleEINT0 B 0X40000000
.............跳转表无关的省略................
HandleINT_TIMER4 B EINT8_23_Handler
.............跳转表无关的省略................
---------------------I.S.R部分------------------------
void EINT8_23_Handler(void)
{
............
}
不能正常返回断点现场....看了半天也没看出哪里有错,码字不容易 哪位朋友帮个忙看看 我知道看代码尤其汇编很烦人
但是 小弟实在没办法了 纠结一下午了 都没搞定