搜索
bottom↓
回复: 7

arm进入中断之前都需要保存那些寄存器

[复制链接]

出0入0汤圆

发表于 2010-4-26 10:34:31 | 显示全部楼层 |阅读模式
在周立功的模板里看到他保存了 R0-R3, R12, LR 这些寄存器 但是根据atpcs编码规则保存这些是不行的啊

周立功为什么这么写啊

有什么原因吗

出0入0汤圆

 楼主| 发表于 2010-4-26 10:58:38 | 显示全部楼层
网上强人真多啊  
这个是周立功ucos的中断模板  很详细的解释啊
点击此处下载 ourdev_549302.txt(文件大小:4K) (原文件名:IRQ.C的中文解释.txt)
在这里这里看的解释  非常感谢cxyang老师
http://blog.chinaunix.net/u1/52323/showart_415698.html

出0入0汤圆

发表于 2010-4-26 12:45:30 | 显示全部楼层
回复【楼主位】SHMI
-----------------------------------------------------------------------

同问,现在我也不太清楚到底要保存哪些寄存器,有时只保存一个,有时保存七八个,搞不懂,等待大牛指导啊。。。

出0入0汤圆

 楼主| 发表于 2010-4-26 13:56:45 | 显示全部楼层
周立功的中断处理程序
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

保存了r0-r3  r12 lr  但是编译器自动保存了 r4-r11 也就是说全部都保存了啊
是基于ads1.2  支持atpcs编译规则

出0入0汤圆

 楼主| 发表于 2010-4-29 12:54:15 | 显示全部楼层
终于找到了 比较详细的介绍了啊
连接方式如下
http://tech.fuwuqi.com.cn/Development/embedded/2009-07-15/4762356812486.shtml

出0入0汤圆

 楼主| 发表于 2010-4-30 10:54:03 | 显示全部楼层
昨天看了一下周立功的模板和S3C44B0的模板
发现周立功的模板上进入中断子函数还要查找是发生了那个中断,应该是通过$IRQ_Label HANDLER $IRQ_Exception_Function来找的所以要用到r0-r3 继而先将这几个寄存器压栈
  S3C44B0 的中断代码如下
IsrIRQ        ;using I_ISPR register.
    sub            sp,sp,#4       ;reserved for PC
    stmfd   sp!,{r8-r9}   

        ;IMPORTANT CAUTION
        ;if I_ISPC isn't' used properly, I_ISPR can be 0 in this routine.

    ldr            r9,AddrISPR;=I_ISPR
    ldr            r9,[r9]

        cmp                r9, #0x0        ;If the IDLE mode work-around is used,
                                                ;r9 may be 0 sometimes.
        beq                %F2

    mov            r8,#0x0
0
    movs    r9,r9,lsr #1
    bcs            %F1
    add            r8,r8,#4
    b            %B0

1
    ldr            r9,AddrHandleADC;=HandleADC
    add            r9,r9,r8
    ldr            r9,[r9]
    str            r9,[sp,#8]
    ldmfd   sp!,{r8-r9,pc}

2
        ldmfd        sp!,{r8-r9}
        add                sp,sp,#4
        subs        pc,lr,#4
       
AddrISPR;There is no this phrases in original 44binit.s
    DCD     I_ISPR
AddrHandleADC   
    DCD     HandleADC
IsrIRQEnd  
它是通过偏移地址直接计算出是哪一个中断,因此不需要r0-r3所以也就不需要压栈了啊


有不正确的地方还请高手指出啊 !!!!!!!!!!

出0入0汤圆

发表于 2010-8-6 09:49:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-6 10:30:19 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 01:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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