浅谈msp430f5529入门(3)——定时器A/Timer_A

2020-01-16来源: eefocus关键字:msp430f5529  定时器A  Timer_A

这次聊聊定时器A,Timer_A。


F5529的定时器和F149刚能上几乎没有区别,会用F149的定时器就会用F5529的定时器了。可是呢~F55系列定时器的数量不一样了,而且寄存器的名字也有所改变了。


F5529一共有3个定时器A,3个!TimerA!这3个分别是Timer0_A5,Timer1_A3,Timer2_A3,前面的数字就是定时器的序数,后面的数字是这个定时所拥有的捕获比较单元数量。


这些我都不是从datasheet或者user guide上查到的,而是最直接地翻CCS里的知道的。datasheet和user guide 都是讲一个系列的,各种芯片之间可能有点差异,所以还是进这个专门的头文件里找比较精确。因为数目多了,所以在使用时很容易会产生混乱。大家刚开始学着写程序时一定要经常翻翻user guide和头文件,避免写错。


x代表定时器,n代表捕获比较单元,Timer_A的寄存器也就这么6种,需要我们注意的也就2种。都是TAx开头,如果是涉及捕获比较单元的会在后面再有个n。


TAxCTL——定时器Ax的控制寄存器。


TAxCCTLn——定时器Ax里的捕获比较单元n的控制寄存器,多了个C是Capture/Compare。


TAxR——定时器Ax的计数器,这个不归我们管。


TAxCCRn——定时器Ax里的捕获比较寄存器,用到这个捕获比较的时候直接写就行了,或者是写CCR0。


TAxIV——定时器Ax的中断向量寄存器。进这个中断时查看就行了,switch。


TAxEX0——定时器A扩增的寄存器,里面只有一个TAIDEX对时钟再分频,可以忽略。

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

待我们用到定时器时,对着user guide,


先把TAxCTL设置好——TASSEL时钟源,ID分频不分频,MC工作模式,TAIE打开不打开定时器溢出中断。


再把要用到的捕获比较单元的TAxCCTLn设置好——CAP捕获还是比较,捕获的话CM怎么捕,SCS同步,CCIS信号从哪进;


                                                                                无论捕获还是比较,CCIE中断总得打开吧;

                                                                                如果输出PWM波,设置OUTMOD就够了(一般用模式7)。


最后写TAxCCRn(比较或者是输出PWM波)。

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

有些疑问。


对于TAxCCTLn里的CCIS和SCCI我搞不太懂。


CCIS默认的是CCIxA,这个就是该捕获比较单元所对应的引脚,但CCIxB对应的是哪个呢?我找不出来。我也试过,不是对应的TBxCCTLn的引脚。另外VCC和GND是怎么捕获的,也不太好懂。还好这问题无伤大雅,就那默认地CCIxA用就行了。


另外,SCCI的值说是信号发生跳变时,也就是捕获瞬间的值,但这瞬间的值是什么?捕获前还是捕获后的电平,我无从而知,也没有人告诉我。


曾看了这一段程序,说是可以测PWM波持续高电平的时间,用的是上升下降沿捕获。


#pragma vector = TIMERA1_VECTOR

__interrupt void TIMERA1(void)

{

  switch(TAIV)

  {

  case TAIV_TACCR1: if((TACCTL1 & SCCI)== SCCI)

                    {

                        pulse = CCR1-oldCCR1;

                    }

                    oldCCR1=CCR1;

  case TAIV_TACCR2:break;

  case TAIV_TAIFG: break;

  }

}


可我试了貌似不行,而且在我写的程序里面,单步单步的运行,一直看SCCI都是0,没有变过。


如果有哪位懂得这两个问题而又刚好看见这篇文章的,请不要吝啬地留言。谢谢!

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

那么对于如何测PWM波持续高电平的时间,我想到这样的办法,大家应该都能想出来。


#pragma vector = TIMER0_A1_VECTOR

__interrupt void timer0A1( void )

{

switch( __even_in_range( TA0IV,14) )

{

case TA0IV_TA0CCR1 :

period = TA0CCR1 - oldccr1;

oldccr1 = TA0CCR1;

break;

case TA0IV_TA0CCR2 :

if( TA0CCTL2 & CM_1 )

{

TA0CCTL2 &= ~CM_1; //取消上升沿捕获

TA0CCTL2 |= CM_2; //改为下降沿捕获

oldccr2 = TA0CCR2;

}

else

{

TA0CCTL2 &= ~CM_2; //趋向下降沿捕获

TA0CCTL2 |= CM_1; //改为下降沿捕获

pulse = TA0CCR2 - oldccr2;

}

 

break;

case TA0IV_TA0CCR3 :break;

case TA0IV_TA0CCR4 :break;

case TA0IV_TA0IFG :break;

}

}


无非就是进上升沿中断后改下降沿。比较笨的方法,但能用。

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

关于每一种工作模式如何如何地我就不啰嗦了,和149一样,如果有F149底子应该都懂的。学到5529,我觉得要注意的就是寄存器和有一些位的命名。多了真的很容易混乱,不过多练几次很快就能掌握记忆的技巧了。


关键字:msp430f5529  定时器A  Timer_A 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485831.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430-WDT
下一篇:MSP430系列单片机-Timer_A实现PWM

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430F5529--------test1
按下一个按键后灯点亮松开后灯灭#include <msp430.h> /** * main.c */int main(void){ WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer P1DIR|=BIT0;//设置P1.0为输出模式 P2REN|=BIT1;//使能P2.1上下拉电阻功能 P2OUT|=BIT1;//配置P2。1为上拉电阻方式 while(1) {     if(P2IN&BIT1)         P1OUT|=BIT0;    
发表于 2020-01-18
浅谈msp430f5529入门(2)——时钟配置、例程分析
<msp430.h> int main(void){  volatile unsigned int i;   WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT  P1DIR |= BIT1;                            // P1.1 output 
发表于 2020-01-15
浅谈msp430f5529入门(2)——时钟配置、例程分析
MSP430F5529 ADC参考
rights reserved.*** @file       main.c* @brief      MSP430F5529 平台主程序* @author     CTGU-GB* @version    v2.7* @date       2016-11-26*/#include "include.h"double adcDataTest[20
发表于 2020-01-12
MSP430F5529 ADC参考
MSP430F5438 RTC操作实验详解
为 512.009HZ , 计算高出 18PPM,因此在校正时候要减去一个 18PPM,因此 RTCCTL2 中位 RTCCALS 位为 0,减计算。每 LSB 减 2,因此在 RTCCAL 中赋予数值 9。4,实验代码:#include "msp430x54x.h"void Init_Rtc(void);void Init_Clk(void);void Init_System(void);void main(void){WDTCTL = WDTPW + WDTHOLD; // 关看门狗Init_System(); // 系统初始化__bis_SR_register(LPM3_bits + GIE); // 进入低功耗
发表于 2020-01-12
MSP430F5438 RTC操作实验详解
msp430f149的低功耗模式
430的低功耗确实很强啊,虽然和VR单片机比起来速度慢了好多。在CPU进行工作时,如果没有什么事情干,就得进入低功耗模式啦,LMPX(0~4)这几种模式的具体事项就是如下的,得记住了。一,运行模式MSP430具有一种活动模式和五种软件可选的低功耗运行模式。一个中断事件可以将芯片从五种低功耗模式中的任何一种唤醒,为请求服务并在从中断程序返回时恢复低功耗模式。下面6种运算模式由软件配置。● 活动模式AM:-所有时钟活动● 低功耗模式0(LPM0)-CPU关闭ACLK和SMCLK保持活动,MCLK关闭● 低功耗模式1(LPM1)-CPU关闭ACLK和SMCLK保持活动,MCLK关闭如果DCO在活动模式中没有使用,DCO的直流发生器将关闭
发表于 2020-01-09
PIC16F87X单片机的定时器/计数器的应用
PIC16F87X单片机内部配置了3个定时器/计数器,分别记为TMR0、TMR1、TMR2。这3个定时器/计数器模块不仅在电路结构上不相同,而且其在设计的初衷和使用上也各有不同。· 定时器/计数器TMR0。定时器/计数器TMR0是3个同类模块中最常用的器件,与定时器/计数器TMR0相关的寄存器共有4个,分别为累加计数寄存器TMR0、选项寄存器OPTION REG、中断控制寄存器INTCON和端口RA方向寄存器TRISA。· 定时器/计数器TMR1。定时器/计数器TMR1是一个由两个8位可读写的寄存器(TMR01H和TMRIL)组成的16位定时器/计数器,它带有一个3位的可编程预分频器和一个内置的低功耗低频时基振荡器。· 定时器
发表于 2020-01-16
PIC16F87X单片机的定时器/计数器的应用
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved