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

一、介绍

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 三种,如下图所示。

- 将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模式由TAxCCTLx寄存器的CAP=0来使能。

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

四、Capture Block

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

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

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

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

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

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

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

五、一个简单例子

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

 #include "io430.h"

 #define LED1 BIT0 //red led on G2 Launchpad

 //global variables
char i = ; void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD; P1OUT = ;
P1DIR |= LED1; // set DCO freq = 1MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; // BCM+ initial state:
// DCOCLK -> MCLK
// DCOCLK -> SMCLK
// comprare/capture mode -> compare mode TA0CCR0 = - ;
TA0CCTL0 = CCIE; // enable compare interrupt
TA0CTL = TASSEL_2 + ID_3 + MC_1 + TACLR;
// input clock: SMCLK/8 -> 125kHz;
// timer overflow freq: 125k/(TA0CCR0+1) -> 2Hz
// clear and start the timer, up mode __enable_interrupt(); while()
{ } } //interrupt service routines
#pragma vector = TIMER0_A0_VECTOR
__interrupt void CCR0_ISR(void)
{
if(++i == ) // interval: 1/2 * 10 = 5s, freq: 0.2Hz
{
// no flag clearing necessary; CCR0 has only one source,
// so it's automatic.
P1OUT ^= LED1; // the sqaure wave freq: 0.2Hz/2 -> 0.1Hz
i = ;
}
}

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

  1. MSP430 G2553 Launchpad实现电容测量

    一.基本原理 对于Source-Free RC电路,其电容放电的特性可以描述为: 其中V0是电容的初始电压,t是放电时间,R是串接的电阻阻值,C是电容值,v(t)是t时刻电容上的电压.因此,若已知V0 ...

  2. MSP430 G2553 基本时钟模块+ (Basic Clock Module+)

    一.时钟源 MSP430的Basic Clock Module+支持的时钟源有: DCOCLK:内部数字控制振荡器,Internal digitally contrlled oscillator.所有 ...

  3. MSP430 G2553 低功耗模式LPMx

    MSP430除了正常运行时的active模式外,还支持五种低功耗模式(Low-power mode),分别为LPM0.LPM1.LPM2.LPM3.LPM4,由状态寄存器中的CPUOFF.OSCOFF ...

  4. MSP430 G2553 Timer 中断总结

    目前总共用到了四个中断向量,我觉得已经把G2553的所有定时器中断都用到了. 定时器有两个,TA0与TA1,每个定时器又有两个中断向量 1,CCR0到达时的中断,在计数模式时候很有用,平时定时器的基本 ...

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

    一.CA+构造 MSP430G2553带有一个比较器Comparator_A+(CA+),其构造框图如下图所示. 二.输入 & 输出 如上图所示,比较器有一个同向输入端(V+)和一个反向输入端 ...

  6. MSP430 G2553 LaunchPad GPIO中断

    P1.P2端口上的每个管脚都支持外部中断.P1端口的所有管脚都对应同一个中断向量(Interrupt Vector),类似的,P2端口的所有管脚都对应另一个中断向量:通过PxIFG寄存器来判断中断来源 ...

  7. MSP430 G2553 LaunchPad设置GPIO

    一. 背景知识:逻辑运算符的使用 当程序初始化时,对于复位状态有不确定性的寄存器(如PxOUT),建议采用直接赋值:其他情况下最好使用逻辑运算符修改寄存器. 直接赋值 REGISTER = 0b111 ...

  8. MSP430 G2553 寄存器列表与引脚功能

    USCI_B0 USCI_B0 发送缓冲器UCB0TXBUF 06Fh USCI_B0 接收缓冲器UCB0RXBUF 06Eh USCI_B0 状态UCB0STAT 06Dh USCI B0 I2C ...

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

    源:一个基于ATMEGA128的直流电机抱死程序 先说一下我的硬件情况:一块ATMEGA128实验板:一个带编码器的80:1的变速电机,编码器的输出端连接到单片机的PD4和PD5引脚:一块电机驱动电路 ...

随机推荐

  1. PHP调用OCX控件的具体方法

    需要设置php.ini文件,找到这行com.allow_dcom=true,把com组件支持启用 使用PHP调用OCX控件,本不是个难题,但现实中采用flash回避的方法更通用.真正使用ocx的不多, ...

  2. php 数字格式化

    php 数字格式化 1.位数不足前面补0 <?php for($i=1; $i<=17 ;$i++){ $var = sprintf("0%3d",$i); echo ...

  3. --- no python application found, check your startup logs for errors

    --- no python application found, check your startup logs for errors 碰到这个问题,请留意下系统执行的python版本和自己的djan ...

  4. windows下使用 ApiGen 生成php项目的开发文档

    之前使用 PHPDocument 生成过开发文档,但是界面看着不爽,遂尝试了 ApiGen 生成,不得不说界面看着舒服多了,下面说说安装和使用的方法. ApiGen官网: http://www.api ...

  5. AngularJS学习笔记(1)——MVC模式的清单列表效果

    MVC模式的清单列表效果 使用WebStorm新建todo.html并链入bootstrap.css.bootstrap-theme.css.angular.js.要链入的相关css和js文件预先准备 ...

  6. 「小程序JAVA实战」小程序视频封面处理(48)

    转自:https://idig8.com/2018/09/16/xiaochengxujavashizhanxiaochengxushipinfengmianchuli47/ 截图这块,在微信小程序工 ...

  7. MS SQL 流程控制语句

    Declare   myCursor   cursor   For     Select   *   from   table1         open   myCursor         Fet ...

  8. 常见反编译产生错误 k__BackingField 解决办法

    常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错       private bool <EnableRuntimeHandler> ...

  9. How to Integrate JCaptcha in Spring Security

    The repository for JCaptcha is this one: <repository> <id>sourceforge-releases</id> ...

  10. Git----远程仓库之添加远程库02

    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub上创建一个Git库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...