CCRx 捕获比较寄存器。在捕获方式时,当满足捕获条件,硬件将自动把TAR计数器中的数据写入该寄存器。在比较模式时,定时器TAR的值等于寄存器CCRx时就发生中断,即把CCIFGx置位。
TAIV:中断向量寄存器。TIMER A模块有两个中断向量,一个单独分配给捕获比较寄存器CCR0,另一个座位公用中断向量用于定时器与其他的捕获比较寄存器。之所以使CCR0中断具有最高的优先级,是因为CCR0可以用于定义增计数和增减计数模式的周期,因此他需要最快速的服务。CCIFG0在中断服务之后可以自动复位。
其他捕获比较单元和定时器公用一个中断向量,因此是多源中断,对应的中断标志CCIFG1-CCIFG2,TAIFG1在读中断向量字TAIV后,自动复位。如果不访问TAIV寄存器则不能自动复位要软件清除。
TAIV定义了不同的值分别对应不同的中断源。
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
FLL_CTL0 |= XCAP14PF;
TACTL = TASSEL1 + TACLR +TAIE;//SMCLK,清除TAR,允许定时器溢出中断。
P5DIR |= 0X02;
TACTL |= MC1;//TIMER A连续计数模式
_EINT();
for(;;)
{
_BIS_SR(CPUOFF);
_NOP();
}
}
#pragma vector=TIMERA1_VECTOR
_interrupt void Timer_A(void)
{
switch(TAIV)
{
case 2: break;
case 4: break;
case 10: P5OUT ^=0X02;//定时溢出发生时取反P5.1.产生PWM方波。
break;
}
}
2.定时器的工作模式
停止模式:只是用来让定时器暂停,并不是发生复位。恢复后会回到之前的工作模式和对应的值。
增计数模式:捕获比较寄存器CCR0用作TIMER A增计数模式的周期寄存器。当TAR增计数到CCR0的值时,定时器复位并从0开始重新计数。CCR0为16位寄存器,所以该模式适用于定时周期小于0FFFFH的连续计数情况。当定时器的值到达CCRO,即设置CCIFG0表示捕获比较中断发生。而当定时器从CCR0计数回到0时,设置定时溢出标志位TAIFG为1.
|