// Demo: Green LED blink from main code, red LED blink from WDT interrupt
// Target: MSP430G2 Launchpad, with MSP430G2553 IC
#include <stdint.h>
#include <msp430.h>
int main(void) {
volatile uint16_t x;
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR = 0b01000001; // Pin P1.6 (green LED) and P1.0 (red LED) are Outputs
BCSCTL3 |= 32; // ACLK from internal VLOCLK
// Resume WDT in Timer Mode, from ACLK, /8192, Reset count.
WDTCTL = WDTPW | WDTTMSEL | WDTSSEL | WDTIS0 | WDTCNTCL;
IE1 |= WDTIE; // Enable WDT interrupt
__enable_interrupt();
// Regular code to blink the green LED
for ( ; ; ) {
for (x = 25000; x; --x) {} // Poor man's delay
P1OUT ^= 0b01000000; // Toggle green LED
}
return 0;
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void) {
P1OUT ^= 0b00000001; // Toggle red LED
}
Comments