MSP430G2101 WDT no se dispara

3

Tengo un MSP430G2101 y necesito usar el Watchdog para activar una interrupción. El código que estoy tratando de usar es el siguiente:

#include <msp430.h> 
#include <stdint.h>

unsigned int cycle = 0;
unsigned int pwmred = 1;


void main(void)
{
WDTCTL = WDT_MDLY_0_5;              // WDT as interval timer (period 0,5 ms)
IE1 |= WDTIE;                       // Enable WDT interrupt

P1DIR |= BIT3 + BIT4 + BIT5;


_BIC_SR(GIE);
 while(1)
 {
 }
}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
    cycle++;

     if(cycle >= pwmred) {
         P1OUT &= ~BIT3;
     }

     if (cycle >= 255)
     {
         if(pwmred > 0)
             P1OUT |= BIT3;
         cycle = 0;
     }
}

La interrupción no se está activando, estoy verificando el uso del depurador y tampoco está actuando como expectativa. Estoy usando la última versión de Code Composer Studio. ¿Olvidé algo importante? Espero que se llame al método watchdog_timer cada 0,5 ms, pero eso no funciona.

    
pregunta Flole

2 respuestas

3

Porque inhabilitaste las interrupciones globales.

_BIC_SR (GIE);

Is Bit Clear Registro especial.

Tú quieres

_BIS_SR (GIE);

Bit Set registro especial.

O usa __enable_interrupt (); como se mencionó.

    
respondido por el Passerby
0

Parece que se olvidó de habilitar la interrupción en su código. Puede habilitar todas las interrupciones con __enable_interrupt(); o habilitar interrupciones específicas con _BIS_SR(name_of_interrupt);

    
respondido por el M.Ferru

Lea otras preguntas en las etiquetas