diff --git a/example/Makefile b/example/Makefile index 23d07e52..0667d670 100644 --- a/example/Makefile +++ b/example/Makefile @@ -26,7 +26,7 @@ CC = $(PREFIX)-gcc LD = $(PREFIX)-ld OBJCOPY = $(PREFIX)-objcopy OBJDUMP = $(PREFIX)-objdump -CFLAGS = -Os -g -Wall -Wextra -I../include -fno-common \ +CFLAGS = -O0 -g -Wall -Wextra -I../include -fno-common \ -mcpu=cortex-m3 -mthumb LDFLAGS = -L../lib -T$(BINARY).ld -nostartfiles OBJS = $(BINARY).o diff --git a/example/blink.c b/example/blink.c index aa68322a..21ac147b 100644 --- a/example/blink.c +++ b/example/blink.c @@ -22,6 +22,26 @@ int main(void) { - /* TODO */ + int i; + + /* GPIO setup: Enable GPIOC clock, set GPIO12 to 'output push-pull'. */ + RCC_APB2ENR = RCC_IOPCEN; + GPIOC_CRH = (GPIO_CNF_OUTPUT_PUSHPULL << (((12 - 8) * 4) + 2)); + GPIOC_CRH |= (GPIO_MODE_OUTPUT_2_MHZ << ((12 - 8) * 4)); + + /* Blink the LED (PC12) on the board. */ + while (1) { + GPIOC_BSRR = GPIO12; /* LED off */ + for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */ + GPIOC_BRR = GPIO12; /* LED on */ + for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */ + } + return 0; } + +u32 *vector_table[2] __attribute__ ((section(".vectors"))) = { + (u32 *)0x20000800, /* Use 2 KB stack (0x800 bytes). */ + (u32 *)main, /* Use main() as reset vector for now. */ +}; + diff --git a/example/blink.ld b/example/blink.ld index c57079c0..07ea842b 100644 --- a/example/blink.ld +++ b/example/blink.ld @@ -33,6 +33,7 @@ SECTIONS . = ORIGIN(rom); .text : { + *(.vectors) /* Vector table */ *(.text) /* Program code */ *(.rodata) /* Read-only data */ } >rom