From be287b9df1c170e318ea3ef08ed387944e09022b Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sun, 30 Jun 2019 18:48:58 +0200 Subject: [PATCH] Added libopencm3 test --- test-opencm3/Makefile | 78 +++++++++++++++++++++++++++++++++++++++++++ test-opencm3/test.c | 59 ++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 test-opencm3/Makefile create mode 100644 test-opencm3/test.c diff --git a/test-opencm3/Makefile b/test-opencm3/Makefile new file mode 100644 index 0000000..11acf15 --- /dev/null +++ b/test-opencm3/Makefile @@ -0,0 +1,78 @@ +BINARY=test +OBJS=test.o + +OPENCM3_DIR=/home/mj/stm/libopencm3 +DEVICE=stm32f103x8 + +all: $(BINARY).elf $(BINARY).bin + +flash: all + ../bin/st-flash write $(BINARY).bin 0x8000000 + +ifneq ($(V),1) +Q := @ +NULL := 2>/dev/null +endif + +include $(OPENCM3_DIR)/mk/genlink-config.mk + +PREFIX ?= arm-none-eabi + +CC := $(PREFIX)-gcc +CXX := $(PREFIX)-g++ +LD := $(PREFIX)-gcc +AR := $(PREFIX)-ar +AS := $(PREFIX)-as +OBJCOPY := $(PREFIX)-objcopy +OBJDUMP := $(PREFIX)-objdump +GDB := $(PREFIX)-gdb +OPT := -Os +DEBUG := -ggdb3 +CSTD ?= -std=c99 + +TGT_CFLAGS += $(OPT) $(CSTD) $(DEBUG) +TGT_CFLAGS += $(ARCH_FLAGS) +TGT_CFLAGS += -Wall -Wextra -Wshadow -Wimplicit-function-declaration +TGT_CFLAGS += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes +TGT_CFLAGS += -fno-common -ffunction-sections -fdata-sections + +TGT_CPPFLAGS += -MD + +TGT_LDFLAGS += --static -nostartfiles +TGT_LDFLAGS += -T$(LDSCRIPT) +TGT_LDFLAGS += $(ARCH_FLAGS) $(DEBUG) +TGT_LDFLAGS += -Wl,-Map=$(*).map -Wl,--cref +TGT_LDFLAGS += -Wl,--gc-sections +ifeq ($(V),99) +TGT_LDFLAGS += -Wl,--print-gc-sections +endif + +LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group + +include $(OPENCM3_DIR)/mk/genlink-rules.mk + +%.bin: %.elf + @printf " OBJCOPY $(*).bin\n" + $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin + +%.elf: $(OBJS) $(LDSCRIPT) + @printf " LD $(*).elf\n" + $(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $*.elf + +%.o: %.c + @printf " CC $(*).c\n" + $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $*.o -c $*.c + +.PHONY: clean +clean: + @printf " CLEAN\n" + $(Q)rm -f *.elf *.bin *.o *.d *.map $(LDSCRIPT) + +%.stlink-flash: %.bin + @printf " FLASH $<\n" + $(STFLASH) write $(*).bin 0x8000000 + +.SECONDEXPANSION: +.SECONDARY: + +-include $(OBJS:.o=.d) diff --git a/test-opencm3/test.c b/test-opencm3/test.c new file mode 100644 index 0000000..a38394c --- /dev/null +++ b/test-opencm3/test.c @@ -0,0 +1,59 @@ +#include + +#include +#include +#include +#include + +typedef uint8_t byte; +typedef uint16_t u16; +typedef uint32_t u32; +typedef unsigned int uint; + +static void clock_setup(void) +{ + rcc_clock_setup_in_hse_8mhz_out_72mhz(); + + rcc_periph_clock_enable(RCC_GPIOC); +} + +static void gpio_setup(void) +{ + gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13); +} + +static volatile u32 ms_ticks; + +void sys_tick_handler(void) +{ + ms_ticks++; +} + +static void tick_setup(void) +{ + systick_set_frequency(1000, 72000000); + systick_counter_enable(); + systick_interrupt_enable(); +} + +static void delay_ms(uint ms) +{ + u32 start_ticks = ms_ticks; + while (ms_ticks - start_ticks < ms) + ; +} + +int main(void) +{ + clock_setup(); + gpio_setup(); + tick_setup(); + + /* Blink the LED (PC13) on the board. */ + for (;;) { + gpio_toggle(GPIOC, GPIO13); /* LED on/off */ + delay_ms(1000); + } + + return 0; +} -- 2.39.2