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 TAIV

Other Parts Discussed in Thread: MSP430G2231, MSP430F2272, MSP430F2274

Hey, 

When i run the msp430g2xx1_ta_08.c code (shown below) on a MSP430G2231, the program can enter the swtich(TAIV) statement and then i can step through and debug from there. 

 

When i try port the same code over to MSP430F2272 (i have include the "msp430f2272.h"), the program never enter the TIMER A0, hence never enter the switch(TAIV) statement.

 

Any suggestion or advice would be greatly appreciate.

 

//******************************************************************************

//  MSP430G2xx1 Demo - Timer_A, Toggle P1.0-2, Cont. Mode ISR, 32kHz ACLK

//

//  Description: Use Timer_A CCRx units and overflow to generate four

//  independent timing intervals. For demonstration, CCR0 and CCR1 output

//  units are optionally selected with port pins P1.1 and P1.2 in toggle

//  mode. As such, these pins will toggle when respective CCRx registers match

//  the TAR counter. Interrupts are also enabled with all CCRx units,

//  software loads offset to next interval only - as long as the interval offset

//  is aded to CCRx, toggle rate is generated in hardware. Timer_A overflow ISR

//  is used to toggle P1.0 with software. Proper use of TAIV interrupt vector

//  generator is demonstrated.

//  ACLK = TACLK = 32kHz, MCLK = SMCLK = Default DCO

//  As coded and with TACLK = 32768Hz, toggle rates are:

//  P1.1 = CCR0 = 32768/(2*4) = 4096Hz

//  P1.2 = CCR1 = 32768/(2*16) = 1024Hz

//  P1.0 = overflow = 32768/(2*65536) = 0.25Hz

//  //* External watch crystal on XIN XOUT is required for ACLK *//

//

//              MSP430G2xx1

//            ---------------

//        /|\|            XIN|-

//         | |               | 32kHz

//         --|RST        XOUT|-

//           |               |

//           |       P1.1/TA0|--> CCR0

//           |       P1.2/TA1|--> CCR1

//           |           P1.0|--> Overflow/software

//

//  D. Dang

//  Texas Instruments Inc.

//  October 2010

//  Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10

//******************************************************************************

 

#include  <msp430g2231.h>

 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1SEL |= 0x06;                            // P1.1 - P1.2 option select

  P1DIR |= 0x07;                            // P1.0 - P1.2 outputs

  CCTL0 = OUTMOD_4 + CCIE;                  // CCR0 toggle, interrupt enabled

  CCTL1 = OUTMOD_4 + CCIE;                  // CCR1 toggle, interrupt enabled

  TACTL = TASSEL_1 + MC_2 + TAIE;           // ACLK, contmode, interrupt enabled

 

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt

}

 

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A0 (void)

{

  CCR0 += 4;                                // Add Offset to CCR0

}

 

// Timer_A2 Interrupt Vector (TAIV) handler

#pragma vector=TIMERA1_VECTOR

__interrupt void Timer_A1(void)

{

  switch( TAIV )

  {

  case  2: CCR1 += 16;                      // Add Offset to CCR1

           break;

  case 10: P1OUT ^= 0x01;                   // Timer_A3 overflow

           break;

 }

}

 

 

 

See below for MSP430F2274 code.

 

 

 

#include "msp430x22x4.h"

#include "vlo_rand.h"

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1SEL |= 0x06;                            // P1.1 - P1.2 option select

  P1DIR |= 0x07;                            // P1.0 - P1.2 outputs

  CCTL0 = OUTMOD_4 + CCIE;                  // CCR0 toggle, interrupt enabled

  CCTL1 = OUTMOD_4 + CCIE;                  // CCR1 toggle, interrupt enabled

  TACTL = TASSEL_1 + MC_2 + TAIE;           // ACLK, contmode, interrupt enabled

 

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt

}

 

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A0 (void)

{

  CCR0 += 4;                                // Add Offset to CCR0

}

 

// Timer_A2 Interrupt Vector (TAIV) handler

#pragma vector=TIMERA1_VECTOR

__interrupt void Timer_A1(void)

{

  switch( TAIV )

  {

  case  2: CCR1 += 16;                      // Add Offset to CCR1

           break;

  case 10: P1OUT ^= 0x01;                   // Timer_A3 overflow

           break;

 }

}

 

 

regards,

ted

 

 

 

  • I have found the ta_08.c code for the msp430F2274 version. Now im using the Ez430 RF2550 kit to test the code. It still doesn't jump into the switch(TAIV) statement. 

     

    regards,

    ted.

  • On bioth devices, the ACLK is per default sourced by an external 32768Hz watch crystal. There is no fallback to any other clock source. So if the crystal is not connected to XT1 oscillator inputs, there is no clock. And without clock, the timer never triggers any interrupt and no ISR is ever entered.

    So the question is: is on your F2274 board a watch crystal available (and not defective)?

**Attention** This is a public forum