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

请问CCR0、CCR1、CCR2,这3个比较寄存器,分别在TAR为何值时第1次中断?

#include  <msp430x14x.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;// Stop WDT
P1SEL |= 0x0E;// P1.1 - P1.4 option select
P1DIR |= 0x0F;// P1.0 - P1.4 outputs
CCTL0 = OUTMOD_4 + CCIE;// CCR0 toggle, interrupt enabled
CCTL1 = OUTMOD_4 + CCIE;// CCR1 toggle, interrupt enabled
CCTL2 = OUTMOD_4 + CCIE;// CCR2 toggle, interrupt enabled
TACTL = TASSEL_2 + MC_2 + TAIE;// SMCLK, Contmode, int enabled

_BIS_SR(LPM0_bits + GIE);// Enter LPM0 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
CCR0 += 200;// Add Offset to CCR0
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TAIV )
{
case 2: CCR1 += 1000;// Add Offset to CCR1
break;
case 4: CCR2 += 10000;// Add Offset to CCR2
break;
case 10: P1OUT ^= 0x01;// Timer_A3 overflow
break;
}
}
程序请见上。
程序描述:1、程序中有4个中断,分别为CCR0、CCR1、CCR2、TAR
2、由于是持续计数模式,当TAR计数到FFFF时,TAR 被触发中断,然后进入中断子程序
3、程序中也有,CCR0、CCR1、CCR2的中断
4、子程序中进行偏移量的增加
我的困惑:1、程序中,CCR0、CCR1、CCR2并未设置一个初值,也就是说,程序中看不出当TAR中的计数值分别等于多少时,会第1次触发
CCR0、CCR1、CCR2这3个中断。
2、请问:在此程序,CCR0、CCR1、CCR2这3个比较寄存器的值分别中等于多少时,会和TAR中的计数值相等,触发中断的产生?

请求高手给予回答,十分感谢您~
cao cris:

谢谢你.

纠结2天了,User's Guide的Time_A章节看了5、6遍,硬是没找到答案

原来是我乌龙了.

再次感谢你.

初学者的波折啊.

Leon Yan:

回复 cao cris:

楼主:

有一点注意一下,一般情况下,MSP430的一个Timer模块,有三个通道;

也就意味着可以模拟三个Timer,所以有了你以上的问题。

谢谢。

赞(0)
未经允许不得转载:TI中文支持网 » 请问CCR0、CCR1、CCR2,这3个比较寄存器,分别在TAR为何值时第1次中断?
分享到: 更多 (0)