From 875a8291ecf4dc74800b7d8c7cd0dc62b9d582bf Mon Sep 17 00:00:00 2001 From: Matt Mullins Date: Sat, 22 Dec 2012 18:57:24 -0800 Subject: [PATCH] Blinks an LED from the reset ISR --- Makefile | 4 ++-- isr_table.c | 4 +++- led_blink.c | 32 ++++++++++++++++++++++++++++++++ led_blink.h | 6 ++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 led_blink.c create mode 100644 led_blink.h diff --git a/Makefile b/Makefile index c08c72a..251d061 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CC=$(ARCH)-gcc LD=$(ARCH)-ld OBJCOPY=$(ARCH)-objcopy -CFLAGS=-mcpu=cortex-m4 -nostdinc -I $(STELLARISWARE)/inc +CFLAGS=-ggdb -std=gnu99 -mcpu=cortex-m4 -nostdinc -I $(STELLARISWARE)/inc LDFLAGS=-Tstellaris.t STELLARISWARE=/home/mmullins/projects/stellaris/StellarisWare @@ -13,7 +13,7 @@ all: led_blink.bin %.o: %.c $(CC) $(CFLAGS) -c -o $@ $^ -led_blink: isr_table.o +led_blink: isr_table.o led_blink.o $(LD) $(LDFLAGS) -o $@ $^ led_blink.bin: led_blink diff --git a/isr_table.c b/isr_table.c index 198e8f1..e013b40 100644 --- a/isr_table.c +++ b/isr_table.c @@ -1,9 +1,11 @@ +#include "led_blink.h" + static void infinite_loop_isr(); __attribute__((section(".reset"))) void (*reset_vectors[])() = { (void(*)()) 0x20007000, - infinite_loop_isr, + main_isr, infinite_loop_isr, infinite_loop_isr, infinite_loop_isr, diff --git a/led_blink.c b/led_blink.c new file mode 100644 index 0000000..9b0f47b --- /dev/null +++ b/led_blink.c @@ -0,0 +1,32 @@ +#include "led_blink.h" +#include + +__attribute__((isr)) +void main_isr() { + // Enable Port F + SYSCTL_RCGCGPIO_R = 0x20; + + // Wait for a few clocks to let GPIO module stabilize + for (int i = 0; i < 10; ++i) { + } + + // RGB pins (PF1, 2, 3) as outputs + GPIO_PORTF_DIR_R = 0xE; + + // deliver 2mA of current + GPIO_PORTF_DR2R_R = 0xE; + + // set to digital mode + GPIO_PORTF_DEN_R = 0xE; + + // Set RGB pins to 1 + *(GPIO_PORTF_DATA_BITS_R + 0xE) = 0x2; + + // infinite loop + for (;;) { + *(GPIO_PORTF_DATA_BITS_R + 0xC) ^= 0xC; + + for (int j = 0; j < 1000000; ++j) { + } + } +} diff --git a/led_blink.h b/led_blink.h new file mode 100644 index 0000000..24c4feb --- /dev/null +++ b/led_blink.h @@ -0,0 +1,6 @@ +#ifndef __led_blink_H__ +#define __led_blink_H__ + +extern void main_isr(); + +#endif -- 2.11.0