1.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定义了不同的值分别对应不同的中断源。
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.
|