TI论坛
直播中

周玲玲

7年用户 177经验值
私信 关注
[问答]

请问C5509A的中断向量程序怎么写?

请问C5509A的中断向量程序怎么写啊?什么思路啊?

回帖(3)

余少虹

2019-1-28 09:06:10
你好,
你是要中断向量表吗?
在裸机情况下, 中断程序跟普通的程序一样, 只不过前面需要interrupt关键字来定义, 然后把函数名(前面需加下划线)填写到中断向量表对应的中断位置.

下面是中断向量表的写法
*
* Copyright (C) 2003 Texas Instruments Incorporated
* All Rights Reserved
*
*
*---------vectors_dma2.s55---------
*
* Assembly file to set up interrupt vector table
*
        .sect ".vectors"
*------------------------------------------------------------------------------
* Global symbols defined here and exported out of this file
*------------------------------------------------------------------------------
        .global _VECSTART
*------------------------------------------------------------------------------
* Global symbols referenced in this file but defined somewhere else.
* Remember that your interrupt service routines need to be referenced here.
*------------------------------------------------------------------------------
        .ref _c_int00
      .def nmi, int0, int1, int2, int3, int4, int5, int6
      .def int7, int8, int9, int10, int11, int12, int13
      .def int14, int15, int16, int17, int18, int19, int20
      .def int21, int22, int23, int24, int25, int26, int27
      .def int28, int29
_VECSTART:
        .ivec _c_int00,use_reta
nmi     .ivec no_isr
        nop_16
int0    .ivec no_isr
        nop_16
int1    .ivec no_isr
        nop_16
int2    .ivec no_isr
        nop_16
int3    .ivec no_isr
        nop_16
int4    .ivec no_isr
        nop_16
int5    .ivec no_isr
        nop_16
int6    .ivec no_isr
        nop_16
int7    .ivec no_isr
        nop_16
int8    .ivec no_isr
        nop_16
int9    .ivec no_isr
        nop_16
int10   .ivec no_isr
        nop_16
int11   .ivec no_isr
        nop_16
int12   .ivec no_isr
        nop_16
int13 .ivec no_isr
        nop_16
int14   .ivec no_isr
        nop_16
int15   .ivec no_isr
        nop_16
int16   .ivec no_isr
        nop_16
int17   .ivec no_isr
        nop_16
int18   .ivec no_isr
        nop_16
int19   .ivec no_isr
        nop_16
int20   .ivec no_isr
        nop_16
int21   .ivec no_isr
        nop_16
int22   .ivec no_isr
        nop_16
int23   .ivec no_isr
        nop_16
int24   .ivec no_isr
        nop_16
int25   .ivec no_isr
        nop_16
int26   .ivec no_isr
        nop_16
int27   .ivec no_isr
        nop_16
int28   .ivec no_isr
        nop_16
int29   .ivec no_isr
        nop_16
*------------------------------------------------------------------------------
* This is a dummy interrupt service routine used to initialize the IST.
*------------------------------------------------------------------------------
        .text
        .def no_isr
no_isr:
        b #no_isr
*------------------------------------------------------------------------------
举报

周玲玲

2019-1-28 09:16:43
引用: vuywsdfwf 发表于 2019-1-28 09:06
你好,
你是要中断向量表吗?
在裸机情况下, 中断程序跟普通的程序一样, 只不过前面需要interrupt关键字来定义, 然后把函数名(前面需加下划线)填写到中断向量表对应的中断位置.

你好,非常感谢你的解答,学习了。我想再问一下,写中断向量表是个什么思路啊?这个表我看不懂,“nop_16”, “ .ivec”,“no_isr”,“use_reta”都不懂是啥意思,按表里的意思,这些应该是在别的文件定义过的吧,能详细说明下吗?非常感谢啊!
举报

余少虹

2019-1-28 09:29:25
引用: 60user131 发表于 2019-1-28 09:16
你好,非常感谢你的解答,学习了。我想再问一下,写中断向量表是个什么思路啊?这个表我看不懂,“nop_16”, “ .ivec”,“no_isr”,“use_reta”都不懂是啥意思,按表里的意思,这些应该是在别的文件定义过的吧,能详细说明下吗?非常感谢啊! ...

c55x有32个中断源, 每个中断向量只能放8个byte, 而通常中断向量子程序会超过8byte, 所以会在中断向量的第一个byte放中断子程序地址, 中断产生后, 会跳转到中断子程序执行. 没有用到的中断向量, 就做空操作. 建议你看一下下面user guide 第5.2 Interrupt Vectors and Priorities章节
http://www.ti.com/lit/ug/spru371f/spru371f.pdf

nop_16是一条空操作指令, PC指针跳2个byte
.ivec是一条汇编伪指令, 表示中断向量入口地址, "use_reta", .ivec具体可以看下面的汇编手册第113页.
http://www.ti.com/lit/ug/spru280i/spru280i.pdf


"no_isr"在最底下定义了
        .text
        .def no_isr
no_isr:
        b #no_isr
举报

更多回帖

发帖
×
20
完善资料,
赚取积分