3666|1

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

浅谈msp430f5529入门(3)——定时器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里的CCISSCCI我搞不太懂。

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

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

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

  1. #pragma vector = TIMERA1_VECTOR  
  2. __interrupt void TIMERA1(void)  
  3. {  
  4.   switch(TAIV)  
  5.   {  
  6.   case TAIV_TACCR1: if((TACCTL1 & SCCI)== SCCI)  
  7.                     {  
  8.                         pulse = CCR1-oldCCR1;  
  9.                     }  
  10.                     oldCCR1=CCR1;  
  11.   case TAIV_TACCR2:break;  
  12.   case TAIV_TAIFG: break;  
  13.   }  
  14. }  
复制代码

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


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


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

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

  1. #pragma vector = TIMER0_A1_VECTOR  
  2. __interrupt void timer0A1( void )  
  3. {  
  4.     switch( __even_in_range( TA0IV,14) )  
  5.     {  
  6.     case TA0IV_TA0CCR1 :  
  7.                         period = TA0CCR1 - oldccr1;  
  8.                         oldccr1 = TA0CCR1;  
  9.                         break;  
  10.     case TA0IV_TA0CCR2 :  
  11.                         if( TA0CCTL2 & CM_1 )  
  12.                         {  
  13.                             TA0CCTL2 &= ~CM_1;      //取消上升沿捕获  
  14.                             TA0CCTL2 |= CM_2;       //改为下降沿捕获  
  15.                             oldccr2 = TA0CCR2;  
  16.                         }  
  17.                         else  
  18.                         {  
  19.                             TA0CCTL2 &= ~CM_2;      //趋向下降沿捕获  
  20.                             TA0CCTL2 |= CM_1;       //改为下降沿捕获  
  21.                             pulse = TA0CCR2 - oldccr2;  
  22.                         }  
  23.   
  24.                         break;  
  25.     case TA0IV_TA0CCR3 :break;  
  26.     case TA0IV_TA0CCR4 :break;  
  27.     case TA0IV_TA0IFG :break;  
  28.     }  
  29. }  
复制代码

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


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


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


        祝大家学习愉快!


最新回复

关于CCIS到底是哪个引脚的问题,具体可以参考对应型号的DATASHEET。 [attach]192060[/attach]   详情 回复 发表于 2015-3-24 16:34
 
点赞 关注(2)

回复
举报

396

帖子

5

TA的资源

纯净的硅(中级)

沙发
 
关于CCIS到底是哪个引脚的问题,具体可以参考对应型号的DATASHEET。

 
个人签名一别四五年,变化万千。https://home.eeworld.com.cn/static/image/smiley/comcom/5.gif[/img]
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表