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.
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);
Inundación Gravemind
M. Ferru