From 836a7983c1973ad9ac93fb0abe8cdc9beed9929f Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sat, 24 Sep 2011 16:35:45 +0200 Subject: [PATCH] Initial commit --- .gitignore | 2 ++ Makefile | 23 ++++++++++++++++ led1.c | 34 ++++++++++++++++++++++++ led2.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 led1.c create mode 100644 led2.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20596b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +*.elf diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0fde07d --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ + +CC = msp430-gcc +CFLAGS = -Os -Wall -g -mmcu=msp430x2012 +LD = $(CC) +LDFLAGS = + +PROGRAMS = led1.elf led2.elf + +.PHONY : clean distclean + +all : $(PROGRAMS) + +led1.elf : led1.o +led2.elf : led2.o + +%.elf : + $(LD) -o $@ $^ + +clean : + $(RM) *.o + +distclean : clean + $(RM) $(PROGRAMS) diff --git a/led1.c b/led1.c new file mode 100644 index 0000000..7417211 --- /dev/null +++ b/led1.c @@ -0,0 +1,34 @@ + +#include + +/* + * P1 bit 0 = red led. + * P1 bit 6 = green led. + * P1 bit 3 = button. + */ + +int main(void) { + /* Init watchdog timer to off */ + WDTCTL = WDTPW | WDTHOLD; + + /* set all P1 direction to input. */ + P1DIR = 0x0; + + /* set red led to output */ + P1DIR |= BIT0; + + P1OUT = 0x0; + + for(;;) { + /* + * P1.3 bit set -> button _not_ pressed. + */ + if (P1IN & BIT3) { + P1OUT &= ~BIT0; + } else { + P1OUT |= BIT0; + } + } + + return 0; +} diff --git a/led2.c b/led2.c new file mode 100644 index 0000000..2c74c95 --- /dev/null +++ b/led2.c @@ -0,0 +1,77 @@ + +#include + +/* + * P1 bit 0 = red led. + * P1 bit 6 = green led. + * P1 bit 3 = button. + */ + + #define N_STATES 4 + +int state = 0; + +/* G | R | state (dec) + * 0 | 0 | 0 + * 0 | 1 | 1 + * 1 | 0 | 2 + * 1 | 1 | 3 + */ + +void update(void) { + + static unsigned in_progress = 0; + + if (in_progress) + return; + in_progress = 1; + + state = (state + 1) % N_STATES; + + /* first bit set, enable red */ + if (state & BIT0) + P1OUT |= BIT0; + else + P1OUT &= ~BIT0; + + /* second bit set, enable green */ + if (state & BIT1) + P1OUT |= BIT6; + else + P1OUT &= ~BIT6; + + in_progress = 0; +} + +void delay(void) { + + int i = 0x6fff; + + while(i--) + nop(); +} + +int main(void) { + + /* Init watchdog timer to off */ + WDTCTL = WDTPW | WDTHOLD; + + /* set all P1 direction to input. */ + P1DIR = 0x0; + + /* set direction to output on both leds */ + P1DIR |= (BIT0 | BIT6); + + P1OUT = 0x0; + + for(;;) { + /* + * P1.3 bit set -> button _not_ pressed. + */ + if (!(P1IN & BIT3)) + update(); + + delay(); + } + return 0; +}