主题 : 关于ARM920T异常问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 117894
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2015-08-02
最后登录: 2015-08-22
楼主  发表于: 2015-08-02 20:50

 关于ARM920T异常问题

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)
{
  ............
}

不能正常返回断点现场....看了半天也没看出哪里有错,码字不容易 哪位朋友帮个忙看看  我知道看代码尤其汇编很烦人
但是 小弟实在没办法了 纠结一下午了 都没搞定
级别: 新手上路
UID: 117894
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2015-08-02
最后登录: 2015-08-22
1楼  发表于: 2015-08-02 20:58
这个帖子能学习很多东西 没人看看么
级别: 新手上路
UID: 117894
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2015-08-02
最后登录: 2015-08-22
2楼  发表于: 2015-08-03 23:10
解决了..流改后来人  这段代码一点问题也没有, 有问题的是S3C2440的数据手册 上没没写清楚 中断里面各种挂起寄存器都是置位清零。本人以为写0清零,SO 一直在IRQ中徘徊,加上ISR代码处理的太简陋 看起来就像 没有成功回复现场