-
TIMER A的寄存器
-
TIMER A的控制寄存器:TACTL
操作注意:一般要停止定时器,才进行修改TACTL的操作。
SSEL1,SSEL0:选择时钟源。
ID1,ID0:选择分频比。
MC1,MC0:选择计数模式。00:停止模式。01:增计数模式。10:连续计数模式。11:增减计数模式。
CLR:定时器清除位。
TAIE:定时器中断允许位。0:禁止定时器溢出中断。
TAIFG:定时器溢出标志位。计数到0时置位。
-
TAR 计数器
这个单元是执行计数的单元,是计数器的主题。内容可读可写。
CCTLx 捕获比较控制寄存器。在POR信号后全部复位。
CAPTMOD1-0选择捕获模式。00:禁止捕获。01:上升沿捕获。10:下降沿捕获。11:上升下降均捕获。
CCIS1-0:定义捕获时间的输入源。00:CCIxA,01:CCIxB, 10:GNE,11:VCC。
SCS:选择补货信号与定时时钟的同步异步关系。0:异步捕获。1:同步捕获。
SCCIx:比较相等信号EQUx将选中的捕获比较输入信号CCIx进行锁存,然后可以从SCCIx读出。
CAP:选择比较模式。0:比较模式。1:捕获模式。
OUTMODx选择输出模式。
CCIEx:捕获比较模块中断允许位。
CCIx:捕获比较模块的输入信号。由CCIS1-0选择的输入信号可以通过该位读出。
OUT:输出信号。
COV:捕获溢出标志。
CCIFGx:捕获比较中断标志。
CCRx 捕获比较寄存器。在捕获方式时,当满足捕获条件,硬件将自动把TAR计数器中的数据写入该寄存器。在比较模式时,定时器TAR的值等于寄存器CCRx时就发生中断,即把CCIFGx置位。
-
TAIV:中断向量寄存器
TIMER-A模块有两个中断向量,一个单独分配给捕获比较寄存器CCR0,另一个座位公用中断向量用于定时器与其他的捕获比较寄存器。之所以使CCR0中断具有最高的优先级,是因为CCR0可以用于定义增计数和增减计数模式的周期,因此他需要最快速的服务。CCIFG0在中断服务之后可以自动复位。
其他捕获比较单元和定时器公用一个中断向量,因此是多源中断,对应的中断标志CCIFG1-CCIFG2,TAIFG1在读中断向量字TAIV后,自动复位。如果不访问TAIV寄存器则不能自动复位要软件清除。
TAIV定义了不同的值分别对应不同的中断源。
<pre>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;
}
}</pre>
-
定时器的工作模式
停止模式:只是用来让定时器暂停,并不是发生复位。恢复后会回到之前的工作模式和对应的值。
增计数模式:捕获比较寄存器CCR0用作TIMER A增计数模式的周期寄存器。当TAR增计数到CCR0的值时,定时器复位并从0开始重新计数。CCR0为16位寄存器,所以该模式适用于定时周期小于0FFFFH的连续计数情况。当定时器的值到达CCRO,即设置CCIFG0表示捕获比较中断发生。而当定时器从CCR0计数回到0时,设置定时溢出标志位TAIFG为1.