This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

将一个简单的ISR改成汇编,格式请教?



我写了一个C6424时间C语言的中断服务子程序,一切正常。但是将其改成汇编,感觉有问题!

C语言如下面:这个是运行正常代码.

interrupt void TIM10us_int4(void) //interrupt4(void)

{      OSTimeTick++;
        EDMA3CC_ESR = ***; //设置手动事件//

}

接下来我屏蔽C语言中该函数,新建了一个.asm后缀的汇编文件:

.ref _OSTimeTick
.ref _BitChnL
global _TIM10us_int4

;===========================================

;中断汇编,
;===========================================
.sect ".text" ;.text
_TIM10us_int4: 

      LDW .D2 *+B14(_OSTimeTick),B1
      NOP 4

      ADD .L2 B1,1,B1
      STW .D2 B1,*+B14(_OSTimeTick)

      MVKL .S1 0x01C01010, A0        ;写EDMA3CC_ESR寄存器
      MVKH .S1 0x01C01010, A0

      LDW .D2 *+B14(_BitChnL),B2
      NOP 4
      ZERO .D2 B1
      MVK .S2 1,B1
      STW .D1T2 B2,*A0[0]

       B .S2 IRP
      NOP 5

请教:我这个中断子程序汇编,感觉有点像调用函数,是不是有问题呀?开头应该怎么写呢?请教????

  • 在原C函数的时候加-K 选项,编译保存中间产生的汇编文件,看一下原来C ISR对应产生的汇编就知道了。

    上面没有任何寄存器保护的过程,自然不对了。

  •       我是想咨询的是:C语言 interrupt void TIM10us_int4(void) 函数名称,

    是不是interrupt在汇编中也有对应的啥子指令??

          你说用-K,我用的是反汇编看汇编代码,也没看见啥子异常代码。



     ISR前动作堆栈处理是做了的。要不C语言的中断就不对了。

    我在另一个文件有处理,C语言写的中断ISR就正确的:

       .global _TIM10us_int4  

    VEC_ENTRY .macro addr

    STW B0,*--B15
    MVKL addr,B0
    MVKH addr,B0
    B B0
    LDW *B15++,B0
    NOP 2
    NOP
    NOP
    .endm

    _vec_dummy:
    B B3
    NOP 5

    .sect ".vecs"
    .align 1024

    _vector4:   VEC_ENTRY _TIM10us_int4   ;Interrupt4 ISR

  • 对同一个函数,比较一下加与不加interrupt关键字产生的汇编代码。

  •      代码没有问题。自己写了一个IO口电平变化的汇编加到,汇编ISR代码中,发现中断方波正常的。。

    不过还是需要,谢谢你的耐心回答!!