MSP430 G2553 计时/计数器 Timer_A

MSP430G2553包含了两个16-bit Timer_A计时/计数器。本文简单介绍了Timer_A的功能和寄存器使用,本文及后续的随笔部分参考了"Scientific Instrument Using the TI MSP430"博客。该博客的MSP430教程文章非常好,建议对MSP430感兴趣的人FQ阅读。

一、介绍

Timer_A可实现的功能有

- multiple compare:判断计时器时间是否到达设定条件,触发事件

- multiple capture:捕获某个事件发生的时间

- PWM output:脉冲调制信号输出

- interval timing

Timer_A的构造框图如下所示。

二、Timer Block

- 包含了一个16-bit的timer/counter寄存器TAR。

- 时钟源可以由TAxCTL寄存器的TASSELx字段选择,为SMCLK、ACLK、TACLK、INCLK四者中的一个。其中TACLK、INCLK为外部输入的信号,对应管脚需查看具体芯片手册。

- 分频比由TAxCTL寄存器的IDx字段选择,支持1/2/4/8分频。

- Timer的开关及运行模式由TAxCTL寄存器的MCx字段选择,默认为00(Timer关闭)。运行模式支持up mode, continuous mode, up/down mode 三种,如下图所示。调试中发现,修改MCx时会将TASSELx和IDx清零。

- 将TAxCTL寄存器的TACLR置0,可实现将TAR清零,同时TAxCTL寄存器的IDx、MCx字段也会被清零。

- Timer overflow时可产生中断,由TACTL寄存器的TAIE使能,中断标志位为TACTL寄存器的TAIFG位。

三、Compare Block

- 每个Timer_A包含两个(TAxCCR0、TAxCCR1)或三个(TAxCCR0、TAxCCR1、TAxCCR2)capture/compare register。如MSP430G2553的每个Timer_A包含三个capture/compare register。

- compare模式可以产生PWM信号,和特定时间间隔的中断。

- compare模式由TAxCCRx寄存器的CAP=0来使能。

- 当TAR寄存器计数到TAxCCRx寄存器的值时,可触发中断,由TAxCCTLx寄存器中的CCIE位使能,中断标志位为TAxCCTLx寄存器中的CCIFG位。

四、Capture Block

- capture模式可用时间测量、速度计算。

- 外部输入信号为CCIA或CCIB,对应管脚需查看具体芯片手册。

- capture模式由TAxCCRx寄存器的CAP=1及CMx字段来使能。

- 捕获条件由TAxCCRx寄存器的CMx字段设置,默认为00(关闭)。捕获条件可以为仅上升沿、仅下降沿、上升/下降沿三种之一。

- 建议设置TAxCCRx寄存器的SCS位,从而将捕获产生信号与时钟信号同步。

- 当上一次捕获产生信号被读取前又有了新的捕获产生信号、即capture overflow时,TAxCCRx寄存器的COV标志位会置1。

- 捕获事件发生时,产生的中断标志位与compare模式相同,为TAxCCTLx寄存器中的CCIFG位。亦由TAxCCTLx寄存器中的CCIE位使能。

五、一个简单例子

利用MSP430G2553 Timer0_A的compare mode,产生频率为0.1Hz的方波,驱动LED进行显示。代码在中断程序中又进行了一次计数,以实现长时间间隔定时。

 1 #include "io430.h"
 2
 3 #define LED1 BIT0 //red led on G2 Launchpad
 4
 5 //global variables
 6 char i = 0;
 7
 8 void main(void)
 9 {
10     // Stop watchdog timer to prevent time out reset
11     WDTCTL = WDTPW + WDTHOLD;
12
13     P1OUT = 0;
14     P1DIR |= LED1;
15
16     // set DCO freq = 1MHz
17     BCSCTL1 = CALBC1_1MHZ;
18     DCOCTL = CALDCO_1MHZ;
19
20     // BCM+ initial state:
21     // DCOCLK -> MCLK
22     // DCOCLK -> SMCLK
23     // comprare/capture mode -> compare mode
24
25     TA0CCR0 = 62550 - 1;
26     TA0CCTL0 = CCIE; // enable compare interrupt
27     TA0CTL = TASSEL_2 + ID_3 + MC_1 + TACLR;
28     // input clock: SMCLK/8 -> 125kHz;
29     // timer overflow freq: 125k/(TA0CCR0+1) -> 2Hz
30     // clear and start the timer, up mode
31
32     __enable_interrupt();
33
34     while(1)
35     {
36
37     }
38
39 }
40
41 //interrupt service routines
42 #pragma vector = TIMER0_A0_VECTOR
43 __interrupt void CCR0_ISR(void)
44 {
45     if(++i == 10) // interval: 1/2 * 10 = 5s, freq: 0.2Hz
46     {
47         // no flag clearing necessary; CCR0 has only one source,
48         // so it‘s automatic.
49         P1OUT ^= LED1; // the sqaure wave freq: 0.2Hz/2 -> 0.1Hz
50         i = 0;
51     }
52 }
时间: 2024-10-07 05:01:37

MSP430 G2553 计时/计数器 Timer_A的相关文章

MSP430 G2553 Launchpad实现电容测量

一.基本原理 对于Source-Free RC电路,其电容放电的特性可以描述为: 其中V0是电容的初始电压,t是放电时间,R是串接的电阻阻值,C是电容值,v(t)是t时刻电容上的电压.因此,若已知V0.R.以及t1时刻的电压Vt1,便可求得C: 二.如何控制和测量 如上图所示,大致步骤为:1)由GPIO通过电阻R给电容C充电至Vcc:2)该GPIO输出0,电容C通过R进行放电,同时Timer开始计时.CA+开启:3)当电容电压放电至参考电压(此处是0.25Vcc)时,比较器CA+输出端出现电平变

MSP430 G2553 低功耗模式LPMx

MSP430除了正常运行时的active模式外,还支持五种低功耗模式(Low-power mode),分别为LPM0.LPM1.LPM2.LPM3.LPM4,由状态寄存器中的CPUOFF.OSCOFF.SCG0.SCG1比特位设置. 六种模式对应的时钟状态为: 其中,LPM3.LPM4比较常用,对低功耗的贡献也最大.LPM3模式关闭了DCO.CPU,从而MCLK.SMCLK无法工作,ACLK(来源为LFXT1或VLO)可以正常工作并用于系统的定时唤醒.LPM4模式下所有内部时钟信号都关闭,系统只

MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD

一.CA+构造 MSP430G2553带有一个比较器Comparator_A+(CA+),其构造框图如下图所示. 二.输入 & 输出 如上图所示,比较器有一个同向输入端(V+)和一个反向输入端(V-).通过软件设置,V+端可以连接到CA0~CA2三个外部管脚之一,或者三个内部电压基准之一:V-端可以连接到CA1~CA7七个外部管脚之一,或者三个内部电压基准之一.内部电压基准可以是0.5*Vcc.0.25*Vcc,或者内部一个二极管的导通电压(约0.55V). 输出信号可以连接至Timer的外部时

一个基于ATMEGA128的直流电机抱死程序(转)

源:一个基于ATMEGA128的直流电机抱死程序 先说一下我的硬件情况:一块ATMEGA128实验板:一个带编码器的80:1的变速电机,编码器的输出端连接到单片机的PD4和PD5引脚:一块电机驱动电路,该电路的输入为:24v电源.两路pwm信号输入,输出即为电机的正负极,要用该电路来驱动电机,则必须让两路pwm输入信号的一路占空比为0,另一路不为0,相当于让电机的一极接地,另一极接pwm,通过控制两路pwm的占空比来控制电机的转速和转动方向.pwm信号的输入端连接到单片机的PD6和PD7引脚.

串口波特率选择

波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second).MCS-51串行端口在四种工作模式下有不同的波特率计算方法.其中,模式0和模式2波特率计算很简单:模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择. 在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式).在此模式下波特率计算公式为: 波特率=(1+SMOD)*晶振频率/(384*(256-TH1)) 其中,SMOD--寄存器P

做一个计时器示例 在页面上有一个文本框和一个普通按钮 在状态栏上显示,单击按钮,开始计时的提示信息 单击按钮时,在文本框显示计数的过程,同时要求按钮上的字,显示为“单击暂停” 此时单击按钮,暂停计时,同时按钮上的字显示为“继续计时”,要求这两种状态来回切换,来完成计数器的功能

2015-04-12 20:15:25 方法一; <script> var s=0; var timeout=0; status='点击按钮,开始计时'; function count(){ s++; time1.value=s; timeout=setTimeout('count();',100); } function onChange(){ if(timeout==0){ count(); time2.value='暂停计时'; status='点击按钮,暂停计时'; }else{ cl

(10)MSP430F5529 定时器Timer_A

6.4  捕获比较模块 这是在以上介绍的基础上正式讲TA的重要功能. 先看一个寄存器TACCTL0-TACCTL6:(TA中最复杂的寄存器,用到的时候查表啦) CMx:捕获模式设定    00 不捕获  01 上升沿捕获  10 下降沿捕获  11上升和下降沿都捕获 CCISx:捕获源的选择           00 CCIxA  01 CCIxB  10 GND  11 VCC SCS:同步捕获源,设定是否与时钟同步   0 异步捕获  1 同步捕获 SCCI:选择的CCI输入信号由EQUx信

(9)MSP430F5529 定时器Timer_A

MSP430F5529共有两类共4个定时器,分别是Timer_A定时器3个和Timer_B定时器1个,按照每个寄存器配备的捕获/比较器的个数分别命名为Timer0_A(内有5个捕获比较器).Timer1_A(3个).Timer2_A(3个).Timer0_B(7个).  这一章,我们讲定时器Timer0_A.(A类的都一样) 注意:下面所提到的所有寄存器,在TA后面插入0或1或2就分别表示Timer0_A.Timer1_A.Timer2_A(我这里省略了数字) 6.1 简介一下         

Chapter6 定时器Timer_A

1.概述 Timer_A是拥有4种工作模式的16位定时/计数器,还具有最多7个可配置的捕获比较功能的寄存器. 常用于实现捕获.比较.PWM(Pulse Width Modulation)输出.内部计时等功能. Timer_A具有多种中断,当计数溢出或在捕获比较时请求中断. 2.定时/计数的4类模式 停止.升模式.满计数模式.升降模式四种. 注意TAIFG和CCIFG两个中断标志位置位的条件.