TI的vectors.asm解析

    技术2022-05-20  46

        学习dsp发现没有对vectors.asm进行详细讲解的文章,我也是初学者之一,就把自己学习的体会写出来交流一下。

        代码如下:

    unused  .macro id

            .global unused:id: unused:id:         b unused:id:    ; nested branches to block interrupts         nop 4         b unused:id:         nop         nop         nop         nop         nop

            .endm

            .sect ".vectors"

            .ref _c_int00           ; C entry point

            .align  32*8*4          ; must be aligned on 256 word boundary

    RESET:                          ; reset vector         mvkl _c_int00,b0        ; load destination function address to b0         mvkh _c_int00,b0         b b0                    ; start branch to destination function         mvc PCE1,b0             ; address of interrupt vectors         mvc b0,ISTP             ; set table to point here         nop 3                   ; fill delay slot         nop         nop

            ;         ;  plug unused interrupts with infinite loops to         ;  catch stray interrupts         ;         unused 1         unused 2         unused 3         unused 4         unused 5         unused 6         unused 7         unused 8         unused 9         unused 10         unused 11         unused 12         unused 13         unused 14         unused 15

        首先定义了一个宏“unused”,下面是它的宏体。因为dm642每个中断服务取指包包括8条指令,所以宏体也是8条指令构成。

        .sect 是建立包含代码和数据的自定义段。

        .ref 是在当前模块中使用,但在别的模块中定义。(扩展:.def是在当前模块中定义,但在别的模块中使用。.global可替代.ref 和.def)

        .align:用来指定数据的对齐方式,格式如下:     .align [absexpr1, absexpr2]     以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或 32. 第二个表达式值表示填充的值。"must be aligned on 256 word boundary"是因为dm642每个中断服务取指包包括8条指令,每个指令是32位,而指令又必须要4位对齐,所以是 .align  32*8*4。

        如果要使用哪个中断

    只需要把下面的中断服务指令换成自己需要的指令即可。   

    更多精彩内容,请关注我的个人微信公众号“EE漫谈”。

    一起漫谈电子工程师,技术和生活。


    最新回复(0)