Tool/software: Code Composer Studio
Hi, can someone give me an example of using TimerA to generate a PWM using interrupts?
My code keeps flagging CCR0 interrupt.
// MSP430G2553
// ---------------
// | |
// | |
// | P1.3/TA1|-->PWM
//
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= BIT3; // PWM output from Timer
TA1CCR0 = 100; //frequency
TA1CCR1 = 50; // duty cycle
TA1CCTL0 |= CCIE + OUTMOD_7; // TBCCR0 interrupt enabled
TA1CCTL1 |= CCIE + OUTMOD_7; // TBCCR0 interrupt enabled
__bis_SR_register(GIE); // Enter LPM0, enable interrupts
while(1){}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR (void)
{
P1OUT |= BIT3;
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
/* Any access, read or write, of the TBIV register automatically resets the
highest "pending" interrupt flag. */
switch( __even_in_range(TA1IV,14) )
{
case 0: break; // No interrupt
case 2:
P1OUT &= ~BIT3; // End PWM
break;
case 4:
break;
case 6: break; // CCR3 not used
case 8: break; // CCR4 not used
case 10: break; // CCR5 not used
case 12: break; // CCR6 not used
case 14: // overflow
break;
default: break;
}
}
Sorry for the unformatted code. Hope it makes sense.
thank you,
Scott