From e3aa56071cd8140e10590a2018fc8de0aaaa970b Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 12 Oct 2011 18:51:44 +0200 Subject: [PATCH] adding led3.c --- Makefile | 3 ++- led3.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 led3.c diff --git a/Makefile b/Makefile index 0fde07d..f45c73c 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CFLAGS = -Os -Wall -g -mmcu=msp430x2012 LD = $(CC) LDFLAGS = -PROGRAMS = led1.elf led2.elf +PROGRAMS = led1.elf led2.elf led3.elf .PHONY : clean distclean @@ -12,6 +12,7 @@ all : $(PROGRAMS) led1.elf : led1.o led2.elf : led2.o +led3.elf : led3.o %.elf : $(LD) -o $@ $^ diff --git a/led3.c b/led3.c new file mode 100644 index 0000000..1f5345e --- /dev/null +++ b/led3.c @@ -0,0 +1,54 @@ + +#include +#include + +#define R_LED BIT0 +#define G_LED BIT6 + +#define N_STATES 4 + +int state = 0; + +void update(void) { + + state = (state + 1) % N_STATES; + + /* first bit set, enable red */ + if (state & 0x1) + P1OUT |= R_LED; + else + P1OUT &= ~R_LED; + + /* second bit set, enable green */ + if (state & 0x2) + P1OUT |= G_LED; + else + P1OUT &= ~G_LED; +} + +int main(void) { + + /* Set watchdog timer to interupt at 32ms interval. */ + WDTCTL = WDT_MDLY_32; + + /* set direction to output on both leds */ + P1DIR |= (R_LED | G_LED); + + P1OUT = 0x0; + + /* enable interrupt */ + IE1 |= WDTIE; + _BIS_SR(LPM0_bits + GIE); + + for(;;); + + return 0; +} + +interrupt(WDT_VECTOR) main_isr(void) { + + static int cntr = 0; + + if ((cntr++ % 30) == 0) + update(); +}