TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

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

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

}

接下来我屏蔽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

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

Tony Tang:

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

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

dong wei1:

回复 Tony Tang:

      我是想咨询的是: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

dong wei1:

回复 Tony Tang:

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

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

赞(0)
未经允许不得转载:TI中文支持网 » 将一个简单的ISR改成汇编,格式请教?
分享到: 更多 (0)