Part Number: MSP430G2333
Hi,
I'm trying to create independent timer interrupts for TA0 CCR0,1,2 and overflow. I'm aiming to learn all 8 timer interrupts of timer0_A3 and timer1_A3. I have tried to get 4 interrupts ( ccr0,ccr1,ccr2, overflow ) with timer0 and have not received the TA0CCR2 interrupt. I have used separate pinouts for verification and used this for educational purposes. The code is as follows.
#include <msp430.h>
volatile int k=0;
void main(void){
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= 0xEF; // configure P1.7 as input
P2DIR |= 0x01;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
//Timer0...................................................................................
TA0CCTL2 |= CCIE; //Timer 1 CCR2 interrupt enabled
TA0CCR2 = 30000;
TA0CCTL1 |= CCIE; // CCR1 interrupt enabled
TA0CCR1 = 40000;
TA0CCTL0 |= CCIE; // CCR0 interrupt enabled
TA0CCR0 = 5000;
TA0CTL = TASSEL_2 + MC_2 + ID_3 + TAIE; //overflow enabled
//Timer1...................................................................................
TA1CCTL0 = CCIE; // timer 2 CCR0 interrupt enabled
TA1CCR0 = 60000;
TA1CTL = TASSEL_2 + MC_2 + ID_3;
//Port_Interrupt...................................................................................
P2IES &= (~0x80); // rising Edge
P2IFG &= (~0x80); // Clear interrupt flag for P1.1 and P1.2
P2IE |= (0x80); //Enable interrupt for P1.3
_enable_interrupt();
while(1);
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0(void){ //TA0CCR0
P1OUT ^= 0x01;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer0_A1(void){ //TA0CCR1 + TA0CCR2 + OVERFLOW
switch( TA0IV )
{
case 0X0002:
{
P1OUT ^= 0x08;
break;}
case 0X0004:
{
P1OUT ^= 0x10;
break;}
case 0x000A:
{
P1OUT ^= 0x40;
break;}
}
}
#pragma vector = TIMER1_A0_VECTOR // TA1CCR0
__interrupt void Timer_A1 (void){
P2OUT ^= 0x01;
}
I want to know the reason for not occurring the ccr2 interrupt. Don't mind about the port interrupt. Any kind of help will be much appreciated.