This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430 G2553 Timer_A主定时器外部时钟输入

Other Parts Discussed in Thread: MSP430G2553, TCA6416A

写了个小的测试程序,使用外部时钟输入,但是总没有计数的效果。输入的信号是信号发生器产生的方波(-3V~3V,频率32768Hz),代码如下:

#include "MSP430G2553.h"
#include "LCD_128.h"
#include "HT1621.h"
#include "TCA6416A.h"


unsigned char flag1=0;
unsigned char flag2=0;
unsigned int temp=0;
long temp1;
long FRE=12346;
long adc_sample=0;
long adc_max=0;
unsigned int i;

void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关狗

TCA6416A_Init();
HT1621_init();

P1DIR |= BIT6; //使用P1.0控制LED闪烁
P1SEL |= BIT0;
P1DIR &= ~BIT0;


TA1CCTL0=CCIE; //Capture/compare interrupt enable
TA1CCR0=32768; //设置计数周期
TA1CTL= TASSEL_0 + MC_1 +TACLR;//选择时钟源,SMCLK;计数模式,连续计数

while(1)
{
_BIS_SR(LPM0_bits + GIE);
temp1=FRE;

}
}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A (void)
{


// _BIC_SR_IRQ(LPM0_bits);
P1OUT^=BIT6;

}

  •   你是要用timerA实现对外部脉冲的计数么?

  • 是啊,就是直接在P1.0 输入时钟信号  读不出上升沿数据啊

  • 明天发给代码你试一下~

  • #include <msp430.h>
    
    int main(void)
    {
      WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT
    
      // Configure GPIO
      P1DIR |= BIT6;
      P1OUT = 0;
    
      P1SEL |= BIT0;                           // P1.0 selected as TA0CLK
    
      // Configure Timer_A
      TA0CTL = TASSEL_0 | MC_2 | TACLR | TAIE;  // ACLK, count mode, clear TAR, enable interrupt
      TA0R = 0xFFFF - 10;                       // Offset until TAR overflow
      __bis_SR_register(LPM3_bits | GIE);       // Enter LPM3, enable interrupts
    
      while (1)
      {
    
      }
    }
    
    // Timer0_A3 Interrupt Vector (TAIV) handler
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=TIMER0_A1_VECTOR
    __interrupt void TIMER0_A1_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(TIMER0_A1_VECTOR))) TIMER0_A1_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
      switch(__even_in_range(TA0IV,TA0IV_TAIFG))
      {
          case TA0IV_NONE:
              break;                             // No interrupt
          case TA0IV_TACCR1:
              break;                             // CCR1 not used
          case TA0IV_TACCR2:
              break;                             // CCR2 not used
          case TA0IV_TAIFG:                      // overflow
        	  TA0R = 0xFFFF - 10;
        	  P1OUT ^= BIT6;
              break;
          default:
              break;
      }
    }
    
  • 10个脉冲LED翻转一次

x 出现错误。请重试或与管理员联系。