我是想通过定时器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