tongshaoqiang的个人空间 https://bbs.21ic.com/?598372 [收藏] [复制] [RSS]

日志

MSP430MSP430学习笔记--定时器(续)

已有 592 次阅读2014-12-3 17:03 |系统分类:单片机| 计数器, 寄存器, 定时器, 测量, 软件

同时定时器A还有3个捕获/比较寄存器CCRx,3个捕获/比较控制寄存器CCTLx。

小q截图-20130710165002.jpg
在捕获比较模块中,可读可写。其中CCR0经常用作周期寄存器,其他CCRx相同。

CCTLx捕获/比较寄存器
小q截图-20130710165618.jpg
   CMx:选择捕获模式
    CCISx:捕获/比较的输入选择
   SCS:1,捕获输入信号与定时器时钟信号同步;0,异步捕获
   SCCI:被所存的CCI输入信号和EQUx锁存,通过SCCI读出来。
   CAP:0,比较模式;1,捕获模式
   OUTMODx:选择输出模式
   CCI:捕获/比较的输入信号。选择的输入信号通过该位来读出
    CCIFGx :捕获比较中断标志。
                     捕获模式:寄存器CCRx捕获了定时器TAR值时置位
                     比较模式:定时器TAR值等于寄存器CCRx值时置位

     比较模式:这是该定时器的默认模式,在此所有的捕获硬件停止工作。如果此时相应定时器中断允许打开的话,同时开始启动定时器,定时计数器TAR中的数值等于比较寄存器的值时,则产生中断请求。如果没有中断允许,只是响应的中断标志CCIFGx置位。

捕获模式: 主要用于利用信号的上升沿,下降沿或组合,测量外部或内部事件,也可以由软件停止。捕获完成后CCIFGx置位。

            Timer_A有两个中断向量,一个单独分配给捕获/比较寄存器CCR0,另一个作为共用的中断向量用于定时器和其他的捕获/比较寄存器。

     CCR0中断向量具有最高的优先级,CCIFG0在被中断服务时能自动复位。

    CCR1-CCRx和定时器共用另一个中断向量,属于多源中断,对应的中断标志CCIFG1-CCIFGx和TAIFG在读中断向量字TAIV后,自动复位。如果不访问TAIV寄存器,则不能自动复位,需用软件清除。

TAIV中断向量值

小q截图-20130710190602.jpg
还有一点要注意的是:定时器A连续技术模式下,CCR0作为一般的捕获/比较寄存器使用。连续模式可以用来产生独立的时间间隔并输出频率。每个时间间隔完成后就会产生一个中断。在中断到来时,必须在当前中断服务程序下将下一个时间间隔加到CCRx寄存器里,这样按顺序执行,就可以产生周期性的中断,从而向外输出频率,Timer_A最多可以使用3个捕获/比较寄存器输出3个不同的频率。

   



  例程:CCR0捕获/比较寄存器——比较功能中断应用



利用了定时器A模块中的CCR0捕获/比较寄存器的值与定时器A的值进行比较。如果相等就产生CCR0中断,进入Timer_A0中断服务程序进行中断处理,以P1.0作为指示,反转速度=32768/(2*1000)=16.384

  ACLK=TACLK=32768hz,MCLK=SMCLK=deflaut DCO~800khz

#include

void main (void)


{

   WDTCTL = WDTPW + WDTHOLD;  //关闭看门狗

   P1DIR|=BIT0;               //设p1.0为输出

   CCTL0 = CCIE;              //CCR0开中断运允许

   CCR0 =1000-1;

   TACTL = TASSEL_1 + MC_1;   //ACLK为定时器A的时钟源,增计数模式


  _BIS_SR(LPM3_bits+GIE);    //进入LPM3,打开全局中断


}

//Timer A0中断服务

   #pragma vector = TIMERA0_VECTOR

   __interrupt void Timer_A(void)

   {

    P1OUT ^=BIT0;              //反转P1.0

   }

例程  CCR0捕获/比较寄存器-比较功能中断应用


要求:ACLK=TACLK=32khz,MCLK=SMCLK=deflaut DCO~800khz

  实现输出:P1.1=CCR0=32768/(2*4)=4096HZ

            P1.2=CCR1=32768/(2*16)=1024hz

            P1.3=CCR2=32768/(2*100)=163.84hz

            P1.0=overflow(溢出)=32768/(2*65536)=0.25HZ

程序我就直接贴图吧,省的贴过来格式又乱了。



例程 CCR1,CCR2捕获/比较寄存器——产生PWM(脉冲宽度调制)波形

程序简述:利用定时器A的自动产生PWM波形输出,从而无需服务程序来产生。本程序CCR0的值作为PWM的周期宽度,CCR1,CCR2的值作为PWM的占空宽。

ACLK=TACLK=LFXT1=32768HZ




路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)