新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > MSP430定时器详解

MSP430定时器详解

作者: 时间:2013-01-16 来源:网络 收藏

//例程结束

-----------------------------------

Timer_A

注:msp430有两个16位Timer_A和Timer_B.二者基本相同。

主要有TACTL,TAR,CCTL0,CCR0,CCTL1,CCR1,CCTL2,CCR2,TAIV几个寄存器。其中最主要的是TACTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止,中断的申请等。

A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比较/捕获寄存器1、比较/捕获寄存器2。计数器是主体它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢出中断,也就是当计数由0xffff到0时会产生一个中断。那怎么实现定时功能呢?这就要靠三个比较/捕获寄存器了以后用CCRx表示。CCR0比较特殊,通过他可以改变计数器的最大计数值,也就是当计数器计数到CCR0的值时自动会将计数器清零。但这需要设置相应的工作模式,模式列表如下:

0——停止模式,用于定时器的暂停

1——增计数模式,计数器计数到CCR0,再清零计数

2——连续计数模式,计数器增计数到0xffff,再清零计数

3——增/减计数模式,增计数到CCR0,再减计数到0

当计数器计数到CCR0时,CCR0单元会产生一个中断。同样当计数器计数到CCR1和CCR2时,两个单元也都会个产生一个中断。这样我们可以通过定时器A得到三个定时时间了。

看程序中的定时器初始化模块。CCTLx是相应比较/捕获寄存器的控制寄存器。它可对比较/捕获寄存器进行设置,在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到CCIE这个控制字,就是开启相应比较器的中断。CCRx就是相应比较器的值。

下面介绍几个Timer_A的重要寄存器:

TACTL寄存器:

SSEL_1 SSEL_0 是时钟源的选择

0——TACLK,使用外部引脚信号作为输入

1——ACLK,辅助时钟

2——SMCLK,子系统主时钟

3——INCLK,外部输入时钟

对TACTL进行模式设置的同时也开启了定时器,要停止只需把MC_0赋值给TACTL就可以。

ID1 ID0 是时钟源的分频选择

00——不分频

01——2分频

10——4分频

11——8分频

MC1 MC0 是模式选择

0——停止模式,用于定时器的暂停

1——增计数模式,计数器计数到CCR0,再清零计数

2——连续计数模式,计数器增计数到0xffff,再清零计数

3——增/减计数模式,增计数到CCR0,再减计数到0

CLR——————定时器清楚位

TAIE——————定时器中断允许位

TAIFG——————定时器溢出标志位

TAR寄存器:

16位计数器,是执行计数的单元,是计数器的主体。我的理解:即存储你的计数值,0——>CCR0

CCTLx寄存器:

捕获比较控制寄存器:

CAPTMOD1~0:选择捕获模式

0 0————禁止捕获模式

0 1————上升沿捕获

1 0————下降沿捕获

1 1————上升沿与下降沿都捕获

CCIS1~0: 捕获事件输入源

0 0————选择CCIxA

0 1————选择CCIxB

1 0————选择GND

1 1————选择Vcc

SCS——选择捕获信号与定时器时钟同步、异步关系

0:异步捕获

1:同步捕获(实际中经常使用同步模式,捕获总是有效的)

SCCIx——比较相等信号EQUx将选中的捕获/比较输入信号CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。



评论


相关推荐

技术专区

关闭