QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2654|回复: 1

uClinux2.4内核arm IRQ中断源代码中不解的地方

[复制链接]
发表于 2006-9-15 15:51:27 | 显示全部楼层 |阅读模式
ENTRY(vector_IRQ)
                    @
                @ save mode specific registers
                @
                ldr        r13, .LCsirq
                sub        lr, lr, #4
                str        lr, [r13]                        @ save lr_IRQ
                mrs        lr, spsr
                str        lr, [r13, #4]                        @ save spsr_IRQ
                @
                @ now branch to the relevent MODE handling routine
                @
                mrs        r13, spsr                        @ switch to SVC_32 mode
                bic        r13, r13, #MODE_MASK                @ preserve F and T bits
                orr        r13, r13, #MODE_SVC|I_BIT
                msr        spsr_c, r13                        @ switch to SVC_32 mode

                and        lr, lr, #15
                ldr        lr, [pc, lr, lsl #2]
                movs        pc, lr                                @ Changes mode and branches

.LCtab_irq:        .word        __irq_usr                        @  0  (USR_26 / USR_32)
                .word        __irq_invalid                        @  1  (FIQ_26 / FIQ_32)
                .word        __irq_invalid                        @  2  (IRQ_26 / IRQ_32)
代码如上 主要不理解的地方是 msr spsr_c,r13 add lr,lr,#15地方 在网上大家都认为这里的lr=spsr也就是跳转到中断之前哪个模式下的cpu状态寄存器,但是我觉得在msr spsr_c,r13后cpu进入的是svc_32模式这时候的lr应该是svc_lr而不是上面的irq_lr了呀,而且movs中的s标志位也只是修改ALU标志位对mode标志位无影响的...希望高手们给点启示....小弟先谢上
 楼主| 发表于 2006-9-18 09:51:51 | 显示全部楼层
不好意思 自己没看清 首先msr spsr_c,r13是改变spsr而不是cpsr所以模式也暂时不会改变。而在以后的movs pc,lr的时候cpsr会载入spsr中的直由此而进入相应的模式(这里代码中对spsr进行了修改所以在movs pc,lr后会进入svc模式),movs指令当后面跟的是pc时情况比较特殊把会copy spsr to cpsr。。。基本上如此     
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-28 11:25 , Processed in 0.053451 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表