| #include "msp430.h"
 
#define NUMBER_TIMER_CAPTURES       20
volatile unsigned int timerAcaptureValues[NUMBER_TIMER_CAPTURES];
unsigned int timerAcapturePointer = 0;
 
int main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer
 
  // Configure GPIO
  P1OUT &= ~0x01;                           // Clear P1.0 output
  P1DIR |= 0x01;                            // Set P1.0 to output direction
 
  // Disable the GPIO power-on default high-impedance mode to activate
  // previously configured port settings
  PM5CTL0 &= ~LOCKLPM5;
 
  // Clock System Setup
  CSCTL0_H = CSKEY >> 8;                    // Unlock CS registers
  CSCTL2 &= ~SELA_7;
  CSCTL2 |= SELA__VLOCLK;                   // Select ACLK=VLOCLK
  CSCTL0_H = 0x00;                        // Lock CS module (use byte mode to upper byte)
 
  __delay_cycles(1000);                     // Allow clock system to settle
 
  // Timer0_A3 Setup
  TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;
                                            // Capture rising edge,
                                            // Use CCI2B=ACLK,
                                            // Synchronous capture,
                                            // Enable capture mode,
                                            // Enable capture interrupt
  TA0CTL = TASSEL__SMCLK | MC__CONTINUOUS;  // Use SMCLK as clock source,
                                            // Start timer in continuous mode
 
  __bis_SR_register(LPM0_bits | GIE);
  __no_operation();
}
 
// Timer0_A3 CC1-4, TA Interrupt 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_TA0CCR1:
      break;
    case TA0IV_TA0CCR2:
      timerAcaptureValues[timerAcapturePointer++] = TA0CCR2;
      if (timerAcapturePointer >= 20) {
        while (1) {
          P1OUT ^= 0x01;                    // Toggle P1.0 (LED)
          __delay_cycles(100000);
        }
      }
      break;
    case TA0IV_TA0IFG:
      break;
    default:
      break;
  }
}
 
 |