定时器A的捕获

2019-08-05 15:03发布

拿到launch pad的板子,想做一下定时器a的捕获功能,可是三天下来,没有进展。想要实现的功能很简单,从p1.0发出一个32.768KHZ的频率。利用定时器A的捕获测周期的宽度,可是怎么也进入不了中断?不知道怎么回事。在此请各位大师指点一下。
/*****************************************************************
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽
//
//
//                MSP430F2553
//             -----------------
//         /||              XIN|-
//          | |                 | 32kHz
//          --|RST          XOUT|-
//            |                 |
//            |        P1.0/ACLK|---+
//            |                 |   |
//            |             P1.1|<--+
//            |                 |
//            |                 |
//说明:ACLK要进行32.768K,并将其作为外部的要捕获的脉冲;
//MCLK=SMCLK=7.68M;
//******************************************************************************////

#include  <msp430g2553.h>
int pwm_start,pwm_end,pwm_wide=0;
void main(void)
{
  WDTCTL = WDTPW +WDTHOLD;                  // Stop Watchdog Timer
  BCSCTL1=0xcd;
  ///BCSCTL2=0xc0;
  P1DIR |= 0x01;                            // P1.0,   outputs
  P1SEL |= 0x01;                            // P1.0  ACLK   output
  P1SEL|=BIT1;                              //P1.1 CCI2A
  TACCTL0 =CAP+CM_3+CCIS_0+SCS+CCIE;
  TACTL = TASSEL_2 + MC_2;     //SMCLK=7.68M,L连续计数模式
  _EINT();                     //开总中断
  LPM0;
  _NOP();
  pwm_wide=pwm_end-pwm_start;

  while(1);
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{

  switch(TAIV)
{case 1:break;
  case 2:
     if(TACCTL0 & CCI)
        pwm_start=CCR0;
     else
        pwm_end=CCR0;
     //pwm_wide=pwm_end-pwm_start;
     break;
  case 10:
     break;
  }
     LPM0_EXIT;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
lonelynine
2019-08-07 07:37
我也在学习这方面,我发觉你这样做是不通的,P1.0/TACLK第二功能定义为输入,它是不能输出时钟的。所以无论你如何设置,都绝对不能得到脉冲,建议改为P2.0/ACLK这个引脚,它可是输出ACLK时钟,我验证过。

一周热门 更多>