MSP430学习笔记-定时器A

16 位定时器 A 模块寄存器

TACTL TIMER_A 控制寄存器

15-109-8
UnusedTASSELx
7-65-43210
IDxMCxUnusedTACLRTAIETAIFG

全部关于定时器及其操作的控制位都包含在定时器控制寄存器 TACTL 中。POR 信号后 TACTL 的所有位
都自动复位,但在 PUC 信号后不受影响。TACTL 各位的定义如下:
TASSELx:选择定时器进入输入分频器的时钟源
0: TACLK 特定的外部引脚时钟
1: ACLK 辅助时钟
2: MCLK 系统时钟
3: INCLK 器件特有时钟
IDx:输入分频选择
0: 不分频
1: 2 分频
2: 4 分频
3: 8 分频
MCx:计数模式控制位
0: 停止模式
1: 增计数模式
2: 连续计数模式
3: 增/减计数模式
TACLR:定时器清除位
POR 或 CLR 置位时定时器和输入分频器复位。CLR 由硬件自动复位,其读出始终为 0。定时器再下
一个有效输入沿开始工作。如果不是被清除模式控制位暂停,则定时器以增计数模式开始工作。
0: 无操作
1: 清除 TAR,时钟分频,计数模式的设置。清除设置后自动清零(硬件复位)
TAIE:定时器中断允许位
0: 禁止定时器溢出中断
1: 允许定时器溢出中断
TAIFG:定时器溢出标志位
增计数模式时:当定时器由 CCR0 计数到 0,TAIFG 置位;
连续计数模式时:当定时器由 0FFFFH 计数到 0 时,TAIFG 置位
增/减计数模式时:当定时器由 CCR0 减计数到 0 时,TAIFG 置位。
0: 没有 TA 中断请求
1: 有 TA 中断请求

TAR TIMER_A 计数器

15-8
TARx
7-0
TARx

该单元就是执行计数的单元,时计数器的主体,其内容可读可写。

TACCTLx TIMER_A 捕获/比较控制寄存器 x

15-1413-12111098
CMxCCISxSCSSCCIUnusedCAP
7-543210
OUTMODxCCIECCIOUTCOVCCIFG

TIMER_A 有多个捕获/比较模块,每个模块都有自己的控制字 TACCTLx,这里 x 为捕获/比较模块序号。
该寄存器再 POR 信号后全部复位,但在 PUC 信号后不受影响。该寄存器中各位的定义如下:
CMx:选择捕获模式
0: 禁止捕获模式
1: 上升沿捕获
2: 下降沿捕获
3: 上升沿和下降沿都捕获
CCISx:在捕获模式中用来定义提供捕获事件的输入源
0: 选择 CCIxA
1: 选择 CCIxB
2: 选择 GND
3: 选择 Vcc
SCS:选择捕获信号与定时时钟同步/异步关系
异步捕获模式允许在请求时立即将 CCIFG 置位和捕获定时器值,适用于捕获信号的周期远大于定时
器周期的情况。但是,如果定时器时钟和捕获信号发生时间竞争,则捕获寄存器的值可能出错。
0: 异步捕获
1: 同步捕获
SCCI:同步比较/捕获输入
比较相等信号 EQU 信号将选中的捕获/比较输入信号 CCI 进行锁存,然后可由 SCCI 读出。
CAP:选择捕获模式/比较模式
如果通过捕获/比较寄存器 TACCTLx 中的 CAP 使工作模式从比较模式变为捕获模式,那么不应同时
进行捕获,否则,在捕获/比较寄存器中的值使不可预料的。
推荐的指令顺序如下:(1)修改控制寄存器,由比较模式切换到捕获模式。(2)捕获
0: 比较模式
1: 捕获模式
OUTMODx:选择输出模式
0: 输出
1: 置位
2: PWM 翻转/复位
3: 置位/复位
4: 翻转
5: 复位
6: PWM 翻转/置位
7: PWM 复位/置位
CCIE:捕获/比较模块中断允许位
0: 禁止中断(TACCRx)
1: 允许中断(TACCRx)
CCI:捕获/比较模块的输入信号
捕获模式:由 CCIS0 和 CCIS1 选择的输入信号可通过该位读出
比较模式:CCI 复位
OUT:输出信号
如果 OUTMODx 选择输出模式 0(输出),则该位对应于输入状态。
0: 输出低电平
1: 输出高电平
COV:捕获溢出标志
当 CAP=0 时,选择比较模式.捕获信号发生复位。没有使 COV 置位的捕获事件。
当 CAP=1 时,选择捕获模式。如果捕获寄存器的值被读出前在此发生捕获事件,则 COV 置位。程
序可检测 COV 来判断原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位,须用软件
复位。
0: 没有捕获溢出
1: 发生捕获溢出
CCIFG:捕获比较中断标志
捕获模式:寄存器 CCRx 捕获了定时器 TAR 值时置位。
比较模式:定时器 TAR 值等于寄存器 CCRx 值时置位。
0: 没有中断请求(TACCRx)
1: 有中断请求(TACCRx)

TACCRx TIMER_A 捕获/比较寄存器

15-8
TACCRx
7-0
TACCRx

在捕获/比较模块中,可读可写。
在捕获方式,当满足捕获条件,硬件自动将计数器 TAR 数据写入该寄存器。如果测量某窄脉冲(高电平)
脉冲长度,可定义上升沿和下降沿都捕获。在上升沿时,捕获一个定时器数据,这个数据在捕获寄存器中
读出;再等待下降沿到了,在下降沿时又捕获一个定时器数据;那么两次捕获的定时器数据就时窄脉冲的
高电平宽度。
其中 CCR0 经常用作周期寄存器,其他 CCRx 相同。

TAIV TIMER_A 中断向量寄存器

15141312111098
00000000
76543-10
0000TAIVx0

TIMER_A 共有 4 种技术模式,可以根据需要,灵活选用:

  • 停止模式
  • 增计数模式
  • 连续技术模式
  • 增/减计数1

16 位定时器 A 模块头文件定义

/************************************************************ 
* Timer A3 
***********************************************************/ 
#define TAIV_ (0x012E) /* Timer A Interrupt Vector Word */
READ_ONLY DEFW( TAIV , TAIV_) 
#define TACTL_ (0x0160) /* Timer A Control */
DEFW( TACTL , TACTL_) 
#define TACCTL0_ (0x0162) /* Timer A Capture/Compare Control 0 */
DEFW( TACCTL0 , TACCTL0_) 
#define TACCTL1_ (0x0164) /* Timer A Capture/Compare Control 1 */
DEFW( TACCTL1 , TACCTL1_) 
#define TACCTL2_ (0x0166) /* Timer A Capture/Compare Control 2 */
DEFW( TACCTL2 , TACCTL2_) 
#define TAR_ (0x0170) /* Timer A */
DEFW( TAR , TAR_) 
#define TACCR0_ (0x0172) /* Timer A Capture/Compare 0 */
DEFW( TACCR0 , TACCR0_) 
#define TACCR1_ (0x0174) /* Timer A Capture/Compare 1 */
DEFW( TACCR1 , TACCR1_) 
#define TACCR2_ (0x0176) /* Timer A Capture/Compare 2 */
DEFW( TACCR2 , TACCR2_) 
/* Alternate register names */ 
#define CCTL0 TACCTL0 /* Timer A Capture/Compare Control 0 */
#define CCTL1 TACCTL1 /* Timer A Capture/Compare Control 1 */
#define CCTL2 TACCTL2 /* Timer A Capture/Compare Control 2 */
#define CCR0 TACCR0 /* Timer A Capture/Compare 0 */
#define CCR1 TACCR1 /* Timer A Capture/Compare 1 */
#define CCR2 TACCR2 /* Timer A Capture/Compare 2 */
#define CCTL0_ TACCTL0_ /* Timer A Capture/Compare Control 0 */
#define CCTL1_ TACCTL1_ /* Timer A Capture/Compare Control 1 */
#define CCTL2_ TACCTL2_ /* Timer A Capture/Compare Control 2 */
#define CCR0_ TACCR0_ /* Timer A Capture/Compare 0 */
#define CCR1_ TACCR1_ /* Timer A Capture/Compare 1 */
#define CCR2_ TACCR2_ /* Timer A Capture/Compare 2 */
#define TASSEL2 (0x0400) /* unused */ /* to distinguish from USART SSELx */
#define TASSEL1 (0x0200) /* Timer A clock source select 0 */
#define TASSEL0 (0x0100) /* Timer A clock source select 1 */
#define ID1 (0x0080) /* Timer A clock input devider 1 */
#define ID0 (0x0040) /* Timer A clock input devider 0 */
#define MC1 (0x0020) /* Timer A mode control 1 */
#define MC0 (0x0010) /* Timer A mode control 0 */
#define TACLR (0x0004) /* Timer A counter clear */
#define TAIE (0x0002) /* Timer A counter interrupt enable */
#define TAIFG (0x0001) /* Timer A counter interrupt flag */
#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */
#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */
#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */
#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */
#define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */
#define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */
#define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */
#define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */
#define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 - TACLK */
#define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */
#define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */
#define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */
#define CM1 (0x8000) /* Capture mode 1 */
#define CM0 (0x4000) /* Capture mode 0 */
#define CCIS1 (0x2000) /* Capture input select 1 */
65
#define CCIS0 (0x1000) /* Capture input select 0 */
#define SCS (0x0800) /* Capture sychronize */
#define SCCI (0x0400) /* Latched capture signal (read) */
#define CAP (0x0100) /* Capture mode: 1 /Compare mode : 0 */
#define OUTMOD2 (0x0080) /* Output mode 2 */
#define OUTMOD1 (0x0040) /* Output mode 1 */
#define OUTMOD0 (0x0020) /* Output mode 0 */
#define CCIE (0x0010) /* Capture/compare interrupt enable */
#define CCI (0x0008) /* Capture input signal (read) */
#define OUT (0x0004) /* PWM Output signal if output mode 0 */
#define COV (0x0002) /* Capture/compare overflow flag */
#define CCIFG (0x0001) /* Capture/compare interrupt flag */
#define OUTMOD_0 (0*0x20u) /* PWM output mode: 0 - output only */
#define OUTMOD_1 (1*0x20u) /* PWM output mode: 1 - set */
#define OUTMOD_2 (2*0x20u) /* PWM output mode: 2 - PWM toggle/reset */
#define OUTMOD_3 (3*0x20u) /* PWM output mode: 3 - PWM set/reset */
#define OUTMOD_4 (4*0x20u) /* PWM output mode: 4 - toggle */
#define OUTMOD_5 (5*0x20u) /* PWM output mode: 5 - Reset */
#define OUTMOD_6 (6*0x20u) /* PWM output mode: 6 - PWM toggle/set */
#define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/set */
#define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */
#define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */
#define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */
#define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */
#define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */
#define CM_1 (1*0x4000u) /* Capture mode: 1 - pos. edge */
#define CM_2 (2*0x4000u) /* Capture mode: 1 - neg. edge */
#define CM_3 (3*0x4000u) /* Capture mode: 1 - both edges */
        ——《MSP430 系列十六位超低功耗单片机 教学实验系统实验教程》
            赵建 谢楷 沈雪亮 张宝 梁海军 杨乐林 庹明光 徐常志 编写

  1. 定时器 TAR 的值从 TACCR0-1 计数到 TACCR0 时,中断标志 CCIFG0 置位;
    当定时器从 1 减计数到 0 时,中断标志 TAIFG 置位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值