历史上的今天
今天是:2024年10月16日(星期三)
2019年10月16日 | MSP430学习笔记-定时器A
2019-10-16 来源:eefocus
16 位定时器 A 模块寄存器
TACTL TIMER_A 控制寄存器
| 15-10 | 9-8 |
|---|---|
| Unused | TASSELx |
| 7-6 | 5-4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|
| IDx | MCx | Unused | TACLR | TAIE | TAIFG |
全部关于定时器及其操作的控制位都包含在定时器控制寄存器 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-14 | 13-12 | 11 | 10 | 9 | 8 |
|---|---|---|---|---|---|
| CMx | CCISx | SCS | SCCI | Unused | CAP |
| 7-5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|
| OUTMODx | CCIE | CCI | OUT | COV | CCIFG |
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)
116 位定时器 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 */
史海拾趣
|
ThinkPad笔记本一直备受企业和个人用户的青睐,除了其良好的稳定性、耐用性和舒适性之外,一些个性化的硬件设计及与之相配套的软件亦是其中一个重要因素。下面,就让我们通过ThinkPad电源管理软件来感受一下“黑砖头”中蕴藏的个性化风格,让你能够 ...… 查看全部问答> |
|
较多的PCB工程师,他们经常画电脑主板,对Allegro等优秀的工具非常的熟练,但是,非常可惜的是,他们居然很少知道如何进行阻抗控制,如何使用工具进行信号完整性分析.如何使用IBIS模型我觉得真正的PCB高手应该还是信号完整性专家,而不仅仅停留在连连线,过 ...… 查看全部问答> |
|
printf(\"input a 4 hexadecimal:\\n\"); scanf(\"%.2X %.2X %.2X %.2X\",&bb[0],&bb[1],&bb[2],&bb[3]); printf(\"\\n%.2X %.2X %.2X %.2X\\n\",& ...… 查看全部问答> |
|
我只知道Fn+Fx会生成一个Scancode,但是如果ScanCode在不同键盘下是同定义的,如何才能知道按下Fn+Fx是发送了哪个ScanCode? 环境:XP Sp2/Vista Sp1 English ,Visual Studio 2008 机器:Thinkpad 备注:查过很多资料,用Hook 的方式是抓不到Message(比 ...… 查看全部问答> |
|
函数信号发生器设计目的 为进一步掌握电路的基本理论及实验调试技术,熟练应用所学的电路设计原理知识,根据各种电子元件设计一个能够可以产生多种波形的函数信号发生器。 函数信号发生器设计原理框图如下所示: 函 ...… 查看全部问答> |
|
公司的板子是,485 通讯,使用stm32f103re,USART1通讯,485使用端口GPIOA PIN11,USART_RX对应GPIOA PIN10,USART_TX 对应GPIOA PIN9 不知为什么,我现在只是做了一个要放数据的程序,可是就是无法下发数据。可以保证连线等硬件没有任何问题。& ...… 查看全部问答> |




