历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | 浅谈msp430f5529入门(3)——定时器A/Timer_A
2020-01-16 来源:eefocus
这次聊聊定时器A,Timer_A。
F5529的定时器和F149刚能上几乎没有区别,会用F149的定时器就会用F5529的定时器了。可是呢~F55系列定时器的数量不一样了,而且寄存器的名字也有所改变了。
F5529一共有3个定时器A,3个!TimerA!这3个分别是Timer0_A5,Timer1_A3,Timer2_A3,前面的数字就是定时器的序数,后面的数字是这个定时所拥有的捕获比较单元数量。
这些我都不是从datasheet或者user guide上查到的,而是最直接地翻CCS里的 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,我觉得要注意的就是寄存器和有一些位的命名。多了真的很容易混乱,不过多练几次很快就能掌握记忆的技巧了。
上一篇:MSP430-WDT
史海拾趣
|
引言 虽然计算机通信的方法和手段多种多样,但都必须依靠数据通信技术。数据通信就是将数据信号加到数据传输信道上进行传输,并在接收点将原始发送的数据正确地恢复过来。由于计算机产生的一般都是数字信号,因此计算机之间的通信实际上都属于数 ...… 查看全部问答> |
|
我在定制内核时加入了windows media player 播放影片时,出现半透明播放(可以看得见windows背景) 请各位大侠指点下! … 查看全部问答> |
|
Source Insight 中怎么才能让中文注释之间没有空格呢? 如题: 用Source Install写代码的时候,中文注释的每个汉字间都会有一个空格,请问这个空格怎么才能去掉呢,在选项里面能改吗? 还有一个问题: 我发现这个软件即使你没有包含在它的工程里面的文件也是能看到的,但是我还发现用结构体名定义的结构变量 ...… 查看全部问答> |
|
我用的是友善之臂的MicroS3C2440开发板,想运行一个Linux系统,但是在第一步格式化NandFlah的时候却出现大面积分区坏的问题,不知如何解决? [ 本帖最后由 zhangle0922 于 2011-5-12 12:37 编辑 ]… 查看全部问答> |
|
为了实现DIY数控电源更好的可用性及美化美观,现公开征集以下器件的供应商,也欢迎网友们提供相关信息: 1、单键飞梭成品 注塑件、结构件、电气件齐全,可以直接装机使用 2、光电旋钮/编码器 作为单键飞梭的替代,带塑胶旋钮和紧固件 ...… 查看全部问答> |
|
我做了个激光器功率的PID电路,周围有人走动就会有影响,没人的时候没有变化。因为是光纤激光器,光路也没有空间部分不会因为震动影响光路部分,那这个飘动就是电路部分了,但是在不理解怎么会有这么大的影响,人一走动就变化,快成生命探测器了。 ...… 查看全部问答> |




