diff options
author | Matthias Hannig <matthias@hannig.cc> | 2018-07-13 16:13:00 +0200 |
---|---|---|
committer | Matthias Hannig <matthias@hannig.cc> | 2018-07-13 16:13:00 +0200 |
commit | 643208f4898400fb04bf0773c388551f58b0b5bf (patch) | |
tree | 5762c221e39442fbe114e41162d3395a987bab82 | |
parent | 6426b16179ba17637384aea5f04f13aad326a1c8 (diff) | |
download | olsndot-643208f4898400fb04bf0773c388551f58b0b5bf.tar.gz olsndot-643208f4898400fb04bf0773c388551f58b0b5bf.tar.bz2 olsndot-643208f4898400fb04bf0773c388551f58b0b5bf.zip |
added bluefnorf skeleton
-rw-r--r-- | bluefnorf/Makefile | 75 | ||||
-rw-r--r-- | bluefnorf/main.c | 39 | ||||
-rw-r--r-- | bluefnorf/main.map | 1759 | ||||
-rw-r--r-- | bluefnorf/openocd.cfg | 8 | ||||
-rw-r--r-- | bluefnorf/stm32f103c8t6.ld | 14 | ||||
-rw-r--r-- | bluefnorf/usb.c | 331 | ||||
-rw-r--r-- | bluefnorf/usb.h | 12 |
7 files changed, 2238 insertions, 0 deletions
diff --git a/bluefnorf/Makefile b/bluefnorf/Makefile new file mode 100644 index 0000000..c923e82 --- /dev/null +++ b/bluefnorf/Makefile @@ -0,0 +1,75 @@ + +OPENCM3_PATH ?= ../../libopencm3 +OPENCM3_LIBRARY_PATH ?= $(OPENCM3_PATH)/lib +OPENCM3_INCLUDE_PATH ?= $(OPENCM3_PATH)/include + +CC := arm-none-eabi-gcc +OBJCOPY := arm-none-eabi-objcopy +OBJDUMP := arm-none-eabi-objdump +SIZE := arm-none-eabi-size + + +# CFLAGS = -Wall -g -std=gnu11 -Os +CFLAGS = -Wall -g -std=gnu11 -O1 +CFLAGS += -mlittle-endian -mthumb +CFLAGS += -mcpu=cortex-m3 +CFLAGS += -mfix-cortex-m3-ldrd +CFLAGS += -msoft-float +#CFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections +CFLAGS += -Wl,-Map=main.map + + +CFLAGS += -Tstm32f103c8t6.ld + + +CFLAGS += -I$(OPENCM3_INCLUDE_PATH) +CFLAGS += -L$(OPENCM3_LIBRARY_PATH) + +CFLAGS += -DSTM32F1 + +CFLAGS += --static -nostartfiles + + + +LDFLAGS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group +LDFLAGS += -lopencm3_stm32f1 -lm + +AS = arm-none-eabi-as + +all: main.elf + + +cr4_fft_1024_stm32.o: cr4_fft_1024_stm32.s + $(AS) -o cr4_fft_1024_stm32.o cr4_fft_1024_stm32.s + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + + +main.elf: main.o usb.o + $(CC) $(CFLAGS) -o main.elf main.o usb.o $(LDFLAGS) + + $(OBJCOPY) -O ihex $@ $(@:.elf=.hex) + $(OBJCOPY) -O binary $@ $(@:.elf=.bin) + $(OBJDUMP) -St $@ >$(@:.elf=.lst) + $(SIZE) $@ + + + +flash: main.elf + openocd -f openocd.cfg -c "program $< verify reset exit" + + +clean: + rm -f *.o + rm -f *.hex + rm -f *.lst + rm -f *.map + rm -f *.elf + rm -f *.bin + + + + +.PHONY: flash clean + diff --git a/bluefnorf/main.c b/bluefnorf/main.c new file mode 100644 index 0000000..be45068 --- /dev/null +++ b/bluefnorf/main.c @@ -0,0 +1,39 @@ +/* + * ADC test: Try to get as many samples as possible + * using fast interleave mode and DMA + */ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <libopencm3/cm3/nvic.h> +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/gpio.h> +#include <libopencm3/stm32/adc.h> +#include <libopencm3/stm32/dma.h> + +#include "usb.h" + +int main(void) +{ + int i = 0; + // const char* line; + + // Clock Setup + rcc_clock_setup_in_hse_8mhz_out_72mhz(); + + // Initialize USB + usb_serial_init(); + + while (1) { + /* + if( i % 100000 == 0 ) { + // Read ADC + printf("Fnord 42 :: %d %d\r\n", _adc_samples[0], _adc_samples[1]); + } + */ + + i++; + } +} diff --git a/bluefnorf/main.map b/bluefnorf/main.map new file mode 100644 index 0000000..ecfe563 --- /dev/null +++ b/bluefnorf/main.map @@ -0,0 +1,1759 @@ +Archive member included to satisfy reference by file (symbol) + +/usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + usb.o (memset) +../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + usb.o (gpio_set_mode) +../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + main.o (rcc_clock_setup_in_hse_8mhz_out_72mhz) +../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + usb.o (gpio_set) +../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + usb.o (timer_reset) +../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + usb.o (rcc_periph_clock_enable) +../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) (flash_set_ws) +../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + usb.o (usbd_init) +../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + usb.o (usbd_register_control_callback) +../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + usb.o (usbd_register_set_config_callback) +../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + usb.o (st_usbfs_v1_usb_driver) +../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + (reset_handler) +../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + usb.o (nvic_enable_irq) +../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) (cm3_assert_failed) +../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) (flash_get_status_flags) +../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) (st_usbfs_set_address) +/usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-memcpy.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) (memcpy) +/usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) (strlen) + +Allocating common symbols +Common symbol size file + +usbd_control_buffer + 0x80 usb.o + +Discarded input sections + + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0x76 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000000000 0xdfd ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000000000 0x82c ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000000000 0x82c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0xdc ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000000000 0x82 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x52 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x55 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x35 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x9c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x57 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x1f ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x43 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x187 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x353 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x196 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000000000 0x1c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x52 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x55 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x35 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x9c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x16d ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x57 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x1f ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x43 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x187 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x353 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x35 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x196 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000000000 0x1c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x82c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000000000 0x1c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000000000 0x1a2 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000000000 0x16 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0xdc ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000000000 0x82 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .group 0x0000000000000000 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x82c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x3a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x29e ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x19c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x1c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_macro 0x0000000000000000 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +Memory Configuration + +Name Origin Length Attributes +rom 0x0000000008000000 0x0000000000010000 xr +ram 0x0000000020000000 0x0000000000005000 xrw +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD main.o +LOAD usb.o +START GROUP +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v7-m/libgcc.a +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libnosys.a +END GROUP +LOAD ../../libopencm3/lib/libopencm3_stm32f1.a +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libm.a +START GROUP +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v7-m/libgcc.a +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a +LOAD /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a +END GROUP + 0x0000000020005000 __estack = 0x20005000 + +.text 0x0000000008000000 0x2de0 + *(.vectors) + .vectors 0x0000000008000000 0x150 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + 0x0000000008000000 vector_table + *(.text*) + .text 0x0000000008000150 0xc main.o + 0x0000000008000150 main + .text 0x000000000800015c 0x1e4 usb.o + 0x00000000080001d4 usb_gpio_init + 0x000000000800020c usb_timer_init + 0x0000000008000258 usb_timer_start + 0x0000000008000268 tim4_isr + 0x0000000008000294 usb_serial_init + .text 0x0000000008000340 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + .text.memset 0x0000000008000340 0x9c /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + 0x0000000008000340 memset + .text 0x00000000080003dc 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .text.gpio_set_mode + 0x00000000080003dc 0x62 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + 0x00000000080003dc gpio_set_mode + *fill* 0x000000000800043e 0x2 + .text.gpio_set_eventout + 0x0000000008000440 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + 0x0000000008000440 gpio_set_eventout + .text.gpio_primary_remap + 0x0000000008000450 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + 0x0000000008000450 gpio_primary_remap + .text.gpio_secondary_remap + 0x0000000008000464 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + 0x0000000008000464 gpio_secondary_remap + .text 0x0000000008000474 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .text.rcc_osc_on.part.1 + 0x0000000008000474 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .text.rcc_osc_ready_int_clear + 0x0000000008000484 0x5c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000484 rcc_osc_ready_int_clear + .text.rcc_osc_ready_int_enable + 0x00000000080004e0 0x5c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080004e0 rcc_osc_ready_int_enable + .text.rcc_osc_ready_int_disable + 0x000000000800053c 0x5c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x000000000800053c rcc_osc_ready_int_disable + .text.rcc_osc_ready_int_flag + 0x0000000008000598 0x54 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000598 rcc_osc_ready_int_flag + .text.rcc_css_int_clear + 0x00000000080005ec 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080005ec rcc_css_int_clear + .text.rcc_css_int_flag + 0x00000000080005fc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080005fc rcc_css_int_flag + .text.rcc_is_osc_ready + 0x000000000800060c 0x5c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x000000000800060c rcc_is_osc_ready + .text.rcc_wait_for_osc_ready + 0x0000000008000668 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000668 rcc_wait_for_osc_ready + .text.rcc_osc_on + 0x0000000008000678 0x54 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000678 rcc_osc_on + .text.rcc_osc_off + 0x00000000080006cc 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080006cc rcc_osc_off + .text.rcc_css_enable + 0x0000000008000724 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000724 rcc_css_enable + .text.rcc_css_disable + 0x0000000008000734 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000734 rcc_css_disable + .text.rcc_set_sysclk_source + 0x0000000008000744 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000744 rcc_set_sysclk_source + .text.rcc_set_pll_multiplication_factor + 0x0000000008000758 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000758 rcc_set_pll_multiplication_factor + .text.rcc_set_pll2_multiplication_factor + 0x000000000800076c 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x000000000800076c rcc_set_pll2_multiplication_factor + .text.rcc_set_pll3_multiplication_factor + 0x0000000008000780 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000780 rcc_set_pll3_multiplication_factor + .text.rcc_set_pll_source + 0x0000000008000794 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000794 rcc_set_pll_source + .text.rcc_set_pllxtpre + 0x00000000080007a8 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080007a8 rcc_set_pllxtpre + .text.rcc_rtc_clock_enabled_flag + 0x00000000080007bc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080007bc rcc_rtc_clock_enabled_flag + .text.rcc_enable_rtc_clock + 0x00000000080007cc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080007cc rcc_enable_rtc_clock + .text.rcc_set_rtc_clock_source + 0x00000000080007dc 0x90 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080007dc rcc_set_rtc_clock_source + .text.rcc_set_adcpre + 0x000000000800086c 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x000000000800086c rcc_set_adcpre + .text.rcc_set_ppre2 + 0x0000000008000880 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000880 rcc_set_ppre2 + .text.rcc_set_ppre1 + 0x0000000008000894 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000894 rcc_set_ppre1 + .text.rcc_set_hpre + 0x00000000080008a8 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080008a8 rcc_set_hpre + .text.rcc_set_usbpre + 0x00000000080008bc 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080008bc rcc_set_usbpre + .text.rcc_set_prediv1 + 0x00000000080008d4 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080008d4 rcc_set_prediv1 + .text.rcc_set_prediv2 + 0x00000000080008e8 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080008e8 rcc_set_prediv2 + .text.rcc_set_prediv1_source + 0x00000000080008fc 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x00000000080008fc rcc_set_prediv1_source + .text.rcc_system_clock_source + 0x0000000008000914 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000914 rcc_system_clock_source + .text.rcc_clock_setup_in_hsi_out_64mhz + 0x0000000008000924 0x74 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000924 rcc_clock_setup_in_hsi_out_64mhz + .text.rcc_clock_setup_in_hsi_out_48mhz + 0x0000000008000998 0x84 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000998 rcc_clock_setup_in_hsi_out_48mhz + .text.rcc_clock_setup_in_hsi_out_24mhz + 0x0000000008000a1c 0x70 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000a1c rcc_clock_setup_in_hsi_out_24mhz + .text.rcc_clock_setup_in_hse_8mhz_out_24mhz + 0x0000000008000a8c 0x88 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000a8c rcc_clock_setup_in_hse_8mhz_out_24mhz + .text.rcc_clock_setup_in_hse_8mhz_out_72mhz + 0x0000000008000b14 0x8c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000b14 rcc_clock_setup_in_hse_8mhz_out_72mhz + .text.rcc_clock_setup_in_hse_12mhz_out_72mhz + 0x0000000008000ba0 0x8c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000ba0 rcc_clock_setup_in_hse_12mhz_out_72mhz + .text.rcc_clock_setup_in_hse_16mhz_out_72mhz + 0x0000000008000c2c 0x8c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000c2c rcc_clock_setup_in_hse_16mhz_out_72mhz + .text.rcc_clock_setup_in_hse_25mhz_out_72mhz + 0x0000000008000cb8 0xac ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000cb8 rcc_clock_setup_in_hse_25mhz_out_72mhz + .text.rcc_backupdomain_reset + 0x0000000008000d64 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000008000d64 rcc_backupdomain_reset + .text 0x0000000008000d7c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .text.gpio_set + 0x0000000008000d7c 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000d7c gpio_set + .text.gpio_clear + 0x0000000008000d80 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000d80 gpio_clear + .text.gpio_get + 0x0000000008000d86 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000d86 gpio_get + .text.gpio_toggle + 0x0000000008000d8c 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000d8c gpio_toggle + .text.gpio_port_read + 0x0000000008000d9e 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000d9e gpio_port_read + .text.gpio_port_write + 0x0000000008000da4 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000da4 gpio_port_write + .text.gpio_port_config_lock + 0x0000000008000da8 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x0000000008000da8 gpio_port_config_lock + .text 0x0000000008000db8 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .text.timer_reset + 0x0000000008000db8 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000db8 timer_reset + .text.timer_enable_irq + 0x0000000008000e38 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e38 timer_enable_irq + .text.timer_disable_irq + 0x0000000008000e40 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e40 timer_disable_irq + .text.timer_interrupt_source + 0x0000000008000e4a 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e4a timer_interrupt_source + .text.timer_get_flag + 0x0000000008000e5e 0xc ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e5e timer_get_flag + .text.timer_clear_flag + 0x0000000008000e6a 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e6a timer_clear_flag + .text.timer_set_mode + 0x0000000008000e70 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e70 timer_set_mode + .text.timer_set_clock_division + 0x0000000008000e82 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e82 timer_set_clock_division + .text.timer_enable_preload + 0x0000000008000e96 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000e96 timer_enable_preload + .text.timer_disable_preload + 0x0000000008000ea0 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ea0 timer_disable_preload + .text.timer_set_alignment + 0x0000000008000eaa 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000eaa timer_set_alignment + .text.timer_direction_up + 0x0000000008000ebe 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ebe timer_direction_up + .text.timer_direction_down + 0x0000000008000ec8 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ec8 timer_direction_down + .text.timer_one_shot_mode + 0x0000000008000ed2 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ed2 timer_one_shot_mode + .text.timer_continuous_mode + 0x0000000008000edc 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000edc timer_continuous_mode + .text.timer_update_on_any + 0x0000000008000ee6 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ee6 timer_update_on_any + .text.timer_update_on_overflow + 0x0000000008000ef0 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000ef0 timer_update_on_overflow + .text.timer_enable_update_event + 0x0000000008000efa 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000efa timer_enable_update_event + .text.timer_disable_update_event + 0x0000000008000f04 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f04 timer_disable_update_event + .text.timer_enable_counter + 0x0000000008000f0e 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f0e timer_enable_counter + .text.timer_disable_counter + 0x0000000008000f18 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f18 timer_disable_counter + .text.timer_set_output_idle_state + 0x0000000008000f22 0xc ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f22 timer_set_output_idle_state + .text.timer_reset_output_idle_state + 0x0000000008000f2e 0xe ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f2e timer_reset_output_idle_state + .text.timer_set_ti1_ch123_xor + 0x0000000008000f3c 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f3c timer_set_ti1_ch123_xor + .text.timer_set_ti1_ch1 + 0x0000000008000f46 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f46 timer_set_ti1_ch1 + .text.timer_set_master_mode + 0x0000000008000f50 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f50 timer_set_master_mode + .text.timer_set_dma_on_compare_event + 0x0000000008000f60 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f60 timer_set_dma_on_compare_event + .text.timer_set_dma_on_update_event + 0x0000000008000f6a 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f6a timer_set_dma_on_update_event + .text.timer_enable_compare_control_update_on_trigger + 0x0000000008000f74 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f74 timer_enable_compare_control_update_on_trigger + .text.timer_disable_compare_control_update_on_trigger + 0x0000000008000f7e 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f7e timer_disable_compare_control_update_on_trigger + .text.timer_enable_preload_complementry_enable_bits + 0x0000000008000f88 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f88 timer_enable_preload_complementry_enable_bits + .text.timer_disable_preload_complementry_enable_bits + 0x0000000008000f92 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f92 timer_disable_preload_complementry_enable_bits + .text.timer_set_prescaler + 0x0000000008000f9c 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000f9c timer_set_prescaler + .text.timer_set_repetition_counter + 0x0000000008000fa0 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000fa0 timer_set_repetition_counter + .text.timer_set_period + 0x0000000008000fa4 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000fa4 timer_set_period + .text.timer_enable_oc_clear + 0x0000000008000fa8 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000fa8 timer_enable_oc_clear + .text.timer_disable_oc_clear + 0x0000000008000fdc 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008000fdc timer_disable_oc_clear + .text.timer_set_oc_fast_mode + 0x0000000008001010 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001010 timer_set_oc_fast_mode + .text.timer_set_oc_slow_mode + 0x0000000008001044 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001044 timer_set_oc_slow_mode + .text.timer_set_oc_mode + 0x0000000008001078 0x18c ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001078 timer_set_oc_mode + .text.timer_enable_oc_preload + 0x0000000008001204 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001204 timer_enable_oc_preload + .text.timer_disable_oc_preload + 0x0000000008001238 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001238 timer_disable_oc_preload + .text.timer_set_oc_polarity_high + 0x000000000800126c 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800126c timer_set_oc_polarity_high + .text.timer_set_oc_polarity_low + 0x00000000080012b6 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080012b6 timer_set_oc_polarity_low + .text.timer_enable_oc_output + 0x0000000008001300 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001300 timer_enable_oc_output + .text.timer_disable_oc_output + 0x000000000800134a 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800134a timer_disable_oc_output + .text.timer_set_oc_idle_state_set + 0x0000000008001394 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001394 timer_set_oc_idle_state_set + .text.timer_set_oc_idle_state_unset + 0x00000000080013de 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080013de timer_set_oc_idle_state_unset + .text.timer_set_oc_value + 0x0000000008001428 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001428 timer_set_oc_value + .text.timer_enable_break_main_output + 0x0000000008001448 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001448 timer_enable_break_main_output + .text.timer_disable_break_main_output + 0x0000000008001452 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001452 timer_disable_break_main_output + .text.timer_enable_break_automatic_output + 0x000000000800145c 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800145c timer_enable_break_automatic_output + .text.timer_disable_break_automatic_output + 0x0000000008001466 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001466 timer_disable_break_automatic_output + .text.timer_set_break_polarity_high + 0x0000000008001470 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001470 timer_set_break_polarity_high + .text.timer_set_break_polarity_low + 0x000000000800147a 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800147a timer_set_break_polarity_low + .text.timer_enable_break + 0x0000000008001484 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001484 timer_enable_break + .text.timer_disable_break + 0x000000000800148e 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800148e timer_disable_break + .text.timer_set_enabled_off_state_in_run_mode + 0x0000000008001498 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001498 timer_set_enabled_off_state_in_run_mode + .text.timer_set_disabled_off_state_in_run_mode + 0x00000000080014a2 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014a2 timer_set_disabled_off_state_in_run_mode + .text.timer_set_enabled_off_state_in_idle_mode + 0x00000000080014ac 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014ac timer_set_enabled_off_state_in_idle_mode + .text.timer_set_disabled_off_state_in_idle_mode + 0x00000000080014b6 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014b6 timer_set_disabled_off_state_in_idle_mode + .text.timer_set_deadtime + 0x00000000080014c0 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014c0 timer_set_deadtime + .text.timer_set_break_lock + 0x00000000080014c8 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014c8 timer_set_break_lock + .text.timer_generate_event + 0x00000000080014cc 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014cc timer_generate_event + .text.timer_get_counter + 0x00000000080014d4 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014d4 timer_get_counter + .text.timer_set_counter + 0x00000000080014d8 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014d8 timer_set_counter + .text.timer_ic_set_filter + 0x00000000080014dc 0x50 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080014dc timer_ic_set_filter + .text.timer_ic_set_prescaler + 0x000000000800152c 0x50 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800152c timer_ic_set_prescaler + .text.timer_ic_set_input + 0x000000000800157c 0x66 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x000000000800157c timer_ic_set_input + .text.timer_ic_enable + 0x00000000080015e2 0xe ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080015e2 timer_ic_enable + .text.timer_ic_disable + 0x00000000080015f0 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x00000000080015f0 timer_ic_disable + .text.timer_slave_set_filter + 0x0000000008001602 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001602 timer_slave_set_filter + .text.timer_slave_set_prescaler + 0x0000000008001614 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001614 timer_slave_set_prescaler + .text.timer_slave_set_polarity + 0x0000000008001626 0x12 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001626 timer_slave_set_polarity + .text.timer_slave_set_mode + 0x0000000008001638 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001638 timer_slave_set_mode + .text.timer_slave_set_trigger + 0x0000000008001648 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0x0000000008001648 timer_slave_set_trigger + .text 0x0000000008001658 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .text.rcc_peripheral_enable_clock + 0x0000000008001658 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001658 rcc_peripheral_enable_clock + .text.rcc_peripheral_disable_clock + 0x0000000008001660 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001660 rcc_peripheral_disable_clock + .text.rcc_peripheral_reset + 0x000000000800166a 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x000000000800166a rcc_peripheral_reset + .text.rcc_peripheral_clear_reset + 0x0000000008001672 0xa ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001672 rcc_peripheral_clear_reset + .text.rcc_periph_clock_enable + 0x000000000800167c 0x1a ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x000000000800167c rcc_periph_clock_enable + .text.rcc_periph_clock_disable + 0x0000000008001696 0x1e ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001696 rcc_periph_clock_disable + .text.rcc_periph_reset_pulse + 0x00000000080016b4 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x00000000080016b4 rcc_periph_reset_pulse + .text.rcc_periph_reset_hold + 0x00000000080016d6 0x1a ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x00000000080016d6 rcc_periph_reset_hold + .text.rcc_periph_reset_release + 0x00000000080016f0 0x1e ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x00000000080016f0 rcc_periph_reset_release + *fill* 0x000000000800170e 0x2 + .text.rcc_set_mco + 0x0000000008001710 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001710 rcc_set_mco + .text.rcc_osc_bypass_enable + 0x0000000008001724 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x0000000008001724 rcc_osc_bypass_enable + .text.rcc_osc_bypass_disable + 0x000000000800174c 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x000000000800174c rcc_osc_bypass_disable + .text 0x0000000008001774 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .text.flash_prefetch_enable + 0x0000000008001774 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001774 flash_prefetch_enable + .text.flash_prefetch_disable + 0x0000000008001784 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001784 flash_prefetch_disable + .text.flash_set_ws + 0x0000000008001794 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001794 flash_set_ws + .text.flash_unlock + 0x00000000080017a8 0x24 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x00000000080017a8 flash_unlock + .text.flash_lock + 0x00000000080017cc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x00000000080017cc flash_lock + .text.flash_clear_pgerr_flag + 0x00000000080017dc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x00000000080017dc flash_clear_pgerr_flag + .text.flash_clear_eop_flag + 0x00000000080017ec 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x00000000080017ec flash_clear_eop_flag + .text.flash_clear_wrprterr_flag + 0x00000000080017fc 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x00000000080017fc flash_clear_wrprterr_flag + .text.flash_clear_bsy_flag + 0x000000000800180c 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x000000000800180c flash_clear_bsy_flag + .text.flash_wait_for_last_operation + 0x000000000800181c 0xc ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x000000000800181c flash_wait_for_last_operation + .text.flash_program_word + 0x0000000008001828 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001828 flash_program_word + .text.flash_unlock_option_bytes + 0x0000000008001840 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001840 flash_unlock_option_bytes + .text.flash_erase_option_bytes + 0x0000000008001858 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x0000000008001858 flash_erase_option_bytes + .text.flash_program_option_bytes + 0x000000000800188c 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x000000000800188c flash_program_option_bytes + .text 0x00000000080018c0 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .text.usbd_init + 0x00000000080018c0 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x00000000080018c0 usbd_init + .text.usbd_register_reset_callback + 0x0000000008001918 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x0000000008001918 usbd_register_reset_callback + .text.usbd_register_suspend_callback + 0x000000000800191c 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800191c usbd_register_suspend_callback + .text.usbd_register_resume_callback + 0x0000000008001920 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x0000000008001920 usbd_register_resume_callback + .text.usbd_register_sof_callback + 0x0000000008001924 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x0000000008001924 usbd_register_sof_callback + .text.usbd_poll + 0x0000000008001928 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x0000000008001928 usbd_poll + .text.usbd_disconnect + 0x0000000008001930 0xc ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x0000000008001930 usbd_disconnect + .text.usbd_ep_setup + 0x000000000800193c 0xe ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800193c usbd_ep_setup + .text._usbd_reset + 0x000000000800194a 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800194a _usbd_reset + .text.usbd_ep_write_packet + 0x000000000800197e 0xe ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800197e usbd_ep_write_packet + .text.usbd_ep_read_packet + 0x000000000800198c 0xe ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800198c usbd_ep_read_packet + .text.usbd_ep_stall_set + 0x000000000800199a 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x000000000800199a usbd_ep_stall_set + .text.usbd_ep_stall_get + 0x00000000080019a2 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x00000000080019a2 usbd_ep_stall_get + .text.usbd_ep_nak_set + 0x00000000080019aa 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x00000000080019aa usbd_ep_nak_set + .text 0x00000000080019b2 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.stall_transaction + 0x00000000080019b2 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.usb_control_recv_chunk + 0x00000000080019c6 0x3c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.usb_control_send_chunk + 0x0000000008001a02 0x54 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.usb_control_request_dispatch + 0x0000000008001a56 0x62 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.usb_control_setup_read + 0x0000000008001ab8 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .text.usbd_register_control_callback + 0x0000000008001b22 0x26 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + 0x0000000008001b22 usbd_register_control_callback + .text._usbd_control_setup + 0x0000000008001b48 0x70 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + 0x0000000008001b48 _usbd_control_setup + .text._usbd_control_out + 0x0000000008001bb8 0x84 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + 0x0000000008001bb8 _usbd_control_out + .text._usbd_control_in + 0x0000000008001c3c 0x64 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + 0x0000000008001c3c _usbd_control_in + .text 0x0000000008001ca0 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_set_configuration + 0x0000000008001ca0 0x92 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_get_configuration + 0x0000000008001d32 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_get_interface + 0x0000000008001d54 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_interface_get_status + 0x0000000008001d88 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_endpoint_get_status + 0x0000000008001da0 0x2a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_endpoint_stall + 0x0000000008001dca 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_endpoint_unstall + 0x0000000008001dda 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_set_address + 0x0000000008001dea 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_set_interface + 0x0000000008001e12 0x4a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_get_descriptor + 0x0000000008001e5c 0x258 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usb_standard_device_get_status + 0x00000000080020b4 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .text.usbd_register_set_config_callback + 0x00000000080020cc 0x24 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x00000000080020cc usbd_register_set_config_callback + .text.usbd_register_set_altsetting_callback + 0x00000000080020f0 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x00000000080020f0 usbd_register_set_altsetting_callback + *fill* 0x00000000080020f6 0x2 + .text._usbd_standard_request_device + 0x00000000080020f8 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x00000000080020f8 _usbd_standard_request_device + .text._usbd_standard_request_interface + 0x0000000008002118 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x0000000008002118 _usbd_standard_request_interface + .text._usbd_standard_request_endpoint + 0x0000000008002138 0x3c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x0000000008002138 _usbd_standard_request_endpoint + .text._usbd_standard_request + 0x0000000008002174 0x30 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x0000000008002174 _usbd_standard_request + .text 0x00000000080021a4 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .text.st_usbfs_v1_usbd_init + 0x00000000080021a4 0x30 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .text.st_usbfs_copy_to_pm + 0x00000000080021d4 0x1a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + 0x00000000080021d4 st_usbfs_copy_to_pm + .text.st_usbfs_copy_from_pm + 0x00000000080021ee 0x2a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + 0x00000000080021ee st_usbfs_copy_from_pm + .text 0x0000000008002218 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .text.blocking_handler + 0x0000000008002218 0x2 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + 0x0000000008002218 exti0_isr + 0x0000000008002218 rtc_isr + 0x0000000008002218 tim7_isr + 0x0000000008002218 adc1_2_isr + 0x0000000008002218 tim1_trg_com_isr + 0x0000000008002218 usb_hp_can_tx_isr + 0x0000000008002218 tim6_isr + 0x0000000008002218 usb_wakeup_isr + 0x0000000008002218 blocking_handler + 0x0000000008002218 tim5_isr + 0x0000000008002218 otg_fs_isr + 0x0000000008002218 spi1_isr + 0x0000000008002218 exti2_isr + 0x0000000008002218 dma1_channel6_isr + 0x0000000008002218 can_rx1_isr + 0x0000000008002218 dma1_channel5_isr + 0x0000000008002218 dma2_channel5_isr + 0x0000000008002218 usart1_isr + 0x0000000008002218 usage_fault_handler + 0x0000000008002218 tim8_trg_com_isr + 0x0000000008002218 can2_rx0_isr + 0x0000000008002218 tim1_brk_isr + 0x0000000008002218 can2_rx1_isr + 0x0000000008002218 tim1_cc_isr + 0x0000000008002218 sdio_isr + 0x0000000008002218 eth_isr + 0x0000000008002218 dma1_channel4_isr + 0x0000000008002218 tim8_brk_isr + 0x0000000008002218 dma2_channel4_5_isr + 0x0000000008002218 pvd_isr + 0x0000000008002218 rcc_isr + 0x0000000008002218 flash_isr + 0x0000000008002218 uart4_isr + 0x0000000008002218 rtc_alarm_isr + 0x0000000008002218 exti15_10_isr + 0x0000000008002218 hard_fault_handler + 0x0000000008002218 exti1_isr + 0x0000000008002218 i2c1_ev_isr + 0x0000000008002218 dma2_channel1_isr + 0x0000000008002218 spi2_isr + 0x0000000008002218 tim8_up_isr + 0x0000000008002218 dma2_channel2_isr + 0x0000000008002218 exti3_isr + 0x0000000008002218 adc3_isr + 0x0000000008002218 tim3_isr + 0x0000000008002218 usart2_isr + 0x0000000008002218 usb_lp_can_rx0_isr + 0x0000000008002218 i2c2_er_isr + 0x0000000008002218 i2c2_ev_isr + 0x0000000008002218 uart5_isr + 0x0000000008002218 fsmc_isr + 0x0000000008002218 dma1_channel1_isr + 0x0000000008002218 exti4_isr + 0x0000000008002218 mem_manage_handler + 0x0000000008002218 can2_tx_isr + 0x0000000008002218 exti9_5_isr + 0x0000000008002218 dma2_channel3_isr + 0x0000000008002218 dma1_channel7_isr + 0x0000000008002218 tim1_up_isr + 0x0000000008002218 can2_sce_isr + 0x0000000008002218 dma1_channel2_isr + 0x0000000008002218 i2c1_er_isr + 0x0000000008002218 can_sce_isr + 0x0000000008002218 tim8_cc_isr + 0x0000000008002218 tamper_isr + 0x0000000008002218 eth_wkup_isr + 0x0000000008002218 bus_fault_handler + 0x0000000008002218 wwdg_isr + 0x0000000008002218 dma1_channel3_isr + 0x0000000008002218 spi3_isr + 0x0000000008002218 tim2_isr + 0x0000000008002218 usart3_isr + .text.null_handler + 0x000000000800221a 0x2 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + 0x000000000800221a null_handler + 0x000000000800221a sv_call_handler + 0x000000000800221a pend_sv_handler + 0x000000000800221a debug_monitor_handler + 0x000000000800221a sys_tick_handler + 0x000000000800221a nmi_handler + .text.reset_handler + 0x000000000800221c 0x90 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + 0x000000000800221c reset_handler + .text 0x00000000080022ac 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .text.nvic_enable_irq + 0x00000000080022ac 0x1a ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x00000000080022ac nvic_enable_irq + *fill* 0x00000000080022c6 0x2 + .text.nvic_disable_irq + 0x00000000080022c8 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x00000000080022c8 nvic_disable_irq + .text.nvic_get_pending_irq + 0x00000000080022e0 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x00000000080022e0 nvic_get_pending_irq + .text.nvic_set_pending_irq + 0x0000000008002302 0x1a ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x0000000008002302 nvic_set_pending_irq + .text.nvic_clear_pending_irq + 0x000000000800231c 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x000000000800231c nvic_clear_pending_irq + .text.nvic_get_irq_enabled + 0x0000000008002334 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x0000000008002334 nvic_get_irq_enabled + *fill* 0x0000000008002356 0x2 + .text.nvic_set_priority + 0x0000000008002358 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x0000000008002358 nvic_set_priority + .text.nvic_get_active_irq + 0x0000000008002378 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x0000000008002378 nvic_get_active_irq + *fill* 0x000000000800239a 0x2 + .text.nvic_generate_software_interrupt + 0x000000000800239c 0x14 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x000000000800239c nvic_generate_software_interrupt + .text 0x00000000080023b0 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .text.cm3_assert_failed + 0x00000000080023b0 0x2 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + 0x00000000080023b0 cm3_assert_failed + .text.cm3_assert_failed_verbose + 0x00000000080023b2 0x6 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + 0x00000000080023b2 cm3_assert_failed_verbose + .text 0x00000000080023b8 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .text.flash_halfcycle_enable + 0x00000000080023b8 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080023b8 flash_halfcycle_enable + .text.flash_halfcycle_disable + 0x00000000080023c8 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080023c8 flash_halfcycle_disable + .text.flash_unlock_upper + 0x00000000080023d8 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080023d8 flash_unlock_upper + .text.flash_lock_upper + 0x000000000800240c 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800240c flash_lock_upper + .text.flash_clear_pgerr_flag_upper + 0x000000000800241c 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800241c flash_clear_pgerr_flag_upper + .text.flash_clear_eop_flag_upper + 0x000000000800243c 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800243c flash_clear_eop_flag_upper + .text.flash_clear_wrprterr_flag_upper + 0x000000000800245c 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800245c flash_clear_wrprterr_flag_upper + .text.flash_clear_bsy_flag_upper + 0x000000000800247c 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800247c flash_clear_bsy_flag_upper + .text.flash_clear_status_flags + 0x000000000800249c 0x38 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x000000000800249c flash_clear_status_flags + .text.flash_get_status_flags + 0x00000000080024d4 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080024d4 flash_get_status_flags + .text.flash_program_half_word + 0x00000000080024fc 0x64 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080024fc flash_program_half_word + .text.flash_erase_page + 0x0000000008002560 0x7c ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x0000000008002560 flash_erase_page + .text.flash_erase_all_pages + 0x00000000080025dc 0x48 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x00000000080025dc flash_erase_all_pages + .text 0x0000000008002624 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .text.st_usbfs_set_address + 0x0000000008002624 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000008002624 st_usbfs_set_address + .text.st_usbfs_set_ep_rx_bufsize + 0x0000000008002634 0x4c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000008002634 st_usbfs_set_ep_rx_bufsize + .text.st_usbfs_ep_setup + 0x0000000008002680 0x134 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000008002680 st_usbfs_ep_setup + .text.st_usbfs_endpoints_reset + 0x00000000080027b4 0x44 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x00000000080027b4 st_usbfs_endpoints_reset + .text.st_usbfs_ep_stall_set + 0x00000000080027f8 0xc4 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x00000000080027f8 st_usbfs_ep_stall_set + .text.st_usbfs_ep_stall_get + 0x00000000080028bc 0x38 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x00000000080028bc st_usbfs_ep_stall_get + .text.st_usbfs_ep_nak_set + 0x00000000080028f4 0x3c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x00000000080028f4 st_usbfs_ep_nak_set + .text.st_usbfs_ep_write_packet + 0x0000000008002930 0x7c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000008002930 st_usbfs_ep_write_packet + .text.st_usbfs_ep_read_packet + 0x00000000080029ac 0xa8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x00000000080029ac st_usbfs_ep_read_packet + .text.st_usbfs_poll + 0x0000000008002a54 0xe4 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000008002a54 st_usbfs_poll + .text 0x0000000008002b38 0xec /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-memcpy.o) + 0x0000000008002b38 memcpy + .text 0x0000000008002c24 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + .text.strlen 0x0000000008002c24 0x5c /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + 0x0000000008002c24 strlen + 0x0000000008002c80 . = ALIGN (0x4) + *(.rodata*) + .rodata 0x0000000008002c80 0xa3 usb.o + *fill* 0x0000000008002d23 0x1 + .rodata.str1.4 + 0x0000000008002d24 0x30 usb.o + 0x38 (size before relaxing) + .rodata.CSWTCH.31 + 0x0000000008002d54 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .rodata.CSWTCH.33 + 0x0000000008002d7c 0x30 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .rodata.st_usbfs_v1_usb_driver + 0x0000000008002dac 0x34 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + 0x0000000008002dac st_usbfs_v1_usb_driver + 0x0000000008002de0 . = ALIGN (0x4) + +.glue_7 0x0000000008002de0 0x0 + .glue_7 0x0000000008002de0 0x0 linker stubs + +.glue_7t 0x0000000008002de0 0x0 + .glue_7t 0x0000000008002de0 0x0 linker stubs + +.vfp11_veneer 0x0000000008002de0 0x0 + .vfp11_veneer 0x0000000008002de0 0x0 linker stubs + +.v4_bx 0x0000000008002de0 0x0 + .v4_bx 0x0000000008002de0 0x0 linker stubs + +.iplt 0x0000000008002de0 0x0 + .iplt 0x0000000008002de0 0x0 main.o + +.rel.dyn 0x0000000008002de0 0x0 + .rel.iplt 0x0000000008002de0 0x0 main.o + +.preinit_array 0x0000000008002de0 0x0 + 0x0000000008002de0 . = ALIGN (0x4) + 0x0000000008002de0 __preinit_array_start = . + *(.preinit_array) + 0x0000000008002de0 __preinit_array_end = . + +.init_array 0x0000000008002de0 0x0 + 0x0000000008002de0 . = ALIGN (0x4) + 0x0000000008002de0 __init_array_start = . + *(SORT(.init_array.*)) + *(.init_array) + 0x0000000008002de0 __init_array_end = . + +.fini_array 0x0000000008002de0 0x0 + 0x0000000008002de0 . = ALIGN (0x4) + 0x0000000008002de0 __fini_array_start = . + *(.fini_array) + *(SORT(.fini_array.*)) + 0x0000000008002de0 __fini_array_end = . + +.ARM.extab + *(.ARM.extab*) + +.ARM.exidx 0x0000000008002de0 0x0 + 0x0000000008002de0 __exidx_start = . + *(.ARM.exidx*) + 0x0000000008002de0 __exidx_end = . + 0x0000000008002de0 . = ALIGN (0x4) + 0x0000000008002de0 _etext = . + +.data 0x0000000020000000 0x18 load address 0x0000000008002de0 + 0x0000000020000000 _data = . + *(.data*) + .data 0x0000000020000000 0x0 main.o + .data 0x0000000020000000 0xc usb.o + .data 0x000000002000000c 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + .data 0x000000002000000c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .data 0x000000002000000c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .data.rcc_ahb_frequency + 0x000000002000000c 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x000000002000000c rcc_ahb_frequency + .data.rcc_apb1_frequency + 0x0000000020000010 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000020000010 rcc_apb1_frequency + .data.rcc_apb2_frequency + 0x0000000020000014 0x4 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x0000000020000014 rcc_apb2_frequency + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .data 0x0000000020000018 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .data 0x0000000020000018 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-memcpy.o) + .data 0x0000000020000018 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + 0x0000000020000018 . = ALIGN (0x4) + 0x0000000020000018 _edata = . + 0x0000000008002de0 _data_loadaddr = LOADADDR (.data) + +.igot.plt 0x0000000020000018 0x0 load address 0x0000000008002df8 + .igot.plt 0x0000000020000018 0x0 main.o + +.bss 0x0000000020000018 0x388 load address 0x0000000008002df8 + *(.bss*) + .bss 0x0000000020000018 0x0 main.o + .bss 0x0000000020000018 0x204 usb.o + .bss 0x000000002000021c 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .bss 0x000000002000021c 0x0 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .bss.st_usbfs_dev + 0x000000002000021c 0xfc ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x000000002000021c st_usbfs_dev + .bss.st_usbfs_force_nak + 0x0000000020000318 0x8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x0000000020000318 st_usbfs_force_nak + .bss 0x0000000020000320 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-memcpy.o) + .bss 0x0000000020000320 0x0 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + *(COMMON) + COMMON 0x0000000020000320 0x80 usb.o + 0x0000000020000320 usbd_control_buffer + 0x00000000200003a0 . = ALIGN (0x4) + 0x00000000200003a0 _ebss = . + +/DISCARD/ + *(.eh_frame) + 0x00000000200003a0 . = ALIGN (0x4) + 0x00000000200003a0 end = . + 0x0000000020005000 PROVIDE (_stack, (ORIGIN (ram) + LENGTH (ram))) +OUTPUT(main.elf elf32-littlearm) + +.debug_info 0x0000000000000000 0xbd61 + .debug_info 0x0000000000000000 0x988 main.o + .debug_info 0x0000000000000988 0x15da usb.o + .debug_info 0x0000000000001f62 0x1dd ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_info 0x000000000000213f 0x114b ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_info 0x000000000000328a 0x22c ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_info 0x00000000000034b6 0x11b0 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_info 0x0000000000004666 0x5f2 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_info 0x0000000000004c58 0x278 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_info 0x0000000000004ed0 0x161d ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_info 0x00000000000064ed 0x1793 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_info 0x0000000000007c80 0x1cc7 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_info 0x0000000000009947 0xcc9 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_info 0x000000000000a610 0x2af ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_info 0x000000000000a8bf 0x214 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_info 0x000000000000aad3 0xee ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_info 0x000000000000abc1 0x2ab ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_info 0x000000000000ae6c 0xef5 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_abbrev 0x0000000000000000 0x203e + .debug_abbrev 0x0000000000000000 0x1e7 main.o + .debug_abbrev 0x00000000000001e7 0x375 usb.o + .debug_abbrev 0x000000000000055c 0xb7 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_abbrev 0x0000000000000613 0x27f ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_abbrev 0x0000000000000892 0xf4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_abbrev 0x0000000000000986 0x18f ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_abbrev 0x0000000000000b15 0x137 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_abbrev 0x0000000000000c4c 0xcd ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_abbrev 0x0000000000000d19 0x2ab ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_abbrev 0x0000000000000fc4 0x3bf ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_abbrev 0x0000000000001383 0x4b0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_abbrev 0x0000000000001833 0x203 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_abbrev 0x0000000000001a36 0x127 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_abbrev 0x0000000000001b5d 0xa6 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_abbrev 0x0000000000001c03 0x8f ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_abbrev 0x0000000000001c92 0x11a ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_abbrev 0x0000000000001dac 0x292 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_loc 0x0000000000000000 0x3675 + .debug_loc 0x0000000000000000 0x14 main.o + .debug_loc 0x0000000000000014 0x192 usb.o + .debug_loc 0x00000000000001a6 0x172 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_loc 0x0000000000000318 0x480 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_loc 0x0000000000000798 0x97 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_loc 0x000000000000082f 0x4e2 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_loc 0x0000000000000d11 0x108 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_loc 0x0000000000000e19 0xd3 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_loc 0x0000000000000eec 0x4b1 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_loc 0x000000000000139d 0x69c ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_loc 0x0000000000001a39 0x10e6 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_loc 0x0000000000002b1f 0x15e ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_loc 0x0000000000002c7d 0xea ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_loc 0x0000000000002d67 0x129 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_loc 0x0000000000002e90 0x84 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_loc 0x0000000000002f14 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_loc 0x0000000000002f94 0x6e1 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_aranges 0x0000000000000000 0x8d0 + .debug_aranges + 0x0000000000000000 0x20 main.o + .debug_aranges + 0x0000000000000020 0x20 usb.o + .debug_aranges + 0x0000000000000040 0x38 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_aranges + 0x0000000000000078 0x158 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_aranges + 0x00000000000001d0 0x50 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_aranges + 0x0000000000000220 0x270 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_aranges + 0x0000000000000490 0x68 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_aranges + 0x00000000000004f8 0x88 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_aranges + 0x0000000000000580 0x88 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_aranges + 0x0000000000000608 0x60 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_aranges + 0x0000000000000668 0x98 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_aranges + 0x0000000000000700 0x30 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_aranges + 0x0000000000000730 0x30 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_aranges + 0x0000000000000760 0x60 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_aranges + 0x00000000000007c0 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_aranges + 0x00000000000007e8 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_aranges + 0x0000000000000868 0x68 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_line 0x0000000000000000 0x5153 + .debug_line 0x0000000000000000 0x2d9 main.o + .debug_line 0x00000000000002d9 0x3df usb.o + .debug_line 0x00000000000006b8 0x3c4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_line 0x0000000000000a7c 0x76f ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_line 0x00000000000011eb 0x3fa ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_line 0x00000000000015e5 0x9a4 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_line 0x0000000000001f89 0x425 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_line 0x00000000000023ae 0x485 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_line 0x0000000000002833 0x48b ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_line 0x0000000000002cbe 0x4ef ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_line 0x00000000000031ad 0x620 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_line 0x00000000000037cd 0x48f ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_line 0x0000000000003c5c 0x410 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_line 0x000000000000406c 0x3ca ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_line 0x0000000000004436 0x2d7 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_line 0x000000000000470d 0x49e ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_line 0x0000000000004bab 0x5a8 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_str 0x0000000000000000 0x18abc + .debug_str 0x0000000000000000 0x554 main.o + 0x68e (size before relaxing) + .debug_str 0x0000000000000554 0x7a0 usb.o + 0xe67 (size before relaxing) + .debug_str 0x0000000000000cf4 0x7ad9 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + 0x7ca5 (size before relaxing) + .debug_str 0x00000000000087cd 0x304f ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + 0x7543 (size before relaxing) + .debug_str 0x000000000000b81c 0x5a ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + 0x7c99 (size before relaxing) + .debug_str 0x000000000000b876 0x4d46 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + 0xb67e (size before relaxing) + .debug_str 0x00000000000105bc 0x168 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + 0x6ec6 (size before relaxing) + .debug_str 0x0000000000010724 0x16b ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + 0x4d3e (size before relaxing) + .debug_str 0x000000000001088f 0x36df ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + 0x77e9 (size before relaxing) + .debug_str 0x0000000000013f6e 0x19b ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + 0x7836 (size before relaxing) + .debug_str 0x0000000000014109 0x2b2 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + 0x7958 (size before relaxing) + .debug_str 0x00000000000143bb 0x1594 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + 0x8fc9 (size before relaxing) + .debug_str 0x000000000001594f 0x24ec ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + 0x5df6 (size before relaxing) + .debug_str 0x0000000000017e3b 0x9ce ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + 0x4b02 (size before relaxing) + .debug_str 0x0000000000018809 0x3e ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + 0x3873 (size before relaxing) + .debug_str 0x0000000000018847 0x165 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + 0x4dd9 (size before relaxing) + .debug_str 0x00000000000189ac 0x110 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + 0x8edc (size before relaxing) + +.comment 0x0000000000000000 0x7f + .comment 0x0000000000000000 0x7f main.o + 0x80 (size before relaxing) + .comment 0x000000000000007f 0x80 usb.o + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .comment 0x000000000000007f 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.ARM.attributes + 0x0000000000000000 0x31 + .ARM.attributes + 0x0000000000000000 0x33 main.o + .ARM.attributes + 0x0000000000000033 0x33 usb.o + .ARM.attributes + 0x0000000000000066 0x2d /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + .ARM.attributes + 0x0000000000000093 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .ARM.attributes + 0x00000000000000c6 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .ARM.attributes + 0x00000000000000f9 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .ARM.attributes + 0x000000000000012c 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .ARM.attributes + 0x000000000000015f 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .ARM.attributes + 0x0000000000000192 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .ARM.attributes + 0x00000000000001c5 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .ARM.attributes + 0x00000000000001f8 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .ARM.attributes + 0x000000000000022b 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .ARM.attributes + 0x000000000000025e 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .ARM.attributes + 0x0000000000000291 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .ARM.attributes + 0x00000000000002c4 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .ARM.attributes + 0x00000000000002f7 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .ARM.attributes + 0x000000000000032a 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .ARM.attributes + 0x000000000000035d 0x33 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .ARM.attributes + 0x0000000000000390 0x1b /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-memcpy.o) + .ARM.attributes + 0x00000000000003ab 0x2d /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + +.debug_frame 0x0000000000000000 0x1408 + .debug_frame 0x0000000000000000 0x28 main.o + .debug_frame 0x0000000000000028 0xd8 usb.o + .debug_frame 0x0000000000000100 0x34 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-memset.o) + .debug_frame 0x0000000000000134 0x64 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_frame 0x0000000000000198 0x2e0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_frame 0x0000000000000478 0x80 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_frame 0x00000000000004f8 0x4e0 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_frame 0x00000000000009d8 0xd0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_frame 0x0000000000000aa8 0x120 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_frame 0x0000000000000bc8 0x13c ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_frame 0x0000000000000d04 0x164 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_frame 0x0000000000000e68 0x1ec ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_frame 0x0000000000001054 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_frame 0x00000000000010ac 0x40 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_frame 0x00000000000010ec 0xa0 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_frame 0x000000000000118c 0x38 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_frame 0x00000000000011c4 0x10c ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_frame 0x00000000000012d0 0x118 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + .debug_frame 0x00000000000013e8 0x20 /usr/local/Caskroom/gcc-arm-embedded/6-2017-q2-update/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/libg.a(lib_a-strlen-stub.o) + +.debug_ranges 0x0000000000000000 0x948 + .debug_ranges 0x0000000000000000 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_ranges 0x0000000000000028 0x1a8 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_ranges 0x00000000000001d0 0x40 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_ranges 0x0000000000000210 0x260 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_ranges 0x0000000000000470 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_ranges 0x00000000000004c8 0x78 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_ranges 0x0000000000000540 0x78 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_ranges 0x00000000000005b8 0x88 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_ranges 0x0000000000000640 0xe0 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_ranges 0x0000000000000720 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_ranges 0x0000000000000740 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_ranges 0x0000000000000760 0x50 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_ranges 0x00000000000007b0 0x18 ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_ranges 0x00000000000007c8 0x70 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_ranges 0x0000000000000838 0x110 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) + +.debug_macro 0x0000000000000000 0x5e2a + .debug_macro 0x0000000000000000 0xb9 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x00000000000000b9 0x8aa ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000963 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000985 0x4f ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x00000000000009d4 0x51 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000a25 0xef ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000b14 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000b7e 0x1df ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000d5d 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000d7f 0xfa ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000e79 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000000ed1 0x1b4 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000001085 0x76 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x00000000000010fb 0xdfd ../../libopencm3/lib/libopencm3_stm32f1.a(gpio.o) + .debug_macro 0x0000000000001ef8 0xe0 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000001fd8 0x16 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000001fee 0x82c ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x000000000000281a 0xdc ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x00000000000028f6 0x82 ../../libopencm3/lib/libopencm3_stm32f1.a(rcc.o) + .debug_macro 0x0000000000002978 0xb9 ../../libopencm3/lib/libopencm3_stm32f1.a(gpio_common_all.o) + .debug_macro 0x0000000000002a31 0xcc ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000002afd 0xf96 ../../libopencm3/lib/libopencm3_stm32f1.a(timer_common_all.o) + .debug_macro 0x0000000000003a93 0xcf ../../libopencm3/lib/libopencm3_stm32f1.a(rcc_common_all.o) + .debug_macro 0x0000000000003b62 0xb9 ../../libopencm3/lib/libopencm3_stm32f1.a(flash_common_f01.o) + .debug_macro 0x0000000000003c1b 0x14a ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000003d65 0x52 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000003db7 0x55 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000003e0c 0x35 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000003e41 0x9c ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000003edd 0x16d ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x000000000000404a 0x57 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x00000000000040a1 0x58 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x00000000000040f9 0x1f ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004118 0x43 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x000000000000415b 0x20 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x000000000000417b 0x187 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004302 0x353 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004655 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004665 0x35 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x000000000000469a 0x196 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004830 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x0000000000004840 0x1c ../../libopencm3/lib/libopencm3_stm32f1.a(usb.o) + .debug_macro 0x000000000000485c 0x158 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x00000000000049b4 0x16 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x00000000000049ca 0x10e ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000004ad8 0x86 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000004b5e 0x22 ../../libopencm3/lib/libopencm3_stm32f1.a(usb_control.o) + .debug_macro 0x0000000000004b80 0x14a ../../libopencm3/lib/libopencm3_stm32f1.a(usb_standard.o) + .debug_macro 0x0000000000004cca 0x10e ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000004dd8 0x3a ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000004e12 0x29e ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x00000000000050b0 0x28 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x00000000000050d8 0x19c ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000005274 0x10 ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_v1.o) + .debug_macro 0x0000000000005284 0xd0 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000005354 0x3a1 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x00000000000056f5 0x6a ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x000000000000575f 0x1a2 ../../libopencm3/lib/libopencm3_stm32f1.a(vector.o) + .debug_macro 0x0000000000005901 0xb4 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x00000000000059b5 0x64 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000005a19 0x1b0 ../../libopencm3/lib/libopencm3_stm32f1.a(nvic.o) + .debug_macro 0x0000000000005bc9 0x8a ../../libopencm3/lib/libopencm3_stm32f1.a(assert.o) + .debug_macro 0x0000000000005c53 0xc9 ../../libopencm3/lib/libopencm3_stm32f1.a(flash.o) + .debug_macro 0x0000000000005d1c 0x10e ../../libopencm3/lib/libopencm3_stm32f1.a(st_usbfs_core.o) diff --git a/bluefnorf/openocd.cfg b/bluefnorf/openocd.cfg new file mode 100644 index 0000000..99e0019 --- /dev/null +++ b/bluefnorf/openocd.cfg @@ -0,0 +1,8 @@ + +telnet_port 4444 +gdb_port 3333 + +source [find interface/stlink-v2.cfg] + +source [find target/stm32f1x.cfg] + diff --git a/bluefnorf/stm32f103c8t6.ld b/bluefnorf/stm32f103c8t6.ld new file mode 100644 index 0000000..f70bbb7 --- /dev/null +++ b/bluefnorf/stm32f103c8t6.ld @@ -0,0 +1,14 @@ + +__estack = 0x20005000; + + +MEMORY +{ + rom (rx) : ORIGIN = 0x08000000, LENGTH = 64K + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K +} + + +/* Include the common ld script. */ +INCLUDE cortex-m-generic.ld + diff --git a/bluefnorf/usb.c b/bluefnorf/usb.c new file mode 100644 index 0000000..7894b81 --- /dev/null +++ b/bluefnorf/usb.c @@ -0,0 +1,331 @@ + + +/* + * Initialize USB ACM serial device, provide convenience + * function for serial communication. + * + * Mostly plucked together from some opencm3 example code. + */ + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <errno.h> + +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/gpio.h> +#include <libopencm3/stm32/timer.h> +#include <libopencm3/usb/usbd.h> +#include <libopencm3/usb/cdc.h> +#include <libopencm3/cm3/nvic.h> + +#include "usb.h" + +#define STATUS_LED_PORT GPIOC +#define STATUS_LED_PIN GPIO13 + +#define USBD_PORT GPIOA +#define USBDM GPIO11 +#define USBDP GPIO12 + +#define RX_ECHO 1 +#define RX_BUF_LEN 256 + +static char _rx_tmp[RX_BUF_LEN]; +static char _rx_buf[RX_BUF_LEN]; + +static size_t _rx_tmp_len; +static uint8_t _rx_buf_ready; + +/* Buffer to be used for control requests. */ +uint8_t usbd_control_buffer[128]; + +static usbd_device* __USBDEV; + +static const struct usb_device_descriptor device_descriptor = { + .bLength = USB_DT_DEVICE_SIZE, + .bDescriptorType = USB_DT_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0xfe, // USB_CLASS_CDC, + .bDeviceSubClass = 0, + .bDeviceProtocol = 0, + .bMaxPacketSize0 = 64, + .idVendor = 0x1209, + .idProduct = 0x4001, + .bcdDevice = 0x0200, + .iManufacturer = 1, + .iProduct = 2, + .iSerialNumber = 3, + .bNumConfigurations = 1, +}; + + +static const struct usb_endpoint_descriptor comm_endp[] = {{ + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 0x83, + .bmAttributes = USB_ENDPOINT_ATTR_INTERRUPT, + .wMaxPacketSize = 16, + .bInterval = 255, +}}; + + +static const struct usb_endpoint_descriptor data_endp[] = {{ + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 0x01, + .bmAttributes = USB_ENDPOINT_ATTR_BULK, + .wMaxPacketSize = 64, + .bInterval = 1, +}, { + .bLength = USB_DT_ENDPOINT_SIZE, + .bDescriptorType = USB_DT_ENDPOINT, + .bEndpointAddress = 0x82, + .bmAttributes = USB_ENDPOINT_ATTR_BULK, + .wMaxPacketSize = 64, + .bInterval = 1, +}}; + + +static const struct usb_interface_descriptor comm_iface[] = {{ + .bLength = USB_DT_INTERFACE_SIZE, + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = 0, + .bAlternateSetting = 0, + .bNumEndpoints = 1, + .bInterfaceClass = 0xfe, // USB_CLASS_CDC, + .bInterfaceSubClass = 0x00, // USB_CDC_SUBCLASS_ACM, + .bInterfaceProtocol = 0x00, // USB_CDC_PROTOCOL_AT, + .iInterface = 0, + + .endpoint = comm_endp, + + .extra = NULL, // &cdcacm_functional_descriptors, + .extralen = 0, +}}; + +static const struct usb_interface_descriptor data_iface[] = {{ + .bLength = USB_DT_INTERFACE_SIZE, + .bDescriptorType = USB_DT_INTERFACE, + .bInterfaceNumber = 1, + .bAlternateSetting = 0, + .bNumEndpoints = 2, + .bInterfaceClass = USB_CLASS_DATA, + .bInterfaceSubClass = 0, + .bInterfaceProtocol = 0, + .iInterface = 0, + + .endpoint = data_endp, +}}; + +static const struct usb_interface ifaces[] = {{ + .num_altsetting = 1, + .altsetting = comm_iface, +}, { + .num_altsetting = 1, + .altsetting = data_iface, +}}; + +static const struct usb_config_descriptor config = { + .bLength = USB_DT_CONFIGURATION_SIZE, + .bDescriptorType = USB_DT_CONFIGURATION, + .wTotalLength = 0, + .bNumInterfaces = 2, + .bConfigurationValue = 1, + .iConfiguration = 0, + .bmAttributes = 0x80, + .bMaxPower = 0x32, + + .interface = ifaces, +}; + + +static const char *usb_strings[] = { + "Chaos Computer Club Berlin e.V.", + "bluefnorf", + "bf1", +}; + + + +/* + * Initialize GPIO for D+ and status LED + */ +void usb_gpio_init() +{ + // Clock + rcc_periph_clock_enable(RCC_GPIOA); + rcc_periph_clock_enable(RCC_GPIOC); + + // D+ + gpio_set_mode(USBD_PORT, + GPIO_MODE_OUTPUT_2_MHZ, + GPIO_CNF_OUTPUT_PUSHPULL, + USBDP); + + // LED + gpio_set_mode(STATUS_LED_PORT, + GPIO_MODE_OUTPUT_2_MHZ, + GPIO_CNF_OUTPUT_PUSHPULL, + STATUS_LED_PIN); + +} + +/* + * Switch status led on / off + */ +inline void usb_status_led_toggle() +{ + gpio_toggle(STATUS_LED_PORT, STATUS_LED_PIN); +} + + +/* + * Poll usb interface using TIM4 + */ +void usb_timer_init() +{ + // Enable clock + rcc_periph_clock_enable(RCC_TIM4); + + // Enable interrupts + nvic_enable_irq(NVIC_TIM4_IRQ); + nvic_set_priority(NVIC_TIM4_IRQ, 1); + + timer_reset(TIM4); + + // Edge aligned + TIM4_CR1 |= TIM_CR1_CKD_CK_INT | + TIM_CR1_CMS_EDGE | + TIM_CR1_DIR_UP; + + TIM4_PSC = 32; + TIM4_ARR = 65535; + + // Interrupts: + // - Update / Overflow Event (UIE) + TIM4_DIER |= TIM_DIER_UIE; +} + +void usb_timer_start() +{ + TIM4_CR1 |= TIM_CR1_CEN; +} + + +void tim4_isr() +{ + // Poll USBDEV + usbd_poll(__USBDEV); + + // Blink status LED + usb_status_led_toggle(); + TIM4_SR &= ~TIM_SR_UIF; // Clear flag +} + + + +static void usb_data_rx_cb(usbd_device *usbd_dev, uint8_t ep) +{ + char buf[64]; + + int len = usbd_ep_read_packet(usbd_dev, 0x01, buf, 64); + + if (len) { + // We received data, let's handle it + + usbd_ep_write_packet(usbd_dev, 0x82, "fnorf", 6); + } +} + + +static int usb_control_request_cb(usbd_device *usbd_dev, + struct usb_setup_data *req, + uint8_t **buf, + uint16_t *len, + usbd_control_complete_callback *complete) +{ + return 0; +} + +static void usb_set_config_cb(usbd_device *usbd_dev, uint16_t wValue) +{ + usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, 64, usb_data_rx_cb); + usbd_ep_setup(usbd_dev, 0x82, USB_ENDPOINT_ATTR_BULK, 64, NULL); + usbd_ep_setup(usbd_dev, 0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL); + + usbd_register_control_callback( + usbd_dev, + USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, + USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, + usb_control_request_cb + ); +} + + +usbd_device *usb_serial_init() +{ + usbd_device *usbd_dev; + + // Initialize GPIO + usb_gpio_init(); + + // Initialize timers + usb_timer_init(); + + // Initialize buffers + memset(_rx_tmp, 0, RX_BUF_LEN); + memset(_rx_buf, 0, RX_BUF_LEN); + + _rx_tmp_len = 0; + _rx_buf_ready = 0; + + // Pull down D+ + gpio_clear(USBD_PORT, USBDP); + for (int i = 0; i < 0x10000; i++) { + __asm__("nop"); + } + gpio_set(USBD_PORT, USBDP); + + // Initialize usb device + usbd_dev = usbd_init(&st_usbfs_v1_usb_driver, + &device_descriptor, + &config, + usb_strings, 3, + usbd_control_buffer, sizeof(usbd_control_buffer)); + + usbd_register_set_config_callback(usbd_dev, usb_set_config_cb); + + // Make available + __USBDEV = usbd_dev; + + // Pull down + gpio_clear(USBD_PORT, USBDP); + + // Poll a bit + for (int i = 0; i < 0x80000; i++) { + usbd_poll(usbd_dev); + } + + // Start polling + usb_timer_start(); + + return usbd_dev; +} + + +/* + * Override _write and redirect stdout to usb + */ + /* +int _write(int file, char* data, int len) +{ + if (file < 2) { + return usb_serial_tx(data, len); + } + + // Set error and return failure + errno = EIO; + return -1; +} +*/ diff --git a/bluefnorf/usb.h b/bluefnorf/usb.h new file mode 100644 index 0000000..ad75684 --- /dev/null +++ b/bluefnorf/usb.h @@ -0,0 +1,12 @@ +#ifndef __USB_H__ +#define __USB_H__ + +#include <libopencm3/usb/usbd.h> + +usbd_device* usb_serial_init(); +const char* usb_serial_rx(); +size_t usb_serial_tx(const char*, size_t); + + +#endif + |