#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中的计数值相等,触发中断的产生?
请求高手给予回答,十分感谢您~