desbordamiento del temporizador en MSP430

3

Estoy usando una interrupción para activar el microcontrolador una vez que se ha alcanzado el valor. Veo que en el Registro de control de captura / comparación hay un bit de Desbordamiento de captura. Parece que no puedo encontrar un ejemplo de comprobación de este bit una vez que se ha alcanzado el valor. Un ejemplo de parecía:

#pragma vector = TIMERA0_VECTOR
__interrupt void CCR0_ISR(void) {
    if (++i == 120) {
        P1OUT ^= RLY1;
        i=0;
    }
} // CCR0_ISR

Pero esto no comprueba el valor del bit. Entonces, ¿cómo verifico si el temporizador se ha desbordado?

    
pregunta Dean

2 respuestas

4

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.

    
respondido por el embedded.kyle
0

Hay 2 fuentes de interrupción para el temporizador A

  1. Desbordamiento del temporizador #pragma vector = TIMERA0_VECTOR
  2. Capturar / comparar interrupción #pragma vector = TIMERA1_VECTOR

La rutina de interrupción que está buscando se ejecutará cuando el temporizador se desborda y no cuando el registro de comparación coincide con TAR. Debe utilizar el registro de verificación TAIV en

    #pragma vector = TIMERA1_VECTOR
__interrupt void CCR0_ISR(void) 
{
 //check TAIV for compare/capture interrupt
}
    
respondido por el prasad

Lea otras preguntas en las etiquetas