MSP430G2101 WDT no se activa

Tengo un MSP430G2101 y necesito usar 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 activa, estoy comprobando con el depurador y tampoco actúa como expectativa. Estoy usando la última versión de Code Composer Studio. ¿Olvidé algo importante? Esperaría que se llamara al método watchdog_timer cada 0,5 ms, pero eso no funciona.

¿algún enlace al conjunto de instrucciones?
¿Intentaste habilitar todas las interrupciones? (__habilitar_interrupción())

Respuestas (2)

Porque deshabilitó las interrupciones globales.

_BIC_SR(GIE);

Es un registro Bit Clear Special.

Quieres

_BIS_SR(GIE);

Bit Establecer registro especial.

O use __enable_interrupt(); como se mencionó.

Parece que olvidaste habilitar la interrupción en tu código. Puede habilitar todas las interrupciones con __enable_interrupt();o habilitar interrupciones específicas con_BIS_SR(name_of_interrupt);

No se pueden habilitar interrupciones específicas en el SR.