No estoy seguro exactamente de qué serie de MSP estás usando, así que tendrás que buscar los detalles. Pero la premisa básica debería aplicarse en todos los ámbitos, creo.
El siguiente ejemplo es del archivo msp430g2xx1_ta_03.c
en los fragmentos de código que se pueden descargar desde TI Wiki :
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // overflow
break;
}
}
La clave es verificar el registro TAIV
para ver qué causó la interrupción. Consulte la página 416 de la Guía del usuario de la familia CC430 :
Ahora el ejemplo del código está buscando un valor de 10
en el registro TAIV
y la Guía del usuario indica que 0x0E
es el desbordamiento. Así que, una vez más, verifique la documentación de su chip específico. Pero el registro TAIV
es lo que le dirá cuál es la causa de la interrupción.