kandy286 发表于 2012-10-5 17:54:12

MSP430定时器A的疑问?

看TI的C例子,用MSP430的定时器Timer_A来定时/计数时,为什么是往TA1CCR0中写入相应的计数值?MSP430内部不是有一个定时/计数寄存器TAR吗,为什么要定时时不是往这个寄存器写入相应的计数值呢?

BBC 发表于 2012-10-5 18:15:44

是哪个芯片呀....完整的程序?......TAR是主计数器的计数寄存器吧,另外还有几个比较模块的,一般中断、端口控制都是靠比较模块实现的,TA1CCR0是比较器0的比较寄存器吧......不过最好把源程序放上来啦

kandy286 发表于 2012-10-5 22:22:36

BBC 发表于 2012-10-5 18:15 static/image/common/back.gif
是哪个芯片呀....完整的程序?......TAR是主计数器的计数寄存器吧,另外还有几个比较模块的,一般中断、端 ...

MSP430F5438。不够哪个芯片都差不多一样。如果要定时可以用TAR来定时吗?程序一(TI 的C代码例子)如下:

//******************************************************************************
//MSP430F54x Demo - Timer_A3, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK
//
//Description: Toggle P1.0 using software and TA_1 ISR. Timer1_A is
//configured for up mode, thus the timer overflows when TAR counts
//to CCR0. In this example, CCR0 is loaded with 50000.
//ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~1.045MHz
//
//         MSP430F5438
//         ---------------
//   /|\|               |
//      | |               |
//      --|RST            |
//      |               |
//      |         P1.0|-->LED
//
//   M Smertneck / W. Goh
//   Texas Instruments Inc.
//   September 2008
//   Built with CCE Version: 3.2.2 and IAR Embedded Workbench Version: 4.11B
//******************************************************************************

#include "msp430x54x.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;               // Stop WDT
P1DIR |= 0x01;                            // P1.0 output
TA1CCTL0 = CCIE;                        // CCR0 interrupt enabled
TA1CCR0 = 50000;
TA1CTL = TASSEL_2 + MC_1 + TACLR;         // SMCLK, upmode, clear TAR

__bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, enable interrupts
__no_operation();                         // For debugger
}

// Timer A0 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
P1OUT ^= 0x01;                            // Toggle P1.0
}

BBC 发表于 2012-10-6 00:54:26

kandy286 发表于 2012-10-5 22:22 static/image/common/back.gif
MSP430F5438。不够哪个芯片都差不多一样。如果要定时可以用TAR来定时吗?程序一(TI 的C代码例子)如下: ...

其实从下面这图就看得挺清楚了:



我只能解答你在楼主位提出的问题,其他得靠你自己看datasheet咯...

430的定时器有点特别,主计数器是受CCR0这个捕获/比较器控制的,从图中TAXR右边的count mode是受EQU0触发的便可以看出。

因此,当TAR == TACCR0时,便会触发事件,根据count mode的设定来对TAR寄存器做相应操作。而在本例中,计数模式是upmode,即TAR的计数范围是0~TACCR0,所以设置的是CCR0,而不是TAR......

{:3_57:} 我自己都晕了,不知道自己说了啥......

ckvlhf 发表于 2012-10-6 08:21:27

你这是51单片机的思想。非要那么用也可以,就是浪费了。

金美祖 发表于 2012-11-9 20:58:00

EQU0是什么,有什么作用,可以设置相关寄存器吗?
页: [1]
查看完整版本: MSP430定时器A的疑问?