代码改变世界

CC2530定时器1的模模式中断

2013-10-17 20:00  djky12  阅读(4042)  评论(1)    收藏  举报

CC2530定时器1的模模式中断
void timer1SInit(void)
{
T1CCTL0 = 0;

T1CTL &= ~0x0F; //clear register
T1CTL |= 0x0a; //32分频,模模式运行

TIMIF |=0X40;

T1CCTL0 |= (0x40 | 0x04);//比较模式

/*装初值,本次为2500*/
T1CC0L = 0xc4;
T1CC0H =0x09;

IRCON &= ~0x02;
TIMIF |= 0x40;//溢出中断标志位
IEN1 |= 0x02; //enable timer1 interrupt

}


#pragma vector = T1_VECTOR//定时器1
__interrupt void T1_ISR(void)
{
if(T1STAT &0x01)
{

........
T1CC0L = ?;//可重新装计数值,先设置T1CC0L 后设置T1CC0H
T1CC0H = ?;

}

T1STAT = 0;
}
注意1:模模式需要开启通道0的输出比较模式,否则计数器只有到了0XFF时才会产生溢出中断(相应的产生溢出标志),也就是如果没有设置通道0的输出比较模式,计数器的值到达T1CC0后,不会产生溢出中断(相应的溢出标志不会置1),这点需要特别注意。
注意2:原来T1的模模式不是普通的溢出中断,和连续计数模式不同,它必须设置通道0的输出比较,而且溢出时也是通道0的中断标志,而非T1的总溢出中断标志。同理T3,T4的模模式中断也是这样。

总结:要使用CC2530 Time1的模模式中断,必须开启Time1的通道0并设置T1CTL成输出比较模式;在中断函数中也只有CC0的中断标志位,而不是使用溢出中断标记位。


http://hi.baidu.com/nucyueyao/item/0545e0cfcad59fbb0c0a7b34