MSP430F149定时器TA总结

 

msp430的定时器主要是指基本定时器,看门狗定时器和TA\TB定时器,两种定时器从功能和用法的角度基本相似,TB功能更为强大,有7个CCR0寄存器,即可输出六路PWM,在做三相逆变的时候,需要六路每路相差60°的spwm波,就是用TB来发生的。

定时器的PWM发生利用的是比较模式,即在CCR0中储存周期,CCR1中储存一个小于CCR0的数字,CCR1/CCR0的比值即为占空比,其原理如下图所示:

定时器TA总结 - lovejsy - 听雨轩主人

在一个16位计数器TAR增加的过程中,当达到CCR1前输出高电平,达到CCR0值前输出低电平,达到CCR0后,重新置位。

与TA相关的寄存器分为四类:

1、TACCRx(CCRx)     //捕获/比较寄存器

2、TACCTLx(CCTLx) //捕获/比较控制寄存器

3、TACTL                  //控制寄存器

4、TAIV                     //中断向量寄存器

 

 

 

/*************TACCRx*************/

该寄存器使用最简单,可读可写,在PWM输出中CCR0常用作周期,CCR1中用作占空比。,具体作用方法见7-2图

 

/************TACCTLx*************/

15 14                 13 12       11       10         9     8        7 6 5             4           3         2       1         0

CAPTMOD1-0   CCIS1-0   SCS   SCCIx          CAP   OUTMODx   CCIEx   CCIx   OUT   COV   CCIFx

 

CAPTMOD1-0 :

选择捕获模式

00 禁止捕获模式

01 上升沿捕获

10 下降沿捕获

11 上升沿与下降沿都捕获

CCISI1-0 :

在捕获模式中用来定提供捕获事件的输入端

00 选择CCIxA

01 选择CCIxB

10 选择GND

11 选择VCC

SCS:

选择捕获信号与定时器时钟同步、异步关系

0 异步捕获

1 同步捕获

异步捕获模式允许在请求时立即将CCIFG置位和捕获定时器值,适用于捕获信号的周期远大于定时器时钟周期的情况。但是,如果定时器时钟和捕获信号发生时间竞争,则捕获寄存器的值可能出错。

在实际中经常使用同步捕获模式,而且捕获总是有效的。

SSCIx 比较相等信号EQUx将选择中的捕获、比较输入信号CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。

CAP:

选择捕获模式还是比较模式。

0 比较模式

1 捕获模式

注意:同时捕获和捕获模式选择

如果通过捕获比较寄存器CCTLx中的CAP使工作模式从比较模式变为捕获模式,那么不应同时进行捕获;否则,在捕获比较寄存器中的值是不可预料的,推荐的指令顺序为:[1]修改控制寄存器,由比较模式换到捕获模式。

[2]捕获

OUTMODx :

选择输出模式

000 输出

001 置位

010 PWM翻转/复位

011 PWM置位/复位

100 翻转/置位

101 复位

110 PWM翻转/置位

111 PWM复位/置位

关于2和3的关系:

置位就是对寄存器的某一位写"1"
复位就是使寄存器恢复到初始状态值。
翻转就是该位的电平由"1"变为"0"或者由"0"变为"1"

在实际应用中,一般使用3和6或者2和7输出一对可以互补的pwm,其他几种感觉实际应用不是很强,此外翻转与置位感觉在此差别不大

同时关于输出模式,有下图

定时器TA总结 - lovejsy - 听雨轩主人

 CCIx :

捕获比较模的输入信号

捕获模式:由CCIS0和CCIS1选择的输入信号通过该位读出。

比较模式:CCIx复位。

OUT :

输出信号

0 输出低电平

1 输出高电平

如果OUTMODx选择输出模式0(输出),则该位对应于输入状态。

COV :

捕获溢出标志

0 输出低电平

1 输出高电平

[1]当CAP=0时,选择比较模式。捕获信号发生复位,没有使COV置位的捕获事件。

[2]当CAP=1时,选择捕获模式,如果捕获寄存器的值被读出再次发生捕获事件,则COV置位。程序可检测COV来断定原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位,须用软件复位。

CCIFGx:

 捕获比较中断标志

捕获模式:寄存器CCRx捕获了定时器TAR值时置位。

比较模式:定时器TAR值等于寄存器CCRx值时置位。

 

1、在比较模式输出pwm的情况下,一般对TACCTL设置的方法是CCTL0 = OUTMOD_2;而若另外一个IO口设置为CCTL0 = OUTMOD_6;则两路为互补的,这在做逆变两个导通情况需要正好相反的情况下是非常方便的,用这种方法,也只要控制每两路之间相差120°,每一个再输出一个差180°的就可以输出六路,从而实现三相逆变。

2、在捕获模式下,一般设置的方法是

CCTL0 = CM_1 + SCS + CCIS_0 + CAP + CCIE;                          // Rising edge + CCI0A (P1.1) + Capture Mode + Interrupt

 

/************TACTL*************/

15--10  9           8           7        6     5        4        3       2       1        0

未用     SSEL1  SSEL0   ID1   ID0  MC1  MC0  未用  CLR  TAIE  TAIFG

 

SSEL1、SSEL0:

选择定时器输入分频器的时钟源

Timer_A时钟源

SSEL1   SSEL0   输入时钟源   说明

0            0           TACLK          用特定的外部引脚信号

0            1           ACLK            辅助时钟

1            0           SMCLK          子系统时钟

1            1           INCLK            见器件说明

ID1,ID0:

 输入分频选择

00 不分频

01 2分频

10 4分频

11 8分频

MC1,MC0 :

计数模式控制位

00 停止模式

01 增计数模式

10 连续计数模式

11 增/减计数模式

CLR:

 定时器清除位

POR或CLR置位时定时器和输入分频器复位。CLR由硬件自动复位,其读出始终为0。定时器在下一个有效输入沿开始工作。如果不是被清除模式控制暂停,则定时器以增计数模式开始工作。

TAIE :

定时器中断允许位

0 禁止定时器溢出中断

1 允许定时器溢出中断

TAIFG:

 定时器溢出标志位

增计数模式: 当定时器由CCR0计数到到0时,TAIFG置位。

连续计数模式:当定时器由0FFFFH计数到0时,TAIFG置位。

增/减计数模式:当定时器由CCR0减计数到0时,TAIFG置位。

 

 

TACTL设置起来比较简单,而且变化不多,不论是捕获还是比较模式相差都不很大,基本上都是只要选择一个时钟源(TASSEL)和一个计数模式(MC),时钟源一般会选择TASSEL_2(SMCLK,在没开XT2的情况下,默认800khz,在开XT2的情况下可达8MHZ),TASSEL_1(ACLK,一般不需分频,则为32768HZ)。计数方式一般都会选择增计数模式MC_1;少数情况下MC_3据说可用来生成对称波,没有试过,但是MC_3会把普通pwm的频率减半.......(使我naive的以为语句要占运行时间,所以即使使用8M晶振也只能达到4M频率而已)

 

TA总结如是,TB只是比他多了几个CCR和CCLT而已,可以用来输出6路pwm,总的评价一下定时器,主要用比较模式来生成PWM波(含SPWM波),捕获模式用来测频,测频精度非常高,感觉基本能满足鄙人要求....,以后在构架系统的时候,应该会利用TB来输出PWM,用TA测频及测相,在需要测频较多的情况下使用TB测频测相。P2.4-P2.7用来键盘,P5.2-P5.6用来液晶显示,基本人机交互和系统需求应该都可以满足