历史上的今天
今天是:2025年07月11日(星期五)
2018年07月11日 | 单片机MSP430 - 定时器Timer_A
2018-07-11 来源:eefocus
一、定时器Timer_A 介绍
Timer_A是一个具有多路捕获/比较寄存器的16位定时/计数器,主要有TAxCTL,TAxR,TAxCCTLn,TAxIV,TAxEX0 几个寄存器。其中最主要的是TAxCTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止,中断的申请等。中断可以来自定时器溢出或者任意的捕获/比较寄存器Timer_A的特征包括:
具有4种工作模式的异步定时/计数器
可选择配置的时钟源
可配置的PWM输出功能
异步输入和同步锁存
二、Timer_A 操作
1. 16位定时/计数器
16位定时/计数寄存器TAxR,在每个时钟信号的上升沿做增一计数或减一计数。TAxR可以通过置位TACLR清除。Timer_A机构图如下:
2. 时钟源的选择和分频
定时器时钟 TACLK 可以选择来自 ACLK、SMCLK 或者外部的TAxCLK。时钟源由 TASSELx 位来选择。选定的时钟源可以直接到达定时器,或者通过 IDx 位经过2、4、8分频后到达定时器,选定的时钟源可以通过 IDEXx 进行2、3、4、5、6、7或者8分频。当 TACLR 置位时,定时器时钟源分频器被复位。
3. 启动定时器
在 MC > {0} 同时时钟源被激活的情况下,定时器开始计数
在定时器工作在增计数模式或者增/减计数模式时,对 TAxCCR0 写 0 可以停止定时器。定时器可以通过对 TAxCCR0 写入一个非零值来重新启动计数。在这种情况下,定时器从零开始计数。
4. 定时器模式控制
MCx | 工作模式 | 描述 |
00 | 停止模式 | 定时器停止 |
01 | 增计数模式 | 定时器重复地从0计数到TAxCCR0 |
10 | 连续计数模式 | 定时器重复地从0计数到0FFFFh |
11 | 增/减计数模式 | 定时器重复地从0计数到TAxCCR0然后减计数到0 |
三、Timer_A 寄存器
1. Timer_A 控制寄存器(TAxCTL)
15~10 | 9~8 | 7~6 | 5~4 | 3 | 2 | 1 | 0 |
未用 | TASSEL | ID | MC | 未用 | TACLR | TAIE | TAIFG |
保留 | 位15~10 | 未用 |
TASSELx | 位9~8 | Timer_A时钟源选择 00 TAxCLK 10 SMCLK 01 ACLK 11 TAxCLK |
IDx | 位7~6 | 输入分配器。这些位和 IDEXx 位一起选择输入时钟的分频值 00 /1 01 /2 10 /4 11 /8 |
MCx | 位5~4 | MCx 位5~4 模式控制。当Timer_A不用于节电模式时,设置 MCx = 00h 00 停止模式 01 增计数模式 10 连续计数模式 11 增/减计数模式 |
TACLR | 位2 | Timer_A 清除位。置位该位将复位 TAxR,TACLK 分频和计数方向。该位会自动复位,且读出的值通常总为0 |
TAIE | 位1 | Timer_A 中断允许位。该位使能TAIFG中断请求。(0中断禁止1 中断使能) |
TAIFG | 位0 | Timer_A 中断标志位(0 无中断请求1 有中断请求) |
2. Timer_A 计数器(TAxR)
15~0 |
TAxR |
TAxR位15~0Timer_A 寄存器。TAxR寄存器是 Timer_A 的计数器。
3. 捕获/比较控制寄存器(TAxCCTLn)
15~14 | 13~12 | 11 | 10 | 9 | 8 | 7~5 | 4 | 3 | 2 | 1 | 0 |
CM | CCIS | SCS | SCCI | 未用 | CAP | OUTMOD | CCIE | CCI | OUT | COV | CCIFG |
CM | 位15~14 | 捕获模式 00 禁止捕获模式 01 上升沿捕获 10 下降沿捕获 11 上升沿与下降沿都捕获 |
CCIS | 位13~12 | 捕获/比较输入选择 00 CCIxA 01 CCIxB 10 GND 11 VCC |
SCS | 位11 | 同步捕获源,用来同步定时器时钟和捕获信号(0 异步捕获 1 同步捕获) |
SCCI | 位10 | 同步/捕获比较输入 |
未用 | 位9 | 未用位 |
CAP | 位8 | 捕获模式(0 比较模式 1 捕获模式) |
OUTMOD | 位7~5 | 输出模式 000 OUT位的值 001 置位 010 翻转/复位 011 置位/复位 100 翻转 101 复位 110 翻转/复位 111 复位/置位 |
CCIE | 位4 | 捕获/比较中断使能,该位使能相应的CCIFG标志的中断请求(0 中断禁止 1 中断使能) |
CCI | 位3 | 捕获比较输入。所选择的输入信号可以通过该位读取 |
OUT | 位2 | 输出信号,对于模式0,该位直接控制输出的状态(0 输出低电平 1 输出高电平) |
COV | 位1 | 捕获溢出位。该位表示一个捕获溢出发生。COV必须由软件复位(0 没有捕获溢出发 1 有捕获溢出发生) |
CCIFG | 位0 | 捕获比较中断标志位(0 没有中断挂起 1 有中断挂起) |
4. Timer_A 中断向量寄存器(TAxIV)
15~4 | 3~1 | 0 |
0 | TAIV | 0 |
TAIV 位15~0 Timer_A中断向量值
TAIV内容 | 中断源 | 中断标志 | 中断优先级 |
00h | 无中断源 | ||
02h | 捕获/比较1 | TAxCCR1 CCIFG | 最高 |
04h | 捕获/比较2 | TAxCCR2 CCIFG | |
06h | 捕获/比较3 | TAxCCR3 CCIFG | |
08h | 捕获/比较4 | TAxCCR4 CCIFG | |
0Ah | 捕获/比较5 | TAxCCR5 CCIFG | |
0Ch | 捕获/比较6 | TAxCCR6 CCIFG | |
0Eh | 定时器溢出 | TAxCTL TAIFG | 最低 |
史海拾趣
|
怎样计算正弦波?把正弦波的采样坐标点放到一个数组里,然后如何实现正弦波的输出? 下面有一个公式望各位大侠给菜鸟指导一下,谢谢! y=sin(3.1415*2*i/256)*2048+2048(注:256为数组的大小) 请问2048是什么意思?为什么要乘上它?麻烦给菜鸟解 ...… 查看全部问答> |
|
//第一行 显示‘a’ 第二行显示“welcome” #include void initial_lcd(void); //初始化 void write_code(unsigned char m); //写代码 void write_char(unsigned char m); ...… 查看全部问答> |
|
板子上其中两路已经用于触摸屏,我想用s3c2410有自带的其它6路AD转换来采集,要怎么做?请详细说明下,谢谢. 之前内核已经加载了触摸屏的驱动,所以在动态加载AD驱动时就话出错(因为这两个是占用同一个中断号),网上查询就说用轮询,请哪位大侠详细说明 ...… 查看全部问答> |
|
如下: linking... *** ERROR L110: CANNOT FIND SEGMENT SEGMENT: ?CO?DEVDS18B20 Program Size: data=51.0 xdata=5555 code=827665 Target not created 已经将.h文件包含进link文件了,即使把.c文件和.h文件中的所有代码删除 ...… 查看全部问答> |
|
我现在在做一个PDA的驱动,使用的是WinCE操作系统,要判断电池的剩余电量。 电池3600毫安,充满电是4.2V,PDA大概在3.5V时就不能正常工作了。 现在PDA本身可以检测到当前电压,有没有什么算法能从电压判断出电量的?希望大家指点。… 查看全部问答> |
|
不知道各位使用带有ROM LM3S系列单片机的坛友们有没有碰到这个问题,flash能下载,但是验证失败。折腾了一宿,终于将这个问题解决。 将过程写下来,让以后的同学们少走弯路。 在调新的LM3S9B95开发板的时候,经常碰到的一个问题是flash编程后验证 ...… 查看全部问答> |
|
module control(clk,rst,empty,opcode,da,in_reg,rd,wr,fetch,alu_ena,ir_ena,da_ena,ld_da_x,ld_ir_ptr,load_ptr, load_pc,inc_pc,inc_ptr,dec_ptr,datactl_ena,ld_a,ld_b,hal ...… 查看全部问答> |




