打印

$IRQ_Exception_Function 函数控制

[复制链接]
2649|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ice_River|  楼主 | 2007-4-13 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
$IRQ_Label
        SUB     LR, LR, #4                     
        STMFD   SP!, {R0-R3, R12, LR}           
        MRS     R3, SPSR                        
        STMFD   SP, {R3,LR}^                    
        NOP
        SUB     SP, SP, #4*2
        MSR     CPSR_c, #(NoInt | SYS32Mode)  

        BL      $IRQ_Exception_Function     
    
        MSR     CPSR_c, #(NoInt | IRQ32Mode)    
        LDMFD   SP, {R3,LR}^                  
        MSR     SPSR_cxsf, R3                    
        ADD     SP, SP, #4*2                    ; 
        LDMFD   SP!, {R0-R3, R12, PC}^          ;
    MEND    
宏里面的$IRQ_Exception_Function   如何在中断里面控制呢?
多谢各位!
  

相关帖子

沙发
Ice_River|  楼主 | 2007-4-14 11:32 | 只看该作者

太简单了?!

自己一个人研究,发在这里,对不住各位了

使用特权

评论回复
板凳
阿南| | 2007-4-15 11:15 | 只看该作者

楼主请把问题描述的再清楚、详细些

咱们应用工程师看见汇编代码都会有点晕!这个问题是在刚开始学ARM时,分析启动代码时研究过的,一般很久没去管了,所以也就差不多忘记了。而不是问题太简单的原因,请楼主多多谅解!

使用特权

评论回复
地板
Ice_River|  楼主 | 2007-4-16 12:38 | 只看该作者

多谢三楼!有劳各位!

    MACRO                                       ;宏定义开始
$IRQ_Label HANDLER  $IRQ_Exception
        EXPORT  $IRQ_Label                      ; 输出的标号(此处含义不太明白)
        IMPORT  $IRQ_Exception            ; 引用的外部标号  声明外部子程序标号
$IRQ_Label
        SUB     LR, LR, #4                      
        STMFD   SP!, {R0-R3, R12, LR}           
        MRS     R3, SPSR                        
        STMFD   SP, {R3,LR}^                    
         SUB     SP, SP, #4*2
        MSR     CPSR_c, #(NoInt | SYS32Mode)  
; 上面6行为压桟
       
        BL      $IRQ_Exception    
;此处为跳转     调用c语言的中断处理程序 外部中断程序标号   响应中断
;IRQ_Exception  如果不在外部声明一个函数体报错,如果声明函数体和其它的中断函数关系如何?
        MSR     CPSR_c, #(NoInt | IRQ32Mode)    
        LDMFD   SP, {R3,LR}^                    
        MSR     SPSR_cxsf, R3            
        ADD     SP, SP, #4*2                    
        LDMFD   SP!, {R0-R3, R12, PC}^          
; 上面5行为弹桟
    MEND           ;宏定义结束
UART0_Handler    HANDLER    IRQ_UART0
;引用宏的扩展(此处不太理解HANDLER两侧的标号代表什么?)

使用特权

评论回复
5
宇宙飞船| | 2007-4-16 13:59 | 只看该作者

俺解释一下,

EXPORT  $IRQ_Label  ; // EXPORT 关键字是说给编译器听的,它告诉编译器,这个文件有一个***的地址标号,外部程序可以随时调用。LD 连接器可以得到这个标识地址,真实的地址还要在连接的时候根据实际的先后顺序计算得到。
IMPORT  $IRQ_Exception            ; 引用的外部标号  声明外部子程序标号    //外部文件中有这样的地址标识符。
        BL      $IRQ_Exception    
;IRQ_Exception  如果不在外部声明一个函数体报错,如果声明函数体和其它的中断函数关系如何?
//没有任何关系,IRQ_Exception仅是另外文件的一个地址标号,
UART0_Handler    HANDLER    IRQ_UART0
;引用宏的扩展(此处不太理解HANDLER两侧的标号代表什么?
//真不知楼主师从何人?楼主的解剖程序的工具一定是有问题?

使用特权

评论回复
6
Ice_River|  楼主 | 2007-4-16 16:54 | 只看该作者

周公的lpc2292 CAN总线驱动

多谢5楼!

使用特权

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

本版积分规则

149

主题

1882

帖子

0

粉丝