打印
[ZLG-ARM]

请教smartarm2200有关问题

[复制链接]
1206|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
南京土著人|  楼主 | 2007-5-16 12:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在LPC2200工程模板中,有IRQ.S的程序。
程序如下:



NoInt       EQU 0x80

USR32Mode   EQU 0x10
SVC32Mode   EQU 0x13
SYS32Mode   EQU 0x1f
IRQ32Mode   EQU 0x12
FIQ32Mode   EQU 0x11

    CODE32

    AREA    IRQ,CODE,READONLY

    MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function

        EXPORT  $IRQ_Label                      ; The label for exports 输出的标号
        IMPORT  $IRQ_Exception_Function         ; The imported labels 引用的外部标号

$IRQ_Label
        SUB     LR, LR, #4                      ; Calculate the returning address 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; Protects the task environments 保存任务环境
        MRS     R3, SPSR                        ; Protects the status variable 保存状态
        STMFD   SP, {R3,LR}^                    ; Protects SPSR and SP in user status, Notice: DO NOT write back.保存SPSR和用户状态的SP,注意不能回写
                                                ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
        NOP
        SUB     SP, SP, #4*2

        MSR     CPSR_c, #(NoInt | SYS32Mode)    ; Switch to the System Mode 切换到系统模式 
       
        BL      $IRQ_Exception_Function         ; call the C interrupt handler funtion 调用c语言的中断处理程序

        MSR     CPSR_c, #(NoInt | IRQ32Mode)    ; Switch bak to IRQ mode 切换回irq模式
        LDMFD   SP, {R3,LR}^                    ; Recover SPSR and SP in user status, Notic: DO NOT write back. 恢复SPSR和用户状态的SP,注意不能回写
                                                ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
        MSR     SPSR_cxsf, R3
        ADD     SP, SP, #4*2                    ; 

        LDMFD   SP!, {R0-R3, R12, PC}^          ;
    MEND


我就是不太清楚其中的:
SUB SP,SP,#4*2是什么意思?
在这句之前不是有个STMFD   SP, {R3,LR}^,它是满递减的,如果用SUB SP,SP,#4*2的话,不是SP指向一个空的地方吗?

再后面LDMFD   SP, {R3,LR}^,能得到之前保存的状态信息吗?

希望高人指教!谢谢

相关帖子

沙发
zlgARM| | 2007-5-16 22:35 | 只看该作者

南京土著人

注释已经说得很清楚了。
STMFD   SP, {R3,LR}^里的寄存器是用户模式下的(SP和LR),和SUB SP,SP,#4*2里的SP没关系。


使用特权

评论回复
板凳
南京土著人|  楼主 | 2007-5-17 12:35 | 只看该作者

zlgARM


我就是想知道 SUB     SP, SP, #4*2 是怎么计算来的?

我还想问的就是进了IRQ.s,就是IRQ模式了吧

STMFD   SP!, {R0-R3, R12, LR}   ;  保存任务环境
是讲的IRQ里的任务环境?
 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

1

粉丝