查看: 1369|回复: 0
打印 上一主题 下一主题

MSP430之定时器A的使用

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-31 15:35:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在前面的章节中,提到了看门狗定时器的使用,实际上,MSP430单片机是拥有多个定时器的,根据具体型号的不同,还分别具有基本定时器、定时器A、定时器B。
(1)看门狗定时器,如前所述,它是个十六位的定时器,既可以作为看门狗使用,也可以作为定时器使用。一般各个型号的MSP单片机都有,主要用来处理程序跑飞的问题。

(2)基本定时器,一般出现在msp430x3和msp430x4系列处理器里面。通过对SMCLK或者ACLK进行分频,向其他外围模块提供低频控制信号。还可以用于产生周期性中断,来更新lcd或者启动下一个新的测量周期。该基本定时器可以作为一个16位的定时器,也可以分成两个8位的定时器。

(3)16位定时器A,一般FLASH型430都有TIMER_A,包含多路比较捕获通道。具体可用于:产生定时脉冲或者PWM信号,虽然没有自动重载功能,但是也没有软件误差(这是个关键问题,需要认真考虑);捕获外部事件的发生时间;用于串行通信(怎么用?)。

(4)定时器B,在TIMER_A的基础上,增加了比较锁存器功能。

定时器A的使用:

定时器A有5个16位的寄存器

1、 TACTL         控制寄存器

bit15-10      bit9       bit8     bit7   bit6     bit5      bit4   bit3    bit2      bit1     bit0
   --            SSEL1 SSEL0 ID1    ID0    MC1    MC0    --     CLR    TAIE   TAIFG

SSEL1、SSEL0选择进入定时器分频器的时钟源,
SSEL1 SSEL0      输入时钟源              说明
0             0              TACLK           用特定的外部引脚信号
0              1               ACLK            辅助时钟
1            0               MCLK            系统时钟
1             1               INCLK           外部输入时钟

ID1、ID0输入分频系数
ID1          ID0      分频系数
0             0          不分频
0             1          1/2分频
1             0          1/4分频
1             1          1/8分频

MC1、MC0计数模式控制位
MC1      MC0      模式
0             0          停止模式
0             1          增计数模式
1             0          减计数模式
1             1          增/减计数模式

CLR——定时器清除。当该位为1时,定时器复位。

TAIE——定时器中断允许位。
0:禁止定时器溢出中断;
1:允许定时器溢出中断。

TAIFG——定时器溢出标志位。
增计数模式:当定时器由CCR0计数到0时,TAIFG置位;
连续计数模式:当定时器由0FFFFH计数到0时,TAIFG置位;
增/减计数模式:当定时器由CCR0减计数到0时,TAIFG置位。

2、TAR 16位计数器

3、CCTLx 捕捉/比较控制寄存器,各位定义:

bit15-14    bit13-12   bit11   bit10   bit9   bit8    bit7-5   bit4   bit3   bit2   bit1   bit0
CAPTMOD1~0 CCIS1~0    SCS     SCCIx    --     CAP    OUTMODx CCIEx CCIx   OUT    COV    CCIFGx

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读出。

CAP——选择捕获模式还是比较模式。
0:比较模式      1:捕获模式

OUTMODx: 选择输出模式
0      0        0 : 输出
0      0        1 : 置位
0      1        0 : PWM翻转/复位
0      1        1 : PWM置位/复位
1      0        0 : 翻转
1      0        1 : 复位
1      1        0 : PWM翻转/置位
1      1        1 : PWM复位/置位

CCIEx——捕获/比较模块中断允许位
0:禁止中断     1:允许中断

CCIx——捕获/比较模块的输入信号
捕获模式:由CCIS0和CCIS1选择的输入信号可通过该位读出
比较模式:CCIx复位

OUT——输出信号(如果OUTMODx选择输出模式0,则该位对应于输入状态)
0:输出低电平   1:输出高电平

COV——捕获溢出标志
0:没有捕获溢出 1:发生捕获溢出

当CAP=0时,选择比较模式。捕获信号发生复位。没有使COV置位的捕获事件
当CAP=1时,选择捕获模式。如果捕获寄存器的值被读出前再次发生捕获事件,则COV置位。程序检测COV来判断原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位,须用软件复位。

CCIFGx——捕获比较中断标志
捕获模式:寄存器CCRx捕获了定时器TAR值时置位
比较模式:定时器TAR值等于寄存器CCRx值时置位

4.CCRx 捕捉/比较寄存器:可读可写

在捕获模式,当满足捕获条件,硬件自动将计数器TAR数据写入该寄存器。

如果测量某窄脉冲(高电平)的脉冲长度,可定义上升沿和下降沿都捕获。在上升沿时,捕获一个定时器数据,这个数据在捕获寄存器中读出;再等待下降沿到来,在下降沿时又捕获一个定时器数据;那么两次捕获的定时器数据差就是窄脉冲的高电平宽度。

其中CCR0经常用作周期寄存器,其它CCRx相同。

范例:在接下来的实例中,结合led显示功能,用定时器A实现一个三位的自动增计数功能,每产生一次中断,led显示增1。

#include "msp430.h"
#define TIMEINTERVAL 50000                  //定时间隔宏定义
int counter[6] = {0,0,0,0,0,0};
//延时子程序
void Delay(void)
{
int i;
for(i = 200; i > 0 ;i --) ;//延时一点时间
}

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

int num[10] = {0x40,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 } ;
int i;
//初始化端口
P1DIR = 0xff;
P2DIR = 0xff;
P4DIR = 0x03;
P1SEL = 0x00;
P2SEL = 0x00;
P4OUT = 0x01;

//设置定时器A
TACTL = TASSEL1 +TACLR ;      
TACCTL0 = CCIE;
CCR0 = TIMEINTERVAL;
TACTL |= MC1;

//允许中断
_EINT();
//显示数组的内容
while(1)
{
     for(i=0;i<6;i++)
    {
      P2OUT = ~(0x01<<(5-i));   
      P1OUT = ~num[counter];
      Delay();
    }
}
//end
}

//定时器A中断处理程序
#pragma vector = TIMERA0_VECTOR
__interrupt void TIMERA_Continue(void)
{
CCR0 += TIMEINTERVAL;

P4OUT ^= BIT1 ;

counter[0]++;
if(counter[0]>9)
{
    counter[0] = 0;
    counter[1]++;
    if(counter[1]>9)
    {
      counter[1]=0;
      counter[2]++;
      if(counter[2]>9)
        counter[2]=0;
    }
      
}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表