当前位置:文档之家› LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)

LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)

LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)Version 1.2文先,介绍几个英文缩写的意思以及一些注意的地方。

1.Timer0/1 定时器0/1,在User's Guide中用的是TimerA/B,所指的也是Timer0/1 。

G2553Datasheet中用的是Timer0/1 ,本文以G2553Datasheet为准。

全文以Timer0为例,Timer1类同。

2.TAxR(x = 0/1)定时器x对应的计数器,这是一个只读寄存器。

硬件自动驱动计数。

3.EQUy(y = 0/1/2)计数事件发生寄存器,当TAxR = TAxCCRy时EQUy置1。

4.定时器简介MSPG2553共有两个定时器,Timer0、Timer1,他们都是十六位的定时、计数器,内含三个捕获、比较寄存器。

两个定时器均支持多个捕获、PWM输出、间歇性计时,定时器包含多个中断源,可以是计数溢出中断、捕获中断等等。

定时器包含:●同步十六位定时、计数器运行模式。

●时钟源可从MCLK、SMCLK、ACLK任意选择。

●三个比较、捕获寄存器。

●中断向量寄存器能快速解码的所有定时器中断本文以Timer0为例详细介绍430的定时器模块,下图是Timer0组成框图0-1定时器0组成框图下面简要介绍一下该硬件框图的意思,从左上角看,首先是一个时钟源选择寄存器TASSELx,通过该寄存器选择定时器的时钟源,选择了时钟源后有一个分频器Divider,相应的设置寄存器是IDx,再过来就到一个定时器的核心部分,一个16位的定时器TAR。

其右侧有一个定时器的计数模块,MCx寄存器用来设置计数模式。

接下来,TAR正下方有三个横线,右侧标有CCR0、CCR1、CCR2,意思是CCR1、CCR0的框图和下方CCR2的框图是一样的。

此处省略不写。

在CCR中,左上角为一个捕获源选择寄存器。

可以从CCI2A、CCI2B、GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模式寄存器Capture Mode,然后过来有一个捕获溢出状态寄存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获比较寄存器。

下方为模式选择寄存器,具体设置可以查看相应的寄存器设置。

这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还看参考相应的寄存器并结合例程慢慢学习理解。

定时器运行方式下面简要重点介绍定时器计数模块的四种模式以及7种输出模式。

Timer0有一个在不断计数的只读寄存器TA0R。

计数器的计数模式共有四种,停止模式(Stop mode)、连续增计数模式(Up mode)、递增计数模式(continuous mode)、增减计数模式(Up/down mode)。

由上图可知,这四种模式可以通过MCx寄存器进行设置。

以上四种模式可以由下图可以很好理解。

0-2四种计数模式1.Stop模式计数器不工作。

2.连续计数模式为计数器从零开始连续增计数一直到0xFFFF即65535,然后又重新从零开始计数。

3.递增计数模式与连续计数模式仅有一点点区别,递增模式为计数器连续增加到TA0CCR0(即图中的CCR0)中的值后又重新从零开始计数。

TA0CCR0的值时可以在程序中直接赋值的。

4.递增递减模式也很好理解,计数器从零开始计数到CCR0后又自动减数,到零后又增计数,就像三角波一样。

每一个捕获比较模块都有一个输出单元,这个输出单元专门用来产生以下如PWM的波形信号,每一个输出单元都可以通过配置OUTMOD寄存器的值来设定八种信号输出模式,引脚输出,还要看相应的数据手册Datasheet。

下面再用几张图片详细介绍在不同计数模式下的输出态。

1.增计数模式下的输出0-3增计数模式2.递增计数模式下的输出0-4递增计数模式3.第增/第减计数模式下的输出0-5递增计数模式以上几种输出模式一般用于PWM信号的发生。

具体的使用在讲完寄存器后再举一个输出PWM信号的程序。

接下来再介绍一下定时器的捕获/比较功能,具体应查看技术手册。

●捕获模式捕获模式可以用于速度计算或时间测量。

CCIxA、CCIxB的捕获源可以连接到外部引脚或者内部信号,可以通过设定CCISx、CMx位让寄存器捕获上升、下降,或者两个输入信号的边沿。

输入信号的电平可以通过CCI位读取。

当设置寄存器CAP = 1时,使能捕获模块,●比较模式比较模式设置在CAP = 0的情况向,比较模式用于产生PWM信号。

或者在指定时间里输出终端信号,当TAxR计数到TACCRx时⏹建立起CCIFG位⏹中断事件发生标志位EQUx = 1⏹EQUx的隐含改变将影响输出模式⏹输入信号CCI被锁上入SCCI定时器中断这里以定时器0为例,定时器1同。

定时器的中断可有定时器TA0CCR0溢出产生,也可由TA0CCRx(x =1/2)溢出产生、捕获/比较事件发生引起的中断,前者有一个专用的中断向量,TIMER0_A0_VECTOR,而后者用的TIMER0_A1_VECTOR,至于是哪一个中断时间发生,还要根据标志位来判断。

定时器寄存器1.TA0CTL ,Timer0 Control Register1.1TASSELx 定时器时钟选择位,该位的值为00选择时钟源TACLK01选择时钟源ACLK10 SMCLK11INCLK(指定器件该位可选,详见指定装置Datasheet)1.2 IDx 输入时钟分频选择位,该位的值为00 /101 /210 /411 /81.3 MCx模式控制位,00 停止模式:定时器停止01 Up mode:定时器增计数到TA0CCR0的值10 Continuous mode:定时器计数到0FFFFh11 增减计数模式:定时器计数到TA0CCR0的值后减计数到01.4 TACLR 定时器清除位,该位置1,清除计数器的值归零、初始化时钟分频位、计数分频位,该位置1后自动清零。

1.5 TAIE 定时器中断使能位0 禁止中断1 使能中断1.6 TAIFG 定时器中断发生标志位0 没有发生中断事件1 发生了中断事件2.TA0R Timer0 Register定时器计数器是一个16位计数器。

该寄存器专门为定时器计数。

3.TA0CCRx Timer0 Capture/Compare Register(x = 0/1/2)定时器0捕获/比较寄存器,工作在一下两种模式下时,该位的意思为●比较模式:TACCRx保持定时比较结果数据●捕获模式:当捕获事件发生时,TA0R的值将写入该寄存器。

4.TA0CCTLx , Capture/Compare Control Register(x =0/1/2)4.1CMx Capture mode捕获模式00不捕获01捕获上升沿10 捕获下降沿11 上升、下降沿均捕获4.2CCISx 捕获/比较输入选择位,该位选择TA0CCRx的输入信号,至于是信号从哪里输入,请查看Datasheet00CCIxA01CCIxB10 GND11 Vcc4.3SCS 同步捕获源,该位用于设置输入信号与时钟源是否同步捕获0异步捕获1同步捕获4.4SCCI 同步的捕获/比较输入,所选择的 CCI 输入信号由 EQUx 信号锁存,并可通过该位读取4.5CAP 捕获/比较模式选择位0比较模式1捕获模式4.6OUTMODx 输出模式选择位,模式2,3,6,7不支持TA0CCR0,因为EQUx = EQU0000 输出模式001 置位模式010 翻转/复位模式011 置位/复位模式100 翻转模式101 复位模式110 翻转/置位模式111 复位/置位模式4.7CCIE 捕获/比较中断使能位,该位使能中断和中断标志位0禁止中断1使能中断4.8CCI 捕获/比较输入,输入信号可以通过该位读取。

4.9OUT 输出,用于输出模式0,该位用于控制输出状态0输出低电平1输出高电平4.10COV 捕获溢出,该位用于说明一个捕获事件的发生。

COV必须通过软件清零0没有捕获溢出事件发生1发生了捕获溢出事件4.11CCIFG 捕获/比较中断标志位0没有中断事件1发生了中断事件地方啊5.TA0IV Timer0 Interrupt Vector Register该中断向量列表寄存中断事件是哪一件发生。

当TA0IVx =1 捕获比较寄存器1发生了中断事件2 捕获比较寄存器2发生了中断事件5 发生了定时器事件定时器1各个寄存器的设置与定时器0大同小异,大多情况下将寄存器的名字中的0改为1即可。

此处不再赘述,如有需要,请参阅技术文档。

例程下面结合寄存器的描述即物理硬件框图,简要解释三个例程。

1.Example 1程序一开始关闭看门狗,if语句作为时钟校准的范例,可以删去。

LFXT1S_2; 选择超低频时钟源。

然后设定输出口,清除中断标志,时钟源分频设定,接下里组建定时器A,即定时器0,在详细介绍代码之前,首先看头文件关于好地兼容。

所以,在代码的编写里可以用标准模式写TA0CCR0,也可以用精简模式编写CCR0。

这样,在上述代码中,就可以很用以理解CCR0 = 5100; 等价于 TA0CCR0 = 5100;给定时器赋初值。

CCR1 = 2000; 等价于 TA0CCR1 = 2000;给定时器赋初值。

接下来到CCTL0 = CCIE; 等价于TA0CCTL0 = CCIE;使能CCR0中断。

CCTL1 = CCIE; 等价于TA0CCTL1 = CCIE;使能CCR1中断。

然后到两个中断服务函数,Timer_A0、Timer_A1。

注意TIMER0_A0_VECTOR是CCR0专用的中断向量。

而TIMER0_A1_VECTOR是其他中断向量的服务函数。

需要根据TA0IV 判断,结合寄存器的内容,Timer_A1()函数也很好理解了。

2.Example 2下面举一个无需中断服务函数、硬件自动实现产生两路PWM的例子。

初始化时钟后直接调用该函数即可。

我这里使用的是定时器B(即Timer1)。

详细的介绍见以上备注。

You’re done.桂电二院科协出品,版权所有,转载不究。

maswell_xiao@2012/7/31。

相关主题