MSP430G2101 WDT löst nicht aus

Ich habe einen MSP430G2101 und muss den Watchdog verwenden, um einen Interrupt auszulösen. Der Code, den ich zu verwenden versuche, ist der folgende:

#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;
     }
}

Der Interrupt wird nicht ausgelöst, ich überprüfe ihn mit dem Debugger und er verhält sich auch nicht wie erwartet. Ich verwende die neueste Version von Code Composer Studio. Habe ich was wichtiges vergessen. Ich würde erwarten, dass die Methode watchdog_timer alle 0,5 ms aufgerufen wird, aber das funktioniert nicht.

Irgendein Link zum Anweisungssatz?
Haben Sie versucht, alle Interrupts zu aktivieren? ( __enable_interrupt() )

Antworten (2)

Weil Sie globale Interrupts deaktiviert haben.

_BIC_SR(GIE);

Ist Bit Clear Spezialregister.

Sie wollen

_BIS_SR(GIE);

Bit gesetztes Sonderregister.

Oder verwenden Sie __enable_interrupt(); wie erwähnt.

Es scheint, dass Sie vergessen haben, den Interrupt in Ihrem Code zu aktivieren. Sie können alle Interrupts mit aktivieren __enable_interrupt();oder bestimmte Interrupts mit aktivieren_BIS_SR(name_of_interrupt);

Spezifische Interrupts können im SR nicht aktiviert werden.