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

C5509A中断函数与中断向量表关联的问题

我是想通过定时器0实现中断定时

void PLL_init()
{
CLKMD = 0x2cd4; //fclk = 100MHz, clkout = 50MHz}

void timer0_init()
{ PRD0 = 9999;
PRSC0 = 9; TCR0 = 0x0D38; //TOUT = 500Hz
}
void INT_init()
{
ST1_55 |= 1<<11; //失能所有中断
IER0 |= 1<<4; //使能定时器0,  是这样设置吗?,
ST1_55 &= ~(1<<11); //开所有中断
}
interrupt void timer0(void)  //中断函数就是为了控制一个引脚的电平
{
cnt++;
if(1000 == cnt)
{
if(flag&0x01)
{
ST1_55 |= (1<<13);
cnt = 0;
flag = ~flag;
}
else
{
ST1_55 &= ~(1<<13);
cnt = 0;
}
}
}
main()
{
PLL_init();
timer0_init();
INT_init();
TCR0 &= ~(1<<10);      TCR0 的TLB = 0
TCR0 &= ~(1<<4);          //启动定时器
ST1_55 &= ~(1<<13);   //
while(1);

}

中断向量表的设置:

_VECSTART:
.ivec _c_int00, C54X_STK 
nmi .ivec no_isr 
nop_16
int0 .ivec no_isr 
nop_16
int1 .ivec no_isr 
nop_16
int2 .ivec _timer0  //这里是这样设置对吗?
nop_16
int3 .ivec no_isr 
nop_16
int4 .ivec no_isr 
nop_16
int5 .ivec no_isr
nop_16
int6 .ivec no_isr

上面的设置之后能关联中断函数和中断向量表吗?还需要其他的设置吗?

我就是不太明白,当定时器0发生中断后怎么找到我的中断函数呢?

Shine:

你好,

参考一下附件的定时器中断例程。

user741957:

回复 Shine:

您好:

      在中断向量表中,编程手册不是说,引入中断函数后;占用了4个字节的空间,但是中断向量表每个中断有8个字节的空间,

在剩余的4个字节中不是填充NOP指令么。

rint1 .ivec _McBSP1RintIsr

          nop

         nop

         nop

        nop

xint1 .ivec no_isr

        nop_16

而结束部分这两行代码求详解?

      .text

no_isr   B   no_isr

这是声明了一个代码的标识,然后程序一直在这里循环么?求解释?

但是你们的向量表里面写法:

SINT30:  .ivec    no_isr             ; Software Interrupt #30

SINT31:  .ivec    no_isr             ; Software Interrupt #31

 

按照你们的例子:我的向量表调用了spi的接收中断应该是:

rint1 .ivec _McBSP1RintIsrxint1 .ivec no_isr

不需要添加4个nop指令了。求详解?

 

 

Shine:

回复 user741957:

有新问题的话,麻烦另起新帖,这样方便其他客户查看,谢谢配合。

Shine:

回复 Shine:

你的这个问题,可以看一下.ivec伪指令的用法,它会自动加nop指令,所以不需要额外添加。

.ivec伪指令的用法见下面的汇编手册第160页。http://www.ti.com/lit/ug/spru280h/spru280h.pdf

赞(0)
未经允许不得转载:TI中文支持网 » C5509A中断函数与中断向量表关联的问题
分享到: 更多 (0)