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.

【求助】关于MSP430F5529捕获的问题

Other Parts Discussed in Thread: MSP430F5529

这是我MSP430F5529开发板上的代码:

#include "msp430f5529.h"
#include "MSP-EXP430F5529_HAL\HAL_Dogs102x6.h"

int n = 0, temp = 0;
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Time_A(void)
{
  n++;                                                                          //进中断时间累加1秒
                                                                                //当进入TACCR0中断后,TACCR0 CCIFG标志自动复位。
  Dogs102x6_intDraw(0, 0, n, DOGS102x6_DRAW_NORMAL);
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
  switch(TA0IV)                                                                 //TA0IV在被访问后会自动归零       
    case TA0IV_TA0CCR1:
    {
      temp = TA0CCR1; //TA0CCR1=0;
      Dogs102x6_intDraw(1, 0, temp, DOGS102x6_DRAW_NORMAL);
      P8OUT ^= BIT1;                                                            //进中断小灯取反
      //TA0IV = 0;
      break;
    }
}

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  uint16_t i, j;
  TA0CTL |= TASSEL__ACLK + TACLR + MC_1;                                        //Time A0定时/计数器时钟来源选择
                                                                                //以及清除时钟分频器和计数方向
                                                                                //设定增计数模式
  P1SEL |= BIT1;
  TA0CCTL0 |= CCIE;                                                             //计数/定时器中断使能
  TA0CCTL1 |= CM_1 + CCIE + CAP + SCS;                                          //设置TA0CCR1为捕获模式,上升沿捕获,允许中断,同步捕获
  TA0CCR0 = 32768;                                                              //TA0CCR0的计数周期:"1/32768"*16384*2=1s
  P8DIR |= BIT1;                                                                //将P8.1设置为输出
  Dogs102x6_init();
  Dogs102x6_backlightInit();
  Dogs102x6_clearScreen();
  Dogs102x6_setBacklight(11);
  _EINT();                                                                      //打开总中断
  for(;;)
  {
    //LPM3;                                                                     //进入低功耗模式3
    TA0CCTL1 |= CCIS_2;                                                         //软件模拟CCR1给入GND
    for(i=0;i<100;i++)
      for(j=0;j<10;j++);
    TA0CCTL1 |= CCIS_3;                                                         //软件模拟CCR1给入VCC,模拟上升沿脉冲
    _NOP();

  }
  return 0;
}

为什么我的捕获程序只能捕获第一次下降沿?TA0CCTL1 |= CM_1不是上升沿吗?而且第一次进了A1中断后就进不了第二次了,就算我将TA0IV置0也没有用,这是为何?

另外我还发现一个现象,在A0中断的时候强制TA0CCR1=0;液晶显示屏上的数任然不是0,这是为何?