From 2f4d38a0d8cb288e534d1835f9f5649d7c9ff3a1 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Sat, 28 Dec 2024 15:03:49 +0100 Subject: [PATCH] wip why does HSE run at 16MHz? --- README.md | 20 +- build/final.elf | Bin 62292 -> 62968 bytes build/final.elf.map | 282 +++++----- build/gpio.S | 246 +++++---- build/gpio.i | 18 +- build/gpio.o | Bin 42888 -> 43052 bytes build/main.S | 1187 +++++++++++++++++++++++-------------------- build/main.i | 80 ++- build/main.o | Bin 51016 -> 51656 bytes build/timer.S | 479 +++++++++-------- build/timer.i | 20 + build/timer.o | Bin 44832 -> 45324 bytes build/usart.S | 921 ++++++++++++++++++--------------- build/usart.i | 60 ++- build/usart.o | Bin 48428 -> 49144 bytes src/gpio.h | 18 +- src/main.c | 31 +- src/rcc.h | 20 + src/usart.c | 39 +- src/usart.h | 4 +- 20 files changed, 1921 insertions(+), 1504 deletions(-) diff --git a/README.md b/README.md index 76f1008..cc2b9e9 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,27 @@ make build ## Probe for the board Run ```sh -st-info --probe +st-info --probe ``` ## Flashing Run ```sh -make flash +make flash ``` + +## Debugging + +### `st-info --probe` shows 0KB flash +``` +> sudo st-info --probe +Found 1 stlink programmers + version: V2J43S28 + serial: 0671FF343056363043090732 + flash: 0 (pagesize: 16384) <--- 0KB flash + sram: 131072 + chipid: 0x431 + dev-type: STM32F411xC_xE +``` +This can happen when the flash is locked. One way to unlock it is to erase the entire chip via the +Windows application `ST-Link Util`. diff --git a/build/final.elf b/build/final.elf index 8e6b73c12d11a1310f2ebed1bc74dfdc3baf3856..924c515ad939eebad4bffe07e3896423a3c5dd4a 100755 GIT binary patch literal 62968 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

fOoDz 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

||Q1e}#Uf?Z*uQe0VFlA0TzoRgoN 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 HhN%Mpyf3CU literal 62292 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 diff --git a/build/final.elf.map b/build/final.elf.map index bfba6d0..9d17443 100644 --- a/build/final.elf.map +++ b/build/final.elf.map @@ -53,7 +53,7 @@ Discarded input sections .debug_macro 0x00000000 0x89 build/main.o .debug_macro 0x00000000 0x4cc build/main.o .debug_macro 0x00000000 0x22 build/main.o - .debug_macro 0x00000000 0x88 build/main.o + .debug_macro 0x00000000 0xa0 build/main.o .group 0x00000000 0xc build/startup.o .group 0x00000000 0xc build/startup.o .group 0x00000000 0xc build/startup.o @@ -128,7 +128,7 @@ Discarded input sections .debug_macro 0x00000000 0x1df build/usart.o .debug_macro 0x00000000 0x89 build/usart.o .debug_macro 0x00000000 0x4cc build/usart.o - .debug_macro 0x00000000 0x13e build/usart.o + .debug_macro 0x00000000 0x191 build/usart.o .debug_macro 0x00000000 0x22 build/usart.o .debug_macro 0x00000000 0x82 build/usart.o @@ -157,7 +157,7 @@ LOAD build/usart.o 0x08000000 interrupt_vector_table 0x08000198 . = ALIGN (0x4) -.text 0x08000198 0x4e4 +.text 0x08000198 0x4f8 0x08000198 . = ALIGN (0x4) *(.text) *(.text.*) @@ -169,129 +169,129 @@ LOAD build/usart.o 0x080001fa gpio_write *fill* 0x08000246 0x2 .text.system_clock_init - 0x08000248 0x144 build/main.o - .text.main 0x0800038c 0x9c build/main.o - 0x0800038c main + 0x08000248 0x13c build/main.o + .text.main 0x08000384 0x9c build/main.o + 0x08000384 main .text.init_memory - 0x08000428 0x64 build/startup.o - 0x08000428 init_memory - .text.reset 0x0800048c 0x10 build/startup.o - 0x0800048c reset + 0x08000420 0x64 build/startup.o + 0x08000420 init_memory + .text.reset 0x08000484 0x10 build/startup.o + 0x08000484 reset .text.default_handler - 0x0800049c 0x8 build/startup.o - 0x0800049c exti0 - 0x0800049c debug_monitor - 0x0800049c rcc - 0x0800049c x - 0x0800049c sdio - 0x0800049c usage_fault - 0x0800049c tim1_up_tim10 - 0x0800049c usart1 - 0x0800049c i2c3_er - 0x0800049c spi2 - 0x0800049c dma1_stream1 - 0x0800049c bus_fault - 0x0800049c spi5 - 0x0800049c exti3 - 0x0800049c dma2_stream5 - 0x0800049c tim2 - 0x0800049c dma1_stream6 - 0x0800049c default_handler - 0x0800049c i2c1_er - 0x0800049c hard_fault - 0x0800049c usart6 - 0x0800049c exti15_10 - 0x0800049c usart2 - 0x0800049c pend_sv - 0x0800049c i2c1_ev - 0x0800049c wwdg - 0x0800049c adc - 0x0800049c rtc_alarm - 0x0800049c spi3 - 0x0800049c exti1 - 0x0800049c mem_manage - 0x0800049c dma2_stream1 - 0x0800049c dma1_stream2 - 0x0800049c dma2_stream3 - 0x0800049c sv_call - 0x0800049c tim3 - 0x0800049c otg_fs - 0x0800049c dma1_stream5 - 0x0800049c dma2_stream6 - 0x0800049c flash - 0x0800049c tamp_stamp - 0x0800049c i2c3_ev - 0x0800049c rtc_wkup - 0x0800049c dma2_stream0 - 0x0800049c pvd - 0x0800049c fpu - 0x0800049c exti4 - 0x0800049c exti2 - 0x0800049c spi1 - 0x0800049c dma1_stream0 - 0x0800049c tim1_brk_tim9 - 0x0800049c i2c2_ev - 0x0800049c otg_fs_wkup - 0x0800049c spi4 - 0x0800049c dma2_stream2 - 0x0800049c tim1_cc - 0x0800049c tim1_trg_com_tim11 - 0x0800049c exti9_5 - 0x0800049c dma1_stream3 - 0x0800049c dma2_stream4 - 0x0800049c i2c2_er - 0x0800049c dma2_stream7 - 0x0800049c dma1_stream7 - 0x0800049c nmi - 0x0800049c systick - 0x0800049c tim4 - 0x0800049c tim5 - 0x0800049c dma1_stream4 + 0x08000494 0x8 build/startup.o + 0x08000494 exti0 + 0x08000494 debug_monitor + 0x08000494 rcc + 0x08000494 x + 0x08000494 sdio + 0x08000494 usage_fault + 0x08000494 tim1_up_tim10 + 0x08000494 usart1 + 0x08000494 i2c3_er + 0x08000494 spi2 + 0x08000494 dma1_stream1 + 0x08000494 bus_fault + 0x08000494 spi5 + 0x08000494 exti3 + 0x08000494 dma2_stream5 + 0x08000494 tim2 + 0x08000494 dma1_stream6 + 0x08000494 default_handler + 0x08000494 i2c1_er + 0x08000494 hard_fault + 0x08000494 usart6 + 0x08000494 exti15_10 + 0x08000494 usart2 + 0x08000494 pend_sv + 0x08000494 i2c1_ev + 0x08000494 wwdg + 0x08000494 adc + 0x08000494 rtc_alarm + 0x08000494 spi3 + 0x08000494 exti1 + 0x08000494 mem_manage + 0x08000494 dma2_stream1 + 0x08000494 dma1_stream2 + 0x08000494 dma2_stream3 + 0x08000494 sv_call + 0x08000494 tim3 + 0x08000494 otg_fs + 0x08000494 dma1_stream5 + 0x08000494 dma2_stream6 + 0x08000494 flash + 0x08000494 tamp_stamp + 0x08000494 i2c3_ev + 0x08000494 rtc_wkup + 0x08000494 dma2_stream0 + 0x08000494 pvd + 0x08000494 fpu + 0x08000494 exti4 + 0x08000494 exti2 + 0x08000494 spi1 + 0x08000494 dma1_stream0 + 0x08000494 tim1_brk_tim9 + 0x08000494 i2c2_ev + 0x08000494 otg_fs_wkup + 0x08000494 spi4 + 0x08000494 dma2_stream2 + 0x08000494 tim1_cc + 0x08000494 tim1_trg_com_tim11 + 0x08000494 exti9_5 + 0x08000494 dma1_stream3 + 0x08000494 dma2_stream4 + 0x08000494 i2c2_er + 0x08000494 dma2_stream7 + 0x08000494 dma1_stream7 + 0x08000494 nmi + 0x08000494 systick + 0x08000494 tim4 + 0x08000494 tim5 + 0x08000494 dma1_stream4 .text.tim4_init - 0x080004a4 0x40 build/timer.o - 0x080004a4 tim4_init + 0x0800049c 0x40 build/timer.o + 0x0800049c tim4_init .text.tim4_start - 0x080004e4 0x20 build/timer.o - 0x080004e4 tim4_start + 0x080004dc 0x20 build/timer.o + 0x080004dc tim4_start .text.usart2_init - 0x08000504 0xec build/usart.o - 0x08000504 usart2_init + 0x080004fc 0x114 build/usart.o + 0x080004fc usart2_init .text.usart2_start - 0x080005f0 0x20 build/usart.o - 0x080005f0 usart2_start + 0x08000610 0x20 build/usart.o + 0x08000610 usart2_start .text.usart2_write_byte - 0x08000610 0x30 build/usart.o - 0x08000610 usart2_write_byte + 0x08000630 0x30 build/usart.o + 0x08000630 usart2_write_byte .text.usart2_write - 0x08000640 0x2a build/usart.o - 0x08000640 usart2_write + 0x08000660 0x2a build/usart.o + 0x08000660 usart2_write *(.rodata) - *fill* 0x0800066a 0x2 - .rodata 0x0800066c 0xe build/main.o + *fill* 0x0800068a 0x2 + .rodata 0x0800068c 0x3 build/main.o *(.rodata.*) - 0x0800067c . = ALIGN (0x4) - *fill* 0x0800067a 0x2 - 0x0800067c _data_addr = LOADADDR (.data) + 0x08000690 . = ALIGN (0x4) + *fill* 0x0800068f 0x1 + 0x08000690 _data_addr = LOADADDR (.data) -.glue_7 0x0800067c 0x0 - .glue_7 0x0800067c 0x0 linker stubs +.glue_7 0x08000690 0x0 + .glue_7 0x08000690 0x0 linker stubs -.glue_7t 0x0800067c 0x0 - .glue_7t 0x0800067c 0x0 linker stubs +.glue_7t 0x08000690 0x0 + .glue_7t 0x08000690 0x0 linker stubs -.vfp11_veneer 0x0800067c 0x0 - .vfp11_veneer 0x0800067c 0x0 linker stubs +.vfp11_veneer 0x08000690 0x0 + .vfp11_veneer 0x08000690 0x0 linker stubs -.v4_bx 0x0800067c 0x0 - .v4_bx 0x0800067c 0x0 linker stubs +.v4_bx 0x08000690 0x0 + .v4_bx 0x08000690 0x0 linker stubs -.iplt 0x0800067c 0x0 - .iplt 0x0800067c 0x0 build/main.o +.iplt 0x08000690 0x0 + .iplt 0x08000690 0x0 build/main.o -.rel.dyn 0x0800067c 0x0 - .rel.iplt 0x0800067c 0x0 build/main.o +.rel.dyn 0x08000690 0x0 + .rel.iplt 0x08000690 0x0 build/main.o -.data 0x20000000 0x0 load address 0x0800067c +.data 0x20000000 0x0 load address 0x08000690 0x20000000 . = ALIGN (0x4) 0x20000000 _data_start = . *(.data) @@ -299,10 +299,10 @@ LOAD build/usart.o 0x20000000 . = ALIGN (0x4) 0x20000000 _data_end = . -.igot.plt 0x20000000 0x0 load address 0x0800067c +.igot.plt 0x20000000 0x0 load address 0x08000690 .igot.plt 0x20000000 0x0 build/main.o -.bss 0x20000000 0x0 load address 0x0800067c +.bss 0x20000000 0x0 load address 0x08000690 0x20000000 . = ALIGN (0x4) 0x20000000 _bss_start = . *(.bss) @@ -351,7 +351,7 @@ LOAD linker stubs .debug_rnglists 0x0000006c 0x26 build/usart.o -.debug_macro 0x00000000 0x48a9 +.debug_macro 0x00000000 0x497f .debug_macro 0x00000000 0xb56 build/gpio.o .debug_macro 0x00000b56 0x22 build/gpio.o .debug_macro 0x00000b78 0x75 build/gpio.o @@ -366,39 +366,39 @@ LOAD linker stubs .debug_macro 0x0000108c 0x89 build/gpio.o .debug_macro 0x00001115 0x4cc build/gpio.o .debug_macro 0x000015e1 0x22 build/gpio.o - .debug_macro 0x00001603 0x88 build/gpio.o - .debug_macro 0x0000168b 0xb89 build/main.o - .debug_macro 0x00002214 0x144 build/main.o - .debug_macro 0x00002358 0x46 build/main.o - .debug_macro 0x0000239e 0x2e build/main.o - .debug_macro 0x000023cc 0x22 build/main.o - .debug_macro 0x000023ee 0x82 build/main.o - .debug_macro 0x00002470 0xb02 build/startup.o - .debug_macro 0x00002f72 0x56 build/startup.o - .debug_macro 0x00002fc8 0x51 build/startup.o - .debug_macro 0x00003019 0xb5c build/timer.o - .debug_macro 0x00003b75 0x13e build/timer.o - .debug_macro 0x00003cb3 0xb74 build/usart.o - .debug_macro 0x00004827 0x82 build/usart.o + .debug_macro 0x00001603 0xa0 build/gpio.o + .debug_macro 0x000016a3 0xb89 build/main.o + .debug_macro 0x0000222c 0x197 build/main.o + .debug_macro 0x000023c3 0x46 build/main.o + .debug_macro 0x00002409 0x2e build/main.o + .debug_macro 0x00002437 0x22 build/main.o + .debug_macro 0x00002459 0x82 build/main.o + .debug_macro 0x000024db 0xb02 build/startup.o + .debug_macro 0x00002fdd 0x56 build/startup.o + .debug_macro 0x00003033 0x51 build/startup.o + .debug_macro 0x00003084 0xb5c build/timer.o + .debug_macro 0x00003be0 0x191 build/timer.o + .debug_macro 0x00003d71 0xb74 build/usart.o + .debug_macro 0x000048e5 0x9a build/usart.o -.debug_line 0x00000000 0x661 +.debug_line 0x00000000 0x677 .debug_line 0x00000000 0x116 build/gpio.o - .debug_line 0x00000116 0x1e4 build/main.o - .debug_line 0x000002fa 0xea build/startup.o - .debug_line 0x000003e4 0xdf build/timer.o - .debug_line 0x000004c3 0x19e build/usart.o + .debug_line 0x00000116 0x1e8 build/main.o + .debug_line 0x000002fe 0xea build/startup.o + .debug_line 0x000003e8 0xdf build/timer.o + .debug_line 0x000004c7 0x1b0 build/usart.o -.debug_str 0x00000000 0x63e6 - .debug_str 0x00000000 0x5508 build/gpio.o - 0x56b0 (size before relaxing) - .debug_str 0x00005508 0xe17 build/main.o - 0x6477 (size before relaxing) - .debug_str 0x0000631f 0x88 build/startup.o +.debug_str 0x00000000 0x658b + .debug_str 0x00000000 0x5574 build/gpio.o + 0x571c (size before relaxing) + .debug_str 0x00005574 0xf50 build/main.o + 0x661c (size before relaxing) + .debug_str 0x000064c4 0x88 build/startup.o 0x3cdc (size before relaxing) - .debug_str 0x000063a7 0xc build/timer.o - 0x5bc2 (size before relaxing) - .debug_str 0x000063b3 0x33 build/usart.o - 0x60ec (size before relaxing) + .debug_str 0x0000654c 0xc build/timer.o + 0x5cfb (size before relaxing) + .debug_str 0x00006558 0x33 build/usart.o + 0x6291 (size before relaxing) .comment 0x00000000 0x45 .comment 0x00000000 0x45 build/gpio.o diff --git a/build/gpio.S b/build/gpio.S index a59bc5e..de0bc90 100644 --- a/build/gpio.S +++ b/build/gpio.S @@ -188,10 +188,10 @@ gpio_write: .byte 0x4 .4byte .Ldebug_abbrev0 .uleb128 0x8 - .4byte .LASF908 + .4byte .LASF912 .byte 0x1d - .4byte .LASF909 - .4byte .LASF910 + .4byte .LASF913 + .4byte .LASF914 .4byte .LLRL0 .4byte 0 .4byte .Ldebug_line0 @@ -199,17 +199,17 @@ gpio_write: .uleb128 0x1 .byte 0x1 .byte 0x6 - .4byte .LASF877 + .4byte .LASF881 .uleb128 0x1 .byte 0x1 .byte 0x8 - .4byte .LASF878 + .4byte .LASF882 .uleb128 0x1 .byte 0x2 .byte 0x5 - .4byte .LASF879 + .4byte .LASF883 .uleb128 0x3 - .4byte .LASF882 + .4byte .LASF886 .byte 0x2 .byte 0x39 .byte 0x1c @@ -217,13 +217,13 @@ gpio_write: .uleb128 0x1 .byte 0x2 .byte 0x7 - .4byte .LASF880 + .4byte .LASF884 .uleb128 0x1 .byte 0x4 .byte 0x5 - .4byte .LASF881 + .4byte .LASF885 .uleb128 0x3 - .4byte .LASF883 + .4byte .LASF887 .byte 0x2 .byte 0x4f .byte 0x1b @@ -231,21 +231,21 @@ gpio_write: .uleb128 0x1 .byte 0x4 .byte 0x7 - .4byte .LASF884 + .4byte .LASF888 .uleb128 0x1 .byte 0x8 .byte 0x5 - .4byte .LASF885 + .4byte .LASF889 .uleb128 0x1 .byte 0x8 .byte 0x7 - .4byte .LASF886 + .4byte .LASF890 .uleb128 0x9 .byte 0x4 .byte 0x5 .ascii "int\000" .uleb128 0x3 - .4byte .LASF887 + .4byte .LASF891 .byte 0x2 .byte 0xe8 .byte 0x16 @@ -253,15 +253,15 @@ gpio_write: .uleb128 0x1 .byte 0x4 .byte 0x7 - .4byte .LASF888 + .4byte .LASF892 .uleb128 0x3 - .4byte .LASF889 + .4byte .LASF893 .byte 0x3 .byte 0x24 .byte 0x14 .4byte 0x3f .uleb128 0x3 - .4byte .LASF890 + .4byte .LASF894 .byte 0x3 .byte 0x30 .byte 0x14 @@ -269,35 +269,35 @@ gpio_write: .uleb128 0xa .4byte 0xa0 .uleb128 0x3 - .4byte .LASF891 + .4byte .LASF895 .byte 0x3 .byte 0x52 .byte 0x15 .4byte 0x81 .uleb128 0xb - .4byte .LASF907 + .4byte .LASF911 .byte 0x28 .byte 0x4 .byte 0x7 .byte 0x8 .4byte 0x139 .uleb128 0x2 - .4byte .LASF892 + .4byte .LASF896 .byte 0x8 .4byte 0xac .byte 0 .uleb128 0x2 - .4byte .LASF893 + .4byte .LASF897 .byte 0x9 .4byte 0xac .byte 0x4 .uleb128 0x2 - .4byte .LASF894 + .4byte .LASF898 .byte 0xa .4byte 0xac .byte 0x8 .uleb128 0x2 - .4byte .LASF895 + .4byte .LASF899 .byte 0xb .4byte 0xac .byte 0xc @@ -312,22 +312,22 @@ gpio_write: .4byte 0xac .byte 0x14 .uleb128 0x2 - .4byte .LASF896 + .4byte .LASF900 .byte 0xe .4byte 0xac .byte 0x18 .uleb128 0x2 - .4byte .LASF897 + .4byte .LASF901 .byte 0xf .4byte 0xac .byte 0x1c .uleb128 0x2 - .4byte .LASF898 + .4byte .LASF902 .byte 0x10 .4byte 0xac .byte 0x20 .uleb128 0x2 - .4byte .LASF899 + .4byte .LASF903 .byte 0x11 .4byte 0xac .byte 0x24 @@ -337,30 +337,30 @@ gpio_write: .byte 0x1 .4byte 0x31 .byte 0x4 - .byte 0x38 + .byte 0x40 .byte 0xe .4byte 0x160 .uleb128 0x4 - .4byte .LASF900 + .4byte .LASF904 .byte 0 .uleb128 0x4 - .4byte .LASF901 + .4byte .LASF905 .byte 0x1 .uleb128 0x4 - .4byte .LASF902 + .4byte .LASF906 .byte 0x2 .uleb128 0x4 - .4byte .LASF903 + .4byte .LASF907 .byte 0x3 .byte 0 .uleb128 0x3 - .4byte .LASF904 + .4byte .LASF908 .byte 0x4 - .byte 0x3d + .byte 0x45 .byte 0x3 .4byte 0x139 .uleb128 0xd - .4byte .LASF911 + .4byte .LASF915 .byte 0x1 .byte 0xd .byte 0x6 @@ -386,7 +386,7 @@ gpio_write: .byte 0x91 .sleb128 -19 .uleb128 0x7 - .4byte .LASF907 + .4byte .LASF911 .byte 0xe .4byte 0x1b3 .uleb128 0x2 @@ -396,12 +396,12 @@ gpio_write: .uleb128 0x1 .byte 0x1 .byte 0x2 - .4byte .LASF905 + .4byte .LASF909 .uleb128 0xe .byte 0x4 .4byte 0xbd .uleb128 0xf - .4byte .LASF912 + .4byte .LASF916 .byte 0x1 .byte 0x6 .byte 0x6 @@ -418,7 +418,7 @@ gpio_write: .byte 0x91 .sleb128 -18 .uleb128 0x10 - .4byte .LASF906 + .4byte .LASF910 .byte 0x1 .byte 0x6 .byte 0x2c @@ -427,7 +427,7 @@ gpio_write: .byte 0x91 .sleb128 -19 .uleb128 0x7 - .4byte .LASF907 + .4byte .LASF911 .byte 0x7 .4byte 0x1b3 .uleb128 0x2 @@ -3525,7 +3525,7 @@ gpio_write: .uleb128 0x32 .4byte .LASF854 .byte 0 - .section .debug_macro,"G",%progbits,wm4.gpio.h.2.482807a1c0512cd436d5862f3edb1adc,comdat + .section .debug_macro,"G",%progbits,wm4.gpio.h.2.bc74b8bd59193b3190f972f5d232b4bf,comdat .Ldebug_macro15: .2byte 0x5 .byte 0 @@ -3542,40 +3542,40 @@ gpio_write: .uleb128 0x18 .4byte .LASF858 .byte 0x5 - .uleb128 0x19 + .uleb128 0x1a .4byte .LASF859 .byte 0x5 - .uleb128 0x1a + .uleb128 0x1b .4byte .LASF860 .byte 0x5 - .uleb128 0x1c + .uleb128 0x1d .4byte .LASF861 .byte 0x5 - .uleb128 0x1d + .uleb128 0x1e .4byte .LASF862 .byte 0x5 - .uleb128 0x1e + .uleb128 0x20 .4byte .LASF863 .byte 0x5 .uleb128 0x21 .4byte .LASF864 .byte 0x5 - .uleb128 0x22 + .uleb128 0x24 .4byte .LASF865 .byte 0x5 - .uleb128 0x23 + .uleb128 0x25 .4byte .LASF866 .byte 0x5 - .uleb128 0x25 + .uleb128 0x26 .4byte .LASF867 .byte 0x5 - .uleb128 0x26 + .uleb128 0x29 .4byte .LASF868 .byte 0x5 - .uleb128 0x27 + .uleb128 0x2a .4byte .LASF869 .byte 0x5 - .uleb128 0x2c + .uleb128 0x2b .4byte .LASF870 .byte 0x5 .uleb128 0x2d @@ -3584,17 +3584,29 @@ gpio_write: .uleb128 0x2e .4byte .LASF872 .byte 0x5 - .uleb128 0x30 + .uleb128 0x2f .4byte .LASF873 .byte 0x5 - .uleb128 0x32 + .uleb128 0x34 .4byte .LASF874 .byte 0x5 - .uleb128 0x34 + .uleb128 0x35 .4byte .LASF875 .byte 0x5 .uleb128 0x36 .4byte .LASF876 + .byte 0x5 + .uleb128 0x38 + .4byte .LASF877 + .byte 0x5 + .uleb128 0x3a + .4byte .LASF878 + .byte 0x5 + .uleb128 0x3c + .4byte .LASF879 + .byte 0x5 + .uleb128 0x3e + .4byte .LASF880 .byte 0 .section .debug_line,"",%progbits .Ldebug_line0: @@ -3639,7 +3651,7 @@ gpio_write: .ascii "__PTRDIFF_MAX__ 0x7fffffff\000" .LASF541: .ascii "_LONG_DOUBLE long double\000" -.LASF907: +.LASF911: .ascii "gpio\000" .LASF591: .ascii "INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)\000" @@ -3647,7 +3659,7 @@ gpio_write: .ascii "_UINT32_T_DECLARED \000" .LASF90: .ascii "__INTMAX_MAX__ 0x7fffffffffffffffLL\000" -.LASF902: +.LASF906: .ascii "GPIO_MODE_AF\000" .LASF335: .ascii "__TQ_IBIT__ 0\000" @@ -3711,8 +3723,6 @@ gpio_write: .ascii "PRIXFAST32 __PRI32FAST(X)\000" .LASF525: .ascii "__INT8 \"hh\"\000" -.LASF860: - .ascii "GPIO_MODER_MODER3_AF (0b10)\000" .LASF47: .ascii "__UINT8_TYPE__ unsigned char\000" .LASF368: @@ -3765,12 +3775,14 @@ gpio_write: .ascii "__need_wchar_t\000" .LASF199: .ascii "__FLT32_MIN_EXP__ (-125)\000" -.LASF908: +.LASF912: .ascii "GNU C2X 12.3.1 20230626 -mcpu=cortex-m4 -mthumb -mf" .ascii "loat-abi=hard -mfpu=fpv4-sp-d16 -march=armv7e-m+fp " .ascii "-g3 -ggdb -O0 -std=c2x -ffunction-sections -fdata-s" .ascii "ections -fno-builtin -fno-common\000" -.LASF864: +.LASF865: + .ascii "GPIO_AFRH_AFRH8_BIT 0\000" +.LASF868: .ascii "GPIO_AFRL_AFRL3_BIT 12\000" .LASF595: .ascii "INT16_MAX (__INT16_MAX__)\000" @@ -3852,7 +3864,7 @@ gpio_write: .ascii "__INT64 \"ll\"\000" .LASF138: .ascii "__INTPTR_MAX__ 0x7fffffff\000" -.LASF872: +.LASF876: .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF499: @@ -3888,7 +3900,7 @@ gpio_write: .ascii "PRId64 __PRI64(d)\000" .LASF302: .ascii "__UACCUM_IBIT__ 16\000" -.LASF881: +.LASF885: .ascii "long int\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" @@ -3916,6 +3928,8 @@ gpio_write: .ascii "PRIdFAST32 __PRI32FAST(d)\000" .LASF93: .ascii "__UINTMAX_C(c) c ## ULL\000" +.LASF866: + .ascii "GPIO_AFRH_AFRH8_MASK (0b1111)\000" .LASF31: .ascii "__SIZEOF_POINTER__ 4\000" .LASF621: @@ -3924,8 +3938,6 @@ gpio_write: .ascii "__GCC_ATOMIC_BOOL_LOCK_FREE 2\000" .LASF554: .ascii "___int64_t_defined 1\000" -.LASF863: - .ascii "GPIO_MODER_MODER2_AF (0b10)\000" .LASF432: .ascii "__ARM_NEON__\000" .LASF587: @@ -3986,7 +3998,7 @@ gpio_write: .ascii "PRIoLEAST16 __PRI16LEAST(o)\000" .LASF458: .ascii "__NEWLIB__ 4\000" -.LASF900: +.LASF904: .ascii "GPIO_MODE_INPUT\000" .LASF720: .ascii "SCNi16 __SCN16(i)\000" @@ -3996,7 +4008,7 @@ gpio_write: .ascii "__FLT_DECIMAL_DIG__ 9\000" .LASF562: .ascii "_UINT8_T_DECLARED \000" -.LASF877: +.LASF881: .ascii "signed char\000" .LASF805: .ascii "PRIuLEAST64 __PRI64LEAST(u)\000" @@ -4008,7 +4020,7 @@ gpio_write: .ascii "__ARM_FEATURE_FMA 1\000" .LASF364: .ascii "__GNUC_STDC_INLINE__ 1\000" -.LASF904: +.LASF908: .ascii "GPIO_MODE\000" .LASF256: .ascii "__FRACT_FBIT__ 15\000" @@ -4030,11 +4042,11 @@ gpio_write: .ascii "__SACCUM_MAX__ 0X7FFFP-7HK\000" .LASF219: .ascii "__FLT64_MAX_10_EXP__ 308\000" -.LASF868: +.LASF872: .ascii "GPIO_AFRL_AFRL2_MASK (0b1111)\000" .LASF65: .ascii "__UINT_FAST32_TYPE__ unsigned int\000" -.LASF878: +.LASF882: .ascii "unsigned char\000" .LASF3: .ascii "__STDC_UTF_32__ 1\000" @@ -4082,13 +4094,13 @@ gpio_write: .ascii "__int_fast64_t_defined 1\000" .LASF837: .ascii "__PRIPTR(x) __STRINGIFY(x)\000" -.LASF889: +.LASF893: .ascii "uint16_t\000" .LASF417: .ascii "__thumb2__ 1\000" .LASF321: .ascii "__ULLACCUM_FBIT__ 32\000" -.LASF905: +.LASF909: .ascii "_Bool\000" .LASF366: .ascii "__STRICT_ANSI__ 1\000" @@ -4106,7 +4118,7 @@ gpio_write: .ascii "__PRAGMA_REDEFINE_EXTNAME 1\000" .LASF36: .ascii "__WCHAR_TYPE__ unsigned int\000" -.LASF901: +.LASF905: .ascii "GPIO_MODE_OUTPUT\000" .LASF357: .ascii "__USA_IBIT__ 16\000" @@ -4144,7 +4156,7 @@ gpio_write: .ascii "__SCN64(x) __INT64 __STRINGIFY(x)\000" .LASF646: .ascii "_GCC_WRAP_STDINT_H \000" -.LASF882: +.LASF886: .ascii "__uint16_t\000" .LASF224: .ascii "__FLT64_EPSILON__ 2.2204460492503131e-16F64\000" @@ -4172,7 +4184,7 @@ gpio_write: .ascii "INTMAX_MAX (__INTMAX_MAX__)\000" .LASF601: .ascii "INT32_MAX (__INT32_MAX__)\000" -.LASF873: +.LASF877: .ascii "BIT(x) (1 << x)\000" .LASF469: .ascii "_MB_LEN_MAX 8\000" @@ -4190,7 +4202,7 @@ gpio_write: .ascii "_END_STD_C \000" .LASF852: .ascii "true ((_Bool)+1u)\000" -.LASF865: +.LASF869: .ascii "GPIO_AFRL_AFRL3_MASK (0b1111)\000" .LASF599: .ascii "UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)\000" @@ -4204,7 +4216,7 @@ gpio_write: .ascii "__FLT_EPSILON__ 1.1920928955078125e-7F\000" .LASF376: .ascii "__GCC_ATOMIC_SHORT_LOCK_FREE 2\000" -.LASF874: +.LASF878: .ascii "PIN(port,num) ((((port) - 'A') << 8) | num)\000" .LASF806: .ascii "PRIxLEAST64 __PRI64LEAST(x)\000" @@ -4270,7 +4282,7 @@ gpio_write: .ascii "__FP_FAST_FMAF 1\000" .LASF628: .ascii "SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)\000" -.LASF869: +.LASF873: .ascii "GPIO_AFRL_AFRL2_USART2_TX (0b0111)\000" .LASF564: .ascii "_INT16_T_DECLARED \000" @@ -4294,6 +4306,8 @@ gpio_write: .ascii "__ARM_FEATURE_FP16_FML\000" .LASF802: .ascii "PRIdLEAST64 __PRI64LEAST(d)\000" +.LASF858: + .ascii "GPIO_MODER_AF_MODE (0b10)\000" .LASF255: .ascii "__USFRACT_EPSILON__ 0x1P-8UHR\000" .LASF762: @@ -4314,7 +4328,7 @@ gpio_write: .ascii "INT64_C(x) __INT64_C(x)\000" .LASF615: .ascii "INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)\000" -.LASF862: +.LASF864: .ascii "GPIO_MODER_MODER2_MASK (0b11)\000" .LASF106: .ascii "__INT_LEAST8_MAX__ 0x7f\000" @@ -4342,6 +4356,8 @@ gpio_write: .ascii "__PRI8LEAST(x) __LEAST8 __STRINGIFY(x)\000" .LASF174: .ascii "__DBL_EPSILON__ ((double)2.2204460492503131e-16L)\000" +.LASF860: + .ascii "GPIO_MODER_MODER8_MASK (0b11)\000" .LASF268: .ascii "__LFRACT_MIN__ (-0.5LR-0.5LR)\000" .LASF117: @@ -4364,7 +4380,7 @@ gpio_write: .ascii "___int8_t_defined 1\000" .LASF248: .ascii "__SFRACT_MIN__ (-0.5HR-0.5HR)\000" -.LASF884: +.LASF888: .ascii "long unsigned int\000" .LASF349: .ascii "__SA_IBIT__ 16\000" @@ -4380,7 +4396,7 @@ gpio_write: .ascii "__ARM_FP16_FORMAT_IEEE\000" .LASF48: .ascii "__UINT16_TYPE__ short unsigned int\000" -.LASF911: +.LASF915: .ascii "gpio_write\000" .LASF569: .ascii "__int32_t_defined 1\000" @@ -4424,7 +4440,7 @@ gpio_write: .ascii "SCNx8 __SCN8(x)\000" .LASF208: .ascii "__FLT32_DENORM_MIN__ 1.4012984643248171e-45F32\000" -.LASF912: +.LASF916: .ascii "gpio_set_mode\000" .LASF125: .ascii "__UINT64_C(c) c ## ULL\000" @@ -4446,7 +4462,7 @@ gpio_write: .ascii "__GCC_ATOMIC_CHAR16_T_LOCK_FREE 2\000" .LASF789: .ascii "__PRI64FAST(x) __FAST64 __STRINGIFY(x)\000" -.LASF891: +.LASF895: .ascii "uintptr_t\000" .LASF168: .ascii "__DBL_MAX_EXP__ 1024\000" @@ -4494,7 +4510,7 @@ gpio_write: .ascii "PRIX32 __PRI32(X)\000" .LASF773: .ascii "SCNxLEAST32 __SCN32LEAST(x)\000" -.LASF894: +.LASF898: .ascii "OSPEEDR\000" .LASF711: .ascii "__SCN16LEAST(x) __LEAST16 __STRINGIFY(x)\000" @@ -4524,7 +4540,7 @@ gpio_write: .ascii "__ULACCUM_MIN__ 0.0ULK\000" .LASF461: .ascii "_ATEXIT_DYNAMIC_ALLOC 1\000" -.LASF883: +.LASF887: .ascii "__uint32_t\000" .LASF188: .ascii "__LDBL_MAX__ 1.7976931348623157e+308L\000" @@ -4534,7 +4550,7 @@ gpio_write: .ascii "__FLT_RADIX__ 2\000" .LASF454: .ascii "_INTTYPES_H \000" -.LASF885: +.LASF889: .ascii "long long int\000" .LASF401: .ascii "__ARM_FEATURE_CMSE\000" @@ -4570,7 +4586,7 @@ gpio_write: .ascii "__WCHAR_T \000" .LASF223: .ascii "__FLT64_MIN__ 2.2250738585072014e-308F64\000" -.LASF866: +.LASF870: .ascii "GPIO_AFRL_AFRL3_USART2_RX (0b0111)\000" .LASF553: .ascii "___int32_t_defined 1\000" @@ -4641,20 +4657,22 @@ gpio_write: .ascii "\000" .LASF582: .ascii "__int_fast16_t_defined 1\000" -.LASF892: +.LASF896: .ascii "MODER\000" .LASF482: .ascii "__FLOAT_TYPE float\000" .LASF185: .ascii "__LDBL_MAX_10_EXP__ 308\000" +.LASF867: + .ascii "GPIO_AFRH_AFRH8_MCO_1 (0b0000)\000" .LASF175: .ascii "__DBL_DENORM_MIN__ ((double)4.9406564584124654e-324" .ascii "L)\000" .LASF607: .ascii "INT64_MAX (__INT64_MAX__)\000" -.LASF888: +.LASF892: .ascii "unsigned int\000" -.LASF887: +.LASF891: .ascii "__uintptr_t\000" .LASF459: .ascii "__NEWLIB_MINOR__ 3\000" @@ -4686,7 +4704,7 @@ gpio_write: .ascii "__CHAR_BIT__ 8\000" .LASF143: .ascii "__FLT_EVAL_METHOD__ 0\000" -.LASF879: +.LASF883: .ascii "short int\000" .LASF685: .ascii "PRIdLEAST8 __PRI8LEAST(d)\000" @@ -4746,6 +4764,8 @@ gpio_write: .ascii "__ATFILE_VISIBLE 0\000" .LASF372: .ascii "__GCC_ATOMIC_CHAR_LOCK_FREE 2\000" +.LASF859: + .ascii "GPIO_MODER_MODER8_BIT 16\000" .LASF270: .ascii "__LFRACT_EPSILON__ 0x1P-31LR\000" .LASF808: @@ -4812,7 +4832,7 @@ gpio_write: .ascii "__UFRACT_IBIT__ 0\000" .LASF399: .ascii "__ARM_32BIT_STATE 1\000" -.LASF861: +.LASF863: .ascii "GPIO_MODER_MODER2_BIT 4\000" .LASF107: .ascii "__INT8_C(c) c\000" @@ -4826,13 +4846,13 @@ gpio_write: .ascii "SCNuFAST16 __SCN16FAST(u)\000" .LASF801: .ascii "SCNx64 __SCN64(x)\000" -.LASF876: +.LASF880: .ascii "PINPORT(pin) (pin >> 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" .LASF645: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" -.LASF859: +.LASF862: .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" .LASF623: .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" @@ -4876,7 +4896,7 @@ gpio_write: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF886: +.LASF890: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" @@ -4906,8 +4926,8 @@ gpio_write: .ascii "SCNdFAST32 __SCN32FAST(d)\000" .LASF339: .ascii "__UHQ_IBIT__ 0\000" -.LASF858: - .ascii "GPIO_MODER_MODER3_BIT 7\000" +.LASF861: + .ascii "GPIO_MODER_MODER3_BIT 6\000" .LASF60: .ascii "__INT_FAST16_TYPE__ int\000" .LASF631: @@ -4956,11 +4976,11 @@ gpio_write: .ascii "SCNdFAST8 __SCN8FAST(d)\000" .LASF576: .ascii "_UINTPTR_T_DECLARED \000" -.LASF899: +.LASF903: .ascii "AFRH\000" .LASF314: .ascii "__ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK\000" -.LASF898: +.LASF902: .ascii "AFRL\000" .LASF273: .ascii "__ULFRACT_MIN__ 0.0ULR\000" @@ -4974,7 +4994,7 @@ gpio_write: .ascii "__INT32_TYPE__ long int\000" .LASF118: .ascii "__UINT_LEAST8_MAX__ 0xff\000" -.LASF897: +.LASF901: .ascii "LCKR\000" .LASF520: .ascii "__int20__ +2\000" @@ -5020,7 +5040,7 @@ gpio_write: .ascii "__QQ_IBIT__ 0\000" .LASF763: .ascii "PRIdLEAST32 __PRI32LEAST(d)\000" -.LASF893: +.LASF897: .ascii "OTYPER\000" .LASF811: .ascii "SCNuLEAST64 __SCN64LEAST(u)\000" @@ -5040,11 +5060,11 @@ gpio_write: .ascii "__GNUC_MINOR__ 3\000" .LASF57: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" -.LASF909: +.LASF913: .ascii "src/gpio.c\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF870: +.LASF874: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" @@ -5096,7 +5116,7 @@ gpio_write: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" -.LASF871: +.LASF875: .ascii "GPIO_PORT_OFFSET (0x400U)\000" .LASF50: .ascii "__UINT64_TYPE__ long long unsigned int\000" @@ -5106,7 +5126,7 @@ gpio_write: .ascii "__INT64_C(c) c ## LL\000" .LASF699: .ascii "PRIuFAST8 __PRI8FAST(u)\000" -.LASF867: +.LASF871: .ascii "GPIO_AFRL_AFRL2_BIT 8\000" .LASF190: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" @@ -5116,7 +5136,7 @@ gpio_write: .ascii "__ACCUM_IBIT__ 16\000" .LASF509: .ascii "unsigned\000" -.LASF895: +.LASF899: .ascii "PUPDR\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -5126,7 +5146,7 @@ gpio_write: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF359: .ascii "__UDA_IBIT__ 32\000" -.LASF906: +.LASF910: .ascii "mode\000" .LASF586: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" @@ -5140,7 +5160,7 @@ gpio_write: .ascii "__UHQ_FBIT__ 16\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF903: +.LASF907: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" @@ -5178,7 +5198,7 @@ gpio_write: .ascii "__FAST8 \000" .LASF496: .ascii "__XSI_VISIBLE 0\000" -.LASF896: +.LASF900: .ascii "BSRR\000" .LASF794: .ascii "PRIu64 __PRI64(u)\000" @@ -5266,7 +5286,7 @@ gpio_write: .ascii "PRIx32 __PRI32(x)\000" .LASF278: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" -.LASF890: +.LASF894: .ascii "uint32_t\000" .LASF689: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" @@ -5314,13 +5334,13 @@ gpio_write: .ascii "__INT_LEAST16_TYPE__ short int\000" .LASF326: .ascii "__QQ_FBIT__ 7\000" -.LASF875: +.LASF879: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF880: +.LASF884: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -5368,7 +5388,7 @@ gpio_write: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF280: .ascii "__LLFRACT_EPSILON__ 0x1P-63LLR\000" -.LASF910: +.LASF914: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF249: .ascii "__SFRACT_MAX__ 0X7FP-7HR\000" diff --git a/build/gpio.i b/build/gpio.i index c3ed08a..0cab24a 100644 --- a/build/gpio.i +++ b/build/gpio.i @@ -2003,13 +2003,21 @@ struct gpio { #define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) -#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_AF_MODE (0b10) + +#define GPIO_MODER_MODER8_BIT 16 +#define GPIO_MODER_MODER8_MASK (0b11) + +#define GPIO_MODER_MODER3_BIT 6 #define GPIO_MODER_MODER3_MASK (0b11) -#define GPIO_MODER_MODER3_AF (0b10) #define GPIO_MODER_MODER2_BIT 4 #define GPIO_MODER_MODER2_MASK (0b11) -#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRH_AFRH8_BIT 0 +#define GPIO_AFRH_AFRH8_MASK (0b1111) +#define GPIO_AFRH_AFRH8_MCO_1 (0b0000) #define GPIO_AFRL_AFRL3_BIT 12 @@ -2044,9 +2052,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 64 "src/gpio.h" 3 4 +# 72 "src/gpio.h" 3 4 _Bool -# 64 "src/gpio.h" +# 72 "src/gpio.h" val); # 5 "src/gpio.c" 2 diff --git a/build/gpio.o b/build/gpio.o index 7613394fd6b1ed8827d7f18f8b5af7f9a8e085aa..f5ee64988c920f97b9daf9a522ca879b36fef734 100644 GIT binary patch delta 6581 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 BI0OIy delta 6445 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 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" -.LASF904: +.LASF894: + .ascii "RCC_CFGR_MCO1PRE_DIV4 (0b110)\000" +.LASF915: .ascii "RCC_APB1ENR_USART2EN_BIT 17\000" -.LASF889: +.LASF900: .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" .LASF645: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" -.LASF912: +.LASF926: .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" .LASF623: .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" @@ -5933,20 +6002,22 @@ main: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF733: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF993: +.LASF1008: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF999: +.LASF1014: .ascii "APB1ENR\000" .LASF741: .ascii "SCNdFAST16 __SCN16FAST(d)\000" -.LASF872: +.LASF892: + .ascii "RCC_CFGR_MCO1_BIT 21\000" +.LASF874: .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" -.LASF957: +.LASF972: .ascii "USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)\000" .LASF787: .ascii "__PRI64LEAST(x) __LEAST64 __STRINGIFY(x)\000" @@ -5966,18 +6037,18 @@ main: .ascii "__NEWLIB_PATCHLEVEL__ 0\000" .LASF26: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" -.LASF874: +.LASF876: .ascii "RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT" .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF984: +.LASF999: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" .LASF150: .ascii "__FLT_MIN_10_EXP__ (-37)\000" -.LASF895: +.LASF906: .ascii "RCC_CFGR_SWS_MASK (0b11)\000" .LASF312: .ascii "__ULACCUM_IBIT__ 32\000" @@ -6003,8 +6074,8 @@ main: .ascii "SCNdFAST32 __SCN32FAST(d)\000" .LASF339: .ascii "__UHQ_IBIT__ 0\000" -.LASF911: - .ascii "GPIO_MODER_MODER3_BIT 7\000" +.LASF925: + .ascii "GPIO_MODER_MODER3_BIT 6\000" .LASF60: .ascii "__INT_FAST16_TYPE__ int\000" .LASF574: @@ -6015,20 +6086,20 @@ main: .ascii "__SACCUM_MIN__ (-0X1P7HK-0X1P7HK)\000" .LASF274: .ascii "__ULFRACT_MAX__ 0XFFFFFFFFP-32ULR\000" -.LASF880: +.LASF883: .ascii "RCC_PLLCFGR_PLLN(n) ((n & RCC_PLLCFGR_PLLN_MASK) <<" .ascii " RCC_PLLCFGR_PLLN_BIT)\000" .LASF56: .ascii "__UINT_LEAST16_TYPE__ short unsigned int\000" -.LASF944: +.LASF959: .ascii "PWR_SCALE3 (0b11)\000" .LASF573: .ascii "_INTMAX_T_DECLARED \000" -.LASF1027: +.LASF1042: .ascii "CCER\000" .LASF40: .ascii "__CHAR16_TYPE__ short unsigned int\000" -.LASF959: +.LASF974: .ascii "USART_SR_TC_COMPLETED (1 << USART_SR_TC_BIT)\000" .LASF231: .ascii "__FLT32X_DIG__ 15\000" @@ -6072,6 +6143,8 @@ main: .ascii "SIZE_MAX (__SIZE_MAX__)\000" .LASF333: .ascii "__DQ_IBIT__ 0\000" +.LASF896: + .ascii "RCC_CFGR_MCO1PRE_MASK (0b111)\000" .LASF450: .ascii "__ARM_BF16_FORMAT_ALTERNATIVE\000" .LASF45: @@ -6084,19 +6157,19 @@ main: .ascii "__int20__ +2\000" .LASF654: .ascii "_WCHAR_T_ \000" -.LASF1023: +.LASF1038: .ascii "SMCR\000" .LASF828: .ascii "PRIoMAX __PRIMAX(o)\000" .LASF747: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" -.LASF939: +.LASF954: .ascii "FLASH_ACR_LATENCY_MASK (0b1111)\000" -.LASF1013: +.LASF1028: .ascii "GPIO_MODE_INPUT\000" .LASF743: .ascii "SCNoFAST16 __SCN16FAST(o)\000" -.LASF1040: +.LASF1055: .ascii "usart2_init\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" @@ -6122,7 +6195,7 @@ main: .ascii "PRIi16 __PRI16(i)\000" .LASF390: .ascii "__ARM_FEATURE_DSP 1\000" -.LASF965: +.LASF980: .ascii "USART_CR1_UE_ENABLE (1 << USART_CR1_UE_BIT)\000" .LASF825: .ascii "__SCNMAX(x) __STRINGIFY(ll ##x)\000" @@ -6150,15 +6223,15 @@ main: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF923: +.LASF938: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" .LASF377: .ascii "__GCC_ATOMIC_INT_LOCK_FREE 2\000" -.LASF971: +.LASF986: .ascii "USART_BRR_MANTISSA_MASK (0b111111111111)\000" -.LASF960: +.LASF975: .ascii "USART_SR_RXNE_BIT 5\000" .LASF561: .ascii "_INT8_T_DECLARED \000" @@ -6166,7 +6239,7 @@ main: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF996: +.LASF1011: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -6206,11 +6279,11 @@ main: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF991: +.LASF1006: .ascii "AHB2RSTR\000" .LASF671: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" -.LASF887: +.LASF898: .ascii "RCC_CFGR_PPRE2_MASK (0b111)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" @@ -6226,38 +6299,38 @@ main: .ascii "_FVWRITE_IN_STREAMIO 1\000" .LASF183: .ascii "__LDBL_MIN_10_EXP__ (-307)\000" -.LASF920: +.LASF935: .ascii "GPIO_AFRL_AFRL2_BIT 8\000" .LASF190: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" .LASF445: .ascii "__ARM_FEATURE_CDE\000" -.LASF1019: +.LASF1034: .ascii "KEYR\000" .LASF509: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF977: +.LASF992: .ascii "short int\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" -.LASF955: +.LASF970: .ascii "USART2 ((struct usart *) USART2_BASE_ADDR)\000" .LASF121: .ascii "__UINT16_C(c) c\000" -.LASF972: +.LASF987: .ascii "USART_BRR_FRACTION_BIT 0\000" .LASF359: .ascii "__UDA_IBIT__ 32\000" .LASF534: .ascii "__LEAST16 \"h\"\000" -.LASF882: +.LASF885: .ascii "RCC_PLLCFGR_PLLM_MASK (0b111111)\000" .LASF365: .ascii "__NO_INLINE__ 1\000" -.LASF958: - .ascii "USART_SR_TC_BIT 6\000" +.LASF889: + .ascii "RCC_CFGR_MCO1_HSI (0b00)\000" .LASF710: .ascii "__SCN16(x) __INT16 __STRINGIFY(x)\000" .LASF606: @@ -6268,22 +6341,24 @@ main: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF1016: +.LASF1031: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" -.LASF950: +.LASF965: .ascii "TIM4 ((struct timer *) TIM4_BASE_ADDR)\000" .LASF95: .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" .LASF608: .ascii "UINT64_MAX (__UINT64_MAX__)\000" -.LASF901: +.LASF912: .ascii "RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAE" .ascii "N_BIT)\000" +.LASF930: + .ascii "GPIO_AFRH_AFRH8_MASK (0b1111)\000" .LASF471: .ascii "_RETARGETABLE_LOCKING 1\000" -.LASF933: +.LASF948: .ascii "FLASH_ACR_DCEN_BIT 10\000" .LASF453: .ascii "__USES_INITFINI__ 1\000" @@ -6307,7 +6382,7 @@ main: .ascii "__INT16_MAX__ 0x7fff\000" .LASF478: .ascii "__SYS_CONFIG_H__ \000" -.LASF881: +.LASF884: .ascii "RCC_PLLCFGR_PLLM_BIT 0\000" .LASF8: .ascii "__VERSION__ \"12.3.1 20230626\"\000" @@ -6343,7 +6418,7 @@ main: .ascii "PRIdMAX __PRIMAX(d)\000" .LASF388: .ascii "__SIZEOF_WINT_T__ 4\000" -.LASF886: +.LASF897: .ascii "RCC_CFGR_PPRE2_BIT 13\000" .LASF782: .ascii "SCNoFAST32 __SCN32FAST(o)\000" @@ -6355,11 +6430,11 @@ main: .ascii "__LDBL_DECIMAL_DIG__ 17\000" .LASF701: .ascii "PRIXFAST8 __PRI8FAST(X)\000" -.LASF1043: +.LASF1058: .ascii "led_on\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" -.LASF1045: +.LASF1060: .ascii "src/main.c\000" .LASF126: .ascii "__INT_FAST8_MAX__ 0x7fffffff\000" @@ -6397,13 +6472,13 @@ main: .ascii "__ULLFRACT_MIN__ 0.0ULLR\000" .LASF651: .ascii "_T_WCHAR_ \000" -.LASF1032: +.LASF1047: .ascii "BDTR\000" .LASF382: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF664: .ascii "_BSD_WCHAR_T_\000" -.LASF1011: +.LASF1026: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -6411,23 +6486,23 @@ main: .ascii "UINT16_C(x) __UINT16_C(x)\000" .LASF756: .ascii "PRIx32 __PRI32(x)\000" -.LASF1041: +.LASF1056: .ascii "tim4_init\000" -.LASF987: +.LASF1002: .ascii "uint32_t\000" -.LASF878: +.LASF881: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" .LASF689: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" .LASF506: .ascii "_SYS__INTSUP_H \000" -.LASF1021: +.LASF1036: .ascii "OPTCR\000" .LASF290: .ascii "__SACCUM_EPSILON__ 0x1P-7HK\000" .LASF415: .ascii "__GCC_ASM_FLAG_OUTPUTS__ 1\000" -.LASF931: +.LASF946: .ascii "FLASH_BASE_ADDR (0x40023C00U)\000" .LASF745: .ascii "SCNxFAST16 __SCN16FAST(x)\000" @@ -6453,7 +6528,7 @@ main: .ascii "__LDBL_DIG__ 15\000" .LASF89: .ascii "__SIZE_WIDTH__ 32\000" -.LASF876: +.LASF879: .ascii "RCC_PLLCFGR_PLLP_MASK (0b11)\000" .LASF480: .ascii "_SUPPORTS_ERREXCEPT \000" @@ -6461,7 +6536,7 @@ main: .ascii "__FLT64_DIG__ 15\000" .LASF524: .ascii "_INT32_EQ_LONG \000" -.LASF884: +.LASF887: .ascii "RCC_CFGR_PPRE_DIV_NONE 0\000" .LASF77: .ascii "__WINT_MAX__ 0xffffffffU\000" @@ -6473,13 +6548,13 @@ main: .ascii "__PRI16(x) __INT16 __STRINGIFY(x)\000" .LASF159: .ascii "__FLT_HAS_DENORM__ 1\000" -.LASF928: +.LASF943: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF978: +.LASF993: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -6487,7 +6562,7 @@ main: .ascii "__FLT32_HAS_INFINITY__ 1\000" .LASF416: .ascii "__thumb__ 1\000" -.LASF970: +.LASF985: .ascii "USART_BRR_MANTISSA_BIT 4\000" .LASF421: .ascii "__ARMEL__ 1\000" @@ -6497,23 +6572,25 @@ main: .ascii "__HQ_FBIT__ 15\000" .LASF854: .ascii "__bool_true_false_are_defined 1\000" -.LASF964: +.LASF979: .ascii "USART_CR1_UE_BIT 13\000" -.LASF925: +.LASF940: .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF798: .ascii "SCNi64 __SCN64(i)\000" -.LASF866: +.LASF868: .ascii "RCC_CR_HSIRDY_BIT 1\000" .LASF80: .ascii "__SIZE_MAX__ 0xffffffffU\000" -.LASF1034: +.LASF1049: .ascii "usart2_write\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" -.LASF930: +.LASF945: .ascii "FLASH_H_ \000" +.LASF863: + .ascii "RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT)\000" .LASF412: .ascii "__ARM_ARCH\000" .LASF590: @@ -6530,7 +6607,7 @@ main: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF522: .ascii "long +4\000" -.LASF990: +.LASF1005: .ascii "AHB1RSTR\000" .LASF723: .ascii "SCNx16 __SCN16(x)\000" @@ -6540,7 +6617,7 @@ main: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF340: .ascii "__USQ_FBIT__ 32\000" -.LASF1046: +.LASF1061: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF796: .ascii "PRIX64 __PRI64(X)\000" @@ -6578,7 +6655,7 @@ main: .ascii "__DBL_MIN_10_EXP__ (-307)\000" .LASF795: .ascii "PRIx64 __PRI64(x)\000" -.LASF966: +.LASF981: .ascii "USART_CR1_TE_BIT 3\000" .LASF512: .ascii "__int20\000" @@ -6598,7 +6675,7 @@ main: .ascii "__ULFRACT_IBIT__ 0\000" .LASF857: .ascii "RCC ((struct rcc *) RCC_BASE_ADDR)\000" -.LASF892: +.LASF903: .ascii "RCC_CFGR_HPRE_MASK (0b1111)\000" .LASF72: .ascii "__INT_MAX__ 0x7fffffff\000" @@ -6606,7 +6683,7 @@ main: .ascii "__INT_LEAST64_TYPE__ long long int\000" .LASF103: .ascii "__UINT16_MAX__ 0xffff\000" -.LASF942: +.LASF957: .ascii "PWR_BASE_ADDR (0x40007000U)\000" .LASF446: .ascii "__ARM_FEATURE_CDE_COPROC\000" diff --git a/build/main.i b/build/main.i index e46b82c..2d9abcf 100644 --- a/build/main.i +++ b/build/main.i @@ -2029,6 +2029,11 @@ struct rcc { #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) +#define RCC_CR_CSS_BIT 19 +#define RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT) + + + #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -2051,6 +2056,7 @@ struct rcc { #define RCC_PLLCFGR_PLLSRC_BIT 22 #define RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT) +#define RCC_PLLCFGR_PLLSRC_HSI (0 << RCC_PLLCFGR_PLLSRC_BIT) #define RCC_PLLCFGR_PLLP_BIT 16 #define RCC_PLLCFGR_PLLP_MASK (0b11) @@ -2070,6 +2076,19 @@ struct rcc { #define RCC_CFGR_PPRE_DIV_2 (0b100) +#define RCC_CFGR_MCO1_HSI (0b00) +#define RCC_CFGR_MCO1_HSE (0b10) +#define RCC_CFGR_MCO1_PLL (0b11) + +#define RCC_CFGR_MCO1_BIT 21 +#define RCC_CFGR_MCO1_MASK (0b11) + +#define RCC_CFGR_MCO1PRE_DIV4 (0b110) + +#define RCC_CFGR_MCO1PRE_BIT 24 +#define RCC_CFGR_MCO1PRE_MASK (0b111) + + #define RCC_CFGR_PPRE2_BIT 13 #define RCC_CFGR_PPRE2_MASK (0b111) @@ -2090,6 +2109,7 @@ struct rcc { #define RCC_CFGR_SWS_MASK (0b11) +#define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_BIT 0 @@ -2135,13 +2155,21 @@ struct gpio { #define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) -#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_AF_MODE (0b10) + +#define GPIO_MODER_MODER8_BIT 16 +#define GPIO_MODER_MODER8_MASK (0b11) + +#define GPIO_MODER_MODER3_BIT 6 #define GPIO_MODER_MODER3_MASK (0b11) -#define GPIO_MODER_MODER3_AF (0b10) #define GPIO_MODER_MODER2_BIT 4 #define GPIO_MODER_MODER2_MASK (0b11) -#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRH_AFRH8_BIT 0 +#define GPIO_AFRH_AFRH8_MASK (0b1111) +#define GPIO_AFRH_AFRH8_MCO_1 (0b0000) #define GPIO_AFRL_AFRL3_BIT 12 @@ -2176,9 +2204,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 64 "src/gpio.h" 3 4 +# 72 "src/gpio.h" 3 4 _Bool -# 64 "src/gpio.h" +# 72 "src/gpio.h" val); # 6 "src/main.c" 2 # 1 "src/flash.h" 1 @@ -2350,9 +2378,15 @@ static void system_clock_init(void) { ((struct pwr *) (0x40007000U))->CR |= ((0b11) << 14); + ((struct rcc *) (0x40023800U))->CR &= ~(1 << 0); + + ((struct rcc *) (0x40023800U))->CR |= (1 << 16); + ((struct rcc *) (0x40023800U))->CR |= (1 << 19); + + while (!(((struct rcc *) (0x40023800U))->CR & (1 << 17))); @@ -2361,10 +2395,11 @@ static void system_clock_init(void) { ((struct rcc *) (0x40023800U))->CR &= ~(1 << 24); + ((struct rcc *) (0x40023800U))->PLLCFGR |= (1 << 22); - ((struct rcc *) (0x40023800U))->PLLCFGR |= ((25 & (0b111111)) << 0) | ((196 & (0b111111111)) << 6) | ((2 & (0b11)) << 16) | ((4 & (0b1111)) << 24); + ((struct rcc *) (0x40023800U))->PLLCFGR |= ((25 & (0b111111)) << 0) | ((192 & (0b111111111)) << 6) | ((2 & (0b11)) << 16) | ((4 & (0b1111)) << 24); ((struct rcc *) (0x40023800U))->CFGR &= ~((0b1111) << 4); @@ -2383,26 +2418,28 @@ static void system_clock_init(void) { - while (!(((struct rcc *) (0x40023800U))->CR & (1 << 17))); + while (!(((struct rcc *) (0x40023800U))->CR & (1 << 25))); ((struct flash *) (0x40023C00U))->ACR |= (1 <<10); ((struct flash *) (0x40023C00U))->ACR |= (1 <<9); - - - ((struct flash *) (0x40023C00U))->ACR &= ~((0b1111) << 0); - ((struct rcc *) (0x40023800U))->CFGR |= ((0x0111) << 0); - - - ((struct rcc *) (0x40023800U))->CFGR &= ~((0b11) << 0); - ((struct rcc *) (0x40023800U))->CFGR |= ((0b10) << 0); +# 75 "src/main.c" + ((struct rcc *) (0x40023800U))->CFGR |= (((0b10) & (0b11)) << 0); while (((((struct rcc *) (0x40023800U))->CFGR >> 2) & (0b11)) != (0b10)); - ((struct rcc *) (0x40023800U))->CR &= ~(1 << 0); + + ((struct rcc *) (0x40023800U))->CFGR &= ~((0b11) << 21); + + + ((struct rcc *) (0x40023800U))->CFGR |= ((0b00) << 21); + + + + } int main(void) { @@ -2419,20 +2456,21 @@ int main(void) { uint16_t counter = ((struct timer *) (0x40000800U))->CNT; -# 90 "src/main.c" 3 4 +# 106 "src/main.c" 3 4 _Bool -# 90 "src/main.c" +# 106 "src/main.c" led_on = -# 90 "src/main.c" 3 4 +# 106 "src/main.c" 3 4 ((_Bool)+0u) -# 90 "src/main.c" +# 106 "src/main.c" ; while(1) { + if ((((struct timer *) (0x40000800U))->CNT - counter) >= 250) { led_on = !led_on; gpio_write(led, led_on); - usart2_write("hello, world\n"); + usart2_write("U\n"); counter = ((struct timer *) (0x40000800U))->CNT; } diff --git a/build/main.o b/build/main.o index 3687611e2a2dc5a7e5be3416f8deb57c674e7256..a142ecc3507c2becf21cde62bd5cae005672e9cc 100644 GIT binary patch delta 8938 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 I3=A+P0BU<;i~s-t delta 8401 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 diff --git a/build/timer.S b/build/timer.S index aae1189..7b32cbe 100644 --- a/build/timer.S +++ b/build/timer.S @@ -136,10 +136,10 @@ tim4_start: .byte 0x4 .4byte .Ldebug_abbrev0 .uleb128 0x7 - .4byte .LASF960 + .4byte .LASF971 .byte 0x1d - .4byte .LASF961 - .4byte .LASF962 + .4byte .LASF972 + .4byte .LASF973 .4byte .LLRL0 .4byte 0 .4byte .Ldebug_line0 @@ -147,17 +147,17 @@ tim4_start: .uleb128 0x3 .byte 0x1 .byte 0x6 - .4byte .LASF908 + .4byte .LASF919 .uleb128 0x3 .byte 0x1 .byte 0x8 - .4byte .LASF909 + .4byte .LASF920 .uleb128 0x3 .byte 0x2 .byte 0x5 - .4byte .LASF910 + .4byte .LASF921 .uleb128 0x4 - .4byte .LASF913 + .4byte .LASF924 .byte 0x2 .byte 0x39 .byte 0x1c @@ -165,13 +165,13 @@ tim4_start: .uleb128 0x3 .byte 0x2 .byte 0x7 - .4byte .LASF911 + .4byte .LASF922 .uleb128 0x3 .byte 0x4 .byte 0x5 - .4byte .LASF912 + .4byte .LASF923 .uleb128 0x4 - .4byte .LASF914 + .4byte .LASF925 .byte 0x2 .byte 0x4f .byte 0x1b @@ -179,15 +179,15 @@ tim4_start: .uleb128 0x3 .byte 0x4 .byte 0x7 - .4byte .LASF915 + .4byte .LASF926 .uleb128 0x3 .byte 0x8 .byte 0x5 - .4byte .LASF916 + .4byte .LASF927 .uleb128 0x3 .byte 0x8 .byte 0x7 - .4byte .LASF917 + .4byte .LASF928 .uleb128 0x8 .byte 0x4 .byte 0x5 @@ -195,15 +195,15 @@ tim4_start: .uleb128 0x3 .byte 0x4 .byte 0x7 - .4byte .LASF918 + .4byte .LASF929 .uleb128 0x4 - .4byte .LASF919 + .4byte .LASF930 .byte 0x3 .byte 0x24 .byte 0x14 .4byte 0x3f .uleb128 0x4 - .4byte .LASF920 + .4byte .LASF931 .byte 0x3 .byte 0x30 .byte 0x14 @@ -224,13 +224,13 @@ tim4_start: .4byte 0xa0 .byte 0 .uleb128 0x1 - .4byte .LASF921 + .4byte .LASF932 .byte 0x4 .byte 0x8 .4byte 0xa0 .byte 0x4 .uleb128 0x1 - .4byte .LASF922 + .4byte .LASF933 .byte 0x4 .byte 0x9 .4byte 0xa0 @@ -242,115 +242,115 @@ tim4_start: .4byte 0xa0 .byte 0xc .uleb128 0x1 - .4byte .LASF923 + .4byte .LASF934 .byte 0x4 .byte 0xb .4byte 0xa0 .byte 0x10 .uleb128 0x1 - .4byte .LASF924 + .4byte .LASF935 .byte 0x4 .byte 0xc .4byte 0xa0 .byte 0x14 .uleb128 0x1 - .4byte .LASF925 + .4byte .LASF936 .byte 0x4 .byte 0xd .4byte 0x212 .byte 0x18 .uleb128 0x1 - .4byte .LASF926 + .4byte .LASF937 .byte 0x4 .byte 0xe .4byte 0xa0 .byte 0x20 .uleb128 0x1 - .4byte .LASF927 + .4byte .LASF938 .byte 0x4 .byte 0xf .4byte 0xa0 .byte 0x24 .uleb128 0x1 - .4byte .LASF928 + .4byte .LASF939 .byte 0x4 .byte 0x10 .4byte 0x212 .byte 0x28 .uleb128 0x1 - .4byte .LASF929 + .4byte .LASF940 .byte 0x4 .byte 0x11 .4byte 0xa0 .byte 0x30 .uleb128 0x1 - .4byte .LASF930 + .4byte .LASF941 .byte 0x4 .byte 0x12 .4byte 0xa0 .byte 0x34 .uleb128 0x1 - .4byte .LASF931 + .4byte .LASF942 .byte 0x4 .byte 0x13 .4byte 0x212 .byte 0x38 .uleb128 0x1 - .4byte .LASF932 + .4byte .LASF943 .byte 0x4 .byte 0x14 .4byte 0xa0 .byte 0x40 .uleb128 0x1 - .4byte .LASF933 + .4byte .LASF944 .byte 0x4 .byte 0x15 .4byte 0xa0 .byte 0x44 .uleb128 0x1 - .4byte .LASF934 + .4byte .LASF945 .byte 0x4 .byte 0x16 .4byte 0x212 .byte 0x48 .uleb128 0x1 - .4byte .LASF935 + .4byte .LASF946 .byte 0x4 .byte 0x17 .4byte 0xa0 .byte 0x50 .uleb128 0x1 - .4byte .LASF936 + .4byte .LASF947 .byte 0x4 .byte 0x18 .4byte 0xa0 .byte 0x54 .uleb128 0x1 - .4byte .LASF937 + .4byte .LASF948 .byte 0x4 .byte 0x19 .4byte 0x212 .byte 0x58 .uleb128 0x1 - .4byte .LASF938 + .4byte .LASF949 .byte 0x4 .byte 0x1a .4byte 0xa0 .byte 0x60 .uleb128 0x1 - .4byte .LASF939 + .4byte .LASF950 .byte 0x4 .byte 0x1b .4byte 0xa0 .byte 0x64 .uleb128 0x1 - .4byte .LASF940 + .4byte .LASF951 .byte 0x4 .byte 0x1c .4byte 0x212 .byte 0x68 .uleb128 0x1 - .4byte .LASF941 + .4byte .LASF952 .byte 0x4 .byte 0x1d .4byte 0xa0 @@ -362,25 +362,25 @@ tim4_start: .4byte 0xa0 .byte 0x74 .uleb128 0x1 - .4byte .LASF942 + .4byte .LASF953 .byte 0x4 .byte 0x1f .4byte 0x212 .byte 0x78 .uleb128 0x1 - .4byte .LASF943 + .4byte .LASF954 .byte 0x4 .byte 0x20 .4byte 0xa0 .byte 0x80 .uleb128 0x1 - .4byte .LASF944 + .4byte .LASF955 .byte 0x4 .byte 0x21 .4byte 0xa0 .byte 0x84 .uleb128 0x1 - .4byte .LASF945 + .4byte .LASF956 .byte 0x4 .byte 0x22 .4byte 0xa0 @@ -396,7 +396,7 @@ tim4_start: .uleb128 0x5 .4byte 0x202 .uleb128 0xc - .4byte .LASF946 + .4byte .LASF957 .byte 0x50 .byte 0x5 .byte 0x6 @@ -415,13 +415,13 @@ tim4_start: .4byte 0xa0 .byte 0x4 .uleb128 0x1 - .4byte .LASF947 + .4byte .LASF958 .byte 0x5 .byte 0x9 .4byte 0xa0 .byte 0x8 .uleb128 0x1 - .4byte .LASF948 + .4byte .LASF959 .byte 0x5 .byte 0xa .4byte 0xa0 @@ -439,19 +439,19 @@ tim4_start: .4byte 0xa0 .byte 0x14 .uleb128 0x1 - .4byte .LASF949 + .4byte .LASF960 .byte 0x5 .byte 0xd .4byte 0xa0 .byte 0x18 .uleb128 0x1 - .4byte .LASF950 + .4byte .LASF961 .byte 0x5 .byte 0xe .4byte 0xa0 .byte 0x1c .uleb128 0x1 - .4byte .LASF951 + .4byte .LASF962 .byte 0x5 .byte 0xf .4byte 0xa0 @@ -481,31 +481,31 @@ tim4_start: .4byte 0xa0 .byte 0x30 .uleb128 0x1 - .4byte .LASF952 + .4byte .LASF963 .byte 0x5 .byte 0x14 .4byte 0xa0 .byte 0x34 .uleb128 0x1 - .4byte .LASF953 + .4byte .LASF964 .byte 0x5 .byte 0x15 .4byte 0xa0 .byte 0x38 .uleb128 0x1 - .4byte .LASF954 + .4byte .LASF965 .byte 0x5 .byte 0x16 .4byte 0xa0 .byte 0x3c .uleb128 0x1 - .4byte .LASF955 + .4byte .LASF966 .byte 0x5 .byte 0x17 .4byte 0xa0 .byte 0x40 .uleb128 0x1 - .4byte .LASF956 + .4byte .LASF967 .byte 0x5 .byte 0x18 .4byte 0xa0 @@ -517,21 +517,21 @@ tim4_start: .4byte 0xa0 .byte 0x48 .uleb128 0x1 - .4byte .LASF957 + .4byte .LASF968 .byte 0x5 .byte 0x1a .4byte 0xa0 .byte 0x4c .byte 0 .uleb128 0x6 - .4byte .LASF958 + .4byte .LASF969 .byte 0x14 .4byte .LFB1 .4byte .LFE1-.LFB1 .uleb128 0x1 .byte 0x9c .uleb128 0x6 - .4byte .LASF959 + .4byte .LASF970 .byte 0x4 .4byte .LFB0 .4byte .LFE0-.LFB0 @@ -3501,7 +3501,7 @@ tim4_start: .uleb128 0x135 .4byte .LASF850 .byte 0 - .section .debug_macro,"G",%progbits,wm4.rcc.h.37.a17300cb822ec078eaa06c79bfd3d786,comdat + .section .debug_macro,"G",%progbits,wm4.rcc.h.37.5476e375c28ae03ccdcfacf2a612a4b6,comdat .Ldebug_macro14: .2byte 0x5 .byte 0 @@ -3530,64 +3530,64 @@ tim4_start: .uleb128 0x33 .4byte .LASF858 .byte 0x5 - .uleb128 0x36 + .uleb128 0x37 .4byte .LASF859 .byte 0x5 - .uleb128 0x37 + .uleb128 0x38 .4byte .LASF860 .byte 0x5 - .uleb128 0x3a + .uleb128 0x3b .4byte .LASF861 .byte 0x5 - .uleb128 0x3b + .uleb128 0x3c .4byte .LASF862 .byte 0x5 - .uleb128 0x3e + .uleb128 0x3f .4byte .LASF863 .byte 0x5 - .uleb128 0x3f + .uleb128 0x40 .4byte .LASF864 .byte 0x5 - .uleb128 0x42 + .uleb128 0x43 .4byte .LASF865 .byte 0x5 - .uleb128 0x43 + .uleb128 0x44 .4byte .LASF866 .byte 0x5 - .uleb128 0x44 + .uleb128 0x47 .4byte .LASF867 .byte 0x5 - .uleb128 0x46 + .uleb128 0x48 .4byte .LASF868 .byte 0x5 - .uleb128 0x47 + .uleb128 0x49 .4byte .LASF869 .byte 0x5 - .uleb128 0x49 + .uleb128 0x4b .4byte .LASF870 .byte 0x5 - .uleb128 0x4a + .uleb128 0x4c .4byte .LASF871 .byte 0x5 - .uleb128 0x4b + .uleb128 0x4d .4byte .LASF872 .byte 0x5 - .uleb128 0x4d + .uleb128 0x4f .4byte .LASF873 .byte 0x5 - .uleb128 0x4e + .uleb128 0x50 .4byte .LASF874 .byte 0x5 - .uleb128 0x4f + .uleb128 0x51 .4byte .LASF875 .byte 0x5 - .uleb128 0x51 + .uleb128 0x53 .4byte .LASF876 .byte 0x5 - .uleb128 0x52 + .uleb128 0x54 .4byte .LASF877 .byte 0x5 - .uleb128 0x53 + .uleb128 0x55 .4byte .LASF878 .byte 0x5 .uleb128 0x57 @@ -3596,71 +3596,107 @@ tim4_start: .uleb128 0x58 .4byte .LASF880 .byte 0x5 - .uleb128 0x5b + .uleb128 0x59 .4byte .LASF881 .byte 0x5 - .uleb128 0x5c + .uleb128 0x5d .4byte .LASF882 .byte 0x5 - .uleb128 0x5f + .uleb128 0x5e .4byte .LASF883 .byte 0x5 - .uleb128 0x60 + .uleb128 0x61 .4byte .LASF884 .byte 0x5 - .uleb128 0x63 + .uleb128 0x62 .4byte .LASF885 .byte 0x5 - .uleb128 0x65 + .uleb128 0x63 .4byte .LASF886 .byte 0x5 - .uleb128 0x66 + .uleb128 0x65 .4byte .LASF887 .byte 0x5 - .uleb128 0x69 + .uleb128 0x66 .4byte .LASF888 .byte 0x5 - .uleb128 0x6b + .uleb128 0x68 .4byte .LASF889 .byte 0x5 - .uleb128 0x6c + .uleb128 0x6a .4byte .LASF890 .byte 0x5 - .uleb128 0x6f + .uleb128 0x6b .4byte .LASF891 .byte 0x5 - .uleb128 0x71 + .uleb128 0x6e .4byte .LASF892 .byte 0x5 - .uleb128 0x72 + .uleb128 0x6f .4byte .LASF893 .byte 0x5 - .uleb128 0x73 + .uleb128 0x72 .4byte .LASF894 .byte 0x5 - .uleb128 0x77 + .uleb128 0x73 .4byte .LASF895 .byte 0x5 - .uleb128 0x78 + .uleb128 0x76 .4byte .LASF896 .byte 0x5 - .uleb128 0x7b + .uleb128 0x78 .4byte .LASF897 .byte 0x5 - .uleb128 0x7c + .uleb128 0x79 .4byte .LASF898 .byte 0x5 - .uleb128 0x7e + .uleb128 0x7c .4byte .LASF899 .byte 0x5 - .uleb128 0x7f + .uleb128 0x7e .4byte .LASF900 .byte 0x5 - .uleb128 0x81 + .uleb128 0x7f .4byte .LASF901 .byte 0x5 .uleb128 0x82 .4byte .LASF902 + .byte 0x5 + .uleb128 0x83 + .4byte .LASF902 + .byte 0x5 + .uleb128 0x85 + .4byte .LASF903 + .byte 0x5 + .uleb128 0x86 + .4byte .LASF904 + .byte 0x5 + .uleb128 0x87 + .4byte .LASF905 + .byte 0x5 + .uleb128 0x8b + .4byte .LASF906 + .byte 0x5 + .uleb128 0x8c + .4byte .LASF907 + .byte 0x5 + .uleb128 0x8f + .4byte .LASF908 + .byte 0x5 + .uleb128 0x90 + .4byte .LASF909 + .byte 0x5 + .uleb128 0x92 + .4byte .LASF910 + .byte 0x5 + .uleb128 0x93 + .4byte .LASF911 + .byte 0x5 + .uleb128 0x95 + .4byte .LASF912 + .byte 0x5 + .uleb128 0x96 + .4byte .LASF913 .byte 0 .section .debug_macro,"G",%progbits,wm4.timer.h.2.2e929ede818fb0960868f1b0a08a1cbf,comdat .Ldebug_macro15: @@ -3668,19 +3704,19 @@ tim4_start: .byte 0 .byte 0x5 .uleb128 0x2 - .4byte .LASF903 + .4byte .LASF914 .byte 0x5 .uleb128 0x1d - .4byte .LASF904 + .4byte .LASF915 .byte 0x5 .uleb128 0x1e - .4byte .LASF905 + .4byte .LASF916 .byte 0x5 .uleb128 0x20 - .4byte .LASF906 + .4byte .LASF917 .byte 0x5 .uleb128 0x21 - .4byte .LASF907 + .4byte .LASF918 .byte 0 .section .debug_line,"",%progbits .Ldebug_line0: @@ -3695,7 +3731,7 @@ tim4_start: .ascii "__UHA_FBIT__ 8\000" .LASF815: .ascii "PRIiFAST64 __PRI64FAST(i)\000" -.LASF909: +.LASF920: .ascii "unsigned char\000" .LASF225: .ascii "__FLT64_DENORM_MIN__ 4.9406564584124654e-324F64\000" @@ -3741,7 +3777,7 @@ tim4_start: .ascii "__WCHAR_MAX__ 0xffffffffU\000" .LASF514: .ascii "__int20__\000" -.LASF901: +.LASF912: .ascii "RCC_APB1ENR_TIM4_BIT 2\000" .LASF18: .ascii "__SIZEOF_LONG_LONG__ 8\000" @@ -3767,7 +3803,7 @@ tim4_start: .ascii "__ORDER_PDP_ENDIAN__ 3412\000" .LASF34: .ascii "__SIZE_TYPE__ unsigned int\000" -.LASF902: +.LASF913: .ascii "RCC_APB1ENR_TIM4_ENABLE (1 << RCC_APB1ENR_TIM4_BIT)" .ascii "\000" .LASF621: @@ -3838,7 +3874,7 @@ tim4_start: .ascii "__SCNPTR(x) __STRINGIFY(x)\000" .LASF202: .ascii "__FLT32_MAX_10_EXP__ 38\000" -.LASF886: +.LASF897: .ascii "RCC_CFGR_HPRE_BIT 4\000" .LASF683: .ascii "SCNo8 __SCN8(o)\000" @@ -3854,12 +3890,12 @@ tim4_start: .ascii "__need_wchar_t\000" .LASF199: .ascii "__FLT32_MIN_EXP__ (-125)\000" -.LASF960: +.LASF971: .ascii "GNU C2X 12.3.1 20230626 -mcpu=cortex-m4 -mthumb -mf" .ascii "loat-abi=hard -mfpu=fpv4-sp-d16 -march=armv7e-m+fp " .ascii "-g3 -ggdb -O0 -std=c2x -ffunction-sections -fdata-s" .ascii "ections -fno-builtin -fno-common\000" -.LASF859: +.LASF861: .ascii "RCC_CR_HSEON_BIT 16\000" .LASF596: .ascii "INT16_MAX (__INT16_MAX__)\000" @@ -3873,7 +3909,7 @@ tim4_start: .ascii "__int_fast32_t_defined 1\000" .LASF133: .ascii "__INT_FAST64_WIDTH__ 64\000" -.LASF957: +.LASF968: .ascii "DMAR\000" .LASF660: .ascii "___int_wchar_t_h \000" @@ -3885,6 +3921,8 @@ tim4_start: .ascii "INT16_C(x) __INT16_C(x)\000" .LASF250: .ascii "__SFRACT_EPSILON__ 0x1P-7HR\000" +.LASF888: + .ascii "RCC_CFGR_MCO1_MASK (0b11)\000" .LASF113: .ascii "__INT32_C(c) c ## L\000" .LASF27: @@ -3915,28 +3953,27 @@ tim4_start: .ascii "__PRI32LEAST(x) __LEAST32 __STRINGIFY(x)\000" .LASF88: .ascii "__PTRDIFF_WIDTH__ 32\000" -.LASF894: - .ascii "RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << R" - .ascii "CC_CFGR_SW_BIT)\000" +.LASF886: + .ascii "RCC_CFGR_MCO1_PLL (0b11)\000" .LASF134: .ascii "__UINT_FAST8_MAX__ 0xffffffffU\000" .LASF761: .ascii "SCNo32 __SCN32(o)\000" .LASF541: .ascii "_NOTHROW \000" -.LASF952: +.LASF963: .ascii "CCR1\000" -.LASF953: +.LASF964: .ascii "CCR2\000" -.LASF954: +.LASF965: .ascii "CCR3\000" -.LASF955: +.LASF966: .ascii "CCR4\000" .LASF307: .ascii "__LACCUM_IBIT__ 32\000" .LASF593: .ascii "INT_LEAST8_MAX (__INT_LEAST8_MAX__)\000" -.LASF888: +.LASF899: .ascii "RCC_CFGR_SWS_PLL (0b10)\000" .LASF560: .ascii "__EXP\000" @@ -3954,7 +3991,7 @@ tim4_start: .ascii "__INT64 \"ll\"\000" .LASF138: .ascii "__INTPTR_MAX__ 0x7fffffff\000" -.LASF936: +.LASF947: .ascii "AHB2LPENR\000" .LASF500: .ascii "__RAND_MAX\000" @@ -3964,7 +4001,7 @@ tim4_start: .ascii "INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)\000" .LASF614: .ascii "INT_FAST8_MAX (__INT_FAST8_MAX__)\000" -.LASF898: +.LASF909: .ascii "RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PW" .ascii "REN_BIT)\000" .LASF487: @@ -3992,12 +4029,12 @@ tim4_start: .ascii "__ACCUM_FBIT__ 15\000" .LASF792: .ascii "PRId64 __PRI64(d)\000" -.LASF872: +.LASF875: .ascii "RCC_PLLCFGR_PLLP(p) ((p & RCC_PLLCFGR_PLLP_MASK) <<" .ascii " RCC_PLLCFGR_PLLP_BIT)\000" .LASF302: .ascii "__UACCUM_IBIT__ 16\000" -.LASF912: +.LASF923: .ascii "long int\000" .LASF720: .ascii "SCNd16 __SCN16(d)\000" @@ -4015,7 +4052,7 @@ tim4_start: .ascii "__FLT32X_EPSILON__ 2.2204460492503131e-16F32x\000" .LASF557: .ascii "___int_least16_t_defined 1\000" -.LASF878: +.LASF881: .ascii "RCC_PLLCFGR_PLLM(m) ((m & RCC_PLLCFGR_PLLM_MASK) <<" .ascii " RCC_PLLCFGR_PLLM_BIT)\000" .LASF468: @@ -4030,7 +4067,7 @@ tim4_start: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" .LASF93: .ascii "__UINTMAX_C(c) c ## ULL\000" -.LASF865: +.LASF867: .ascii "RCC_PLLCFGR_PLLQ_BIT 24\000" .LASF31: .ascii "__SIZEOF_POINTER__ 4\000" @@ -4038,7 +4075,7 @@ tim4_start: .ascii "INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)\000" .LASF371: .ascii "__GCC_ATOMIC_BOOL_LOCK_FREE 2\000" -.LASF893: +.LASF904: .ascii "RCC_CFGR_SW_MASK (0b11)\000" .LASF432: .ascii "__ARM_NEON__\000" @@ -4074,7 +4111,7 @@ tim4_start: .ascii "__SIZEOF_LONG__ 4\000" .LASF754: .ascii "PRIi32 __PRI32(i)\000" -.LASF933: +.LASF944: .ascii "APB2ENR\000" .LASF822: .ascii "SCNoFAST64 __SCN64FAST(o)\000" @@ -4088,7 +4125,7 @@ tim4_start: .ascii "__FLT32X_MIN_EXP__ (-1021)\000" .LASF816: .ascii "PRIoFAST64 __PRI64FAST(o)\000" -.LASF935: +.LASF946: .ascii "AHB1LPENR\000" .LASF406: .ascii "__ARM_FEATURE_SIMD32 1\000" @@ -4100,7 +4137,7 @@ tim4_start: .ascii "PRIoLEAST16 __PRI16LEAST(o)\000" .LASF459: .ascii "__NEWLIB__ 4\000" -.LASF945: +.LASF956: .ascii "DCKCFGR\000" .LASF721: .ascii "SCNi16 __SCN16(i)\000" @@ -4110,7 +4147,7 @@ tim4_start: .ascii "__FLT_DECIMAL_DIG__ 9\000" .LASF563: .ascii "_UINT8_T_DECLARED \000" -.LASF908: +.LASF919: .ascii "signed char\000" .LASF806: .ascii "PRIuLEAST64 __PRI64LEAST(u)\000" @@ -4132,7 +4169,7 @@ tim4_start: .ascii "__GNUC_PATCHLEVEL__ 1\000" .LASF374: .ascii "__GCC_ATOMIC_CHAR32_T_LOCK_FREE 2\000" -.LASF866: +.LASF868: .ascii "RCC_PLLCFGR_PLLQ_MASK (0b1111)\000" .LASF120: .ascii "__UINT_LEAST16_MAX__ 0xffff\000" @@ -4142,25 +4179,25 @@ tim4_start: .ascii "_STDINT_H \000" .LASF219: .ascii "__FLT64_MAX_10_EXP__ 308\000" -.LASF874: +.LASF877: .ascii "RCC_PLLCFGR_PLLN_MASK (0b111111111)\000" -.LASF961: +.LASF972: .ascii "src/timer.c\000" -.LASF928: +.LASF939: .ascii "RESERVED1\000" -.LASF931: +.LASF942: .ascii "RESERVED2\000" .LASF3: .ascii "__STDC_UTF_32__ 1\000" -.LASF937: +.LASF948: .ascii "RESERVED4\000" .LASF241: .ascii "__FLT32X_DENORM_MIN__ 4.9406564584124654e-324F32x\000" -.LASF942: +.LASF953: .ascii "RESERVED6\000" .LASF152: .ascii "__FLT_MAX_10_EXP__ 38\000" -.LASF883: +.LASF894: .ascii "RCC_CFGR_PPRE1_BIT 10\000" .LASF259: .ascii "__FRACT_MAX__ 0X7FFFP-15R\000" @@ -4174,9 +4211,9 @@ tim4_start: .ascii "_READ_WRITE_RETURN_TYPE int\000" .LASF772: .ascii "SCNoLEAST32 __SCN32LEAST(o)\000" -.LASF891: +.LASF902: .ascii "RCC_CFGR_SW_PLL (0b10)\000" -.LASF906: +.LASF917: .ascii "TIM_CR1_CEN_BIT 0\000" .LASF798: .ascii "SCNd64 __SCN64(d)\000" @@ -4196,15 +4233,15 @@ tim4_start: .ascii "__int_fast64_t_defined 1\000" .LASF838: .ascii "__PRIPTR(x) __STRINGIFY(x)\000" -.LASF919: +.LASF930: .ascii "uint16_t\000" .LASF417: .ascii "__thumb2__ 1\000" .LASF321: .ascii "__ULLACCUM_FBIT__ 32\000" -.LASF897: +.LASF908: .ascii "RCC_APB1ENR_PWREN_BIT 28\000" -.LASF900: +.LASF911: .ascii "RCC_APB1ENR_USART2EN_ENABLE (1 << RCC_APB1ENR_USART" .ascii "2EN_BIT)\000" .LASF366: @@ -4213,19 +4250,19 @@ tim4_start: .ascii "_SYS_FEATURES_H \000" .LASF813: .ascii "SCNxLEAST64 __SCN64LEAST(x)\000" -.LASF934: +.LASF945: .ascii "RESERVED3\000" .LASF22: .ascii "__SIZEOF_LONG_DOUBLE__ 8\000" -.LASF940: +.LASF951: .ascii "RESERVED5\000" -.LASF949: +.LASF960: .ascii "CCMR1\000" -.LASF950: +.LASF961: .ascii "CCMR2\000" .LASF36: .ascii "__WCHAR_TYPE__ unsigned int\000" -.LASF903: +.LASF914: .ascii "TIMER_H_ \000" .LASF470: .ascii "_MB_LEN_MAX 8\000" @@ -4243,7 +4280,7 @@ tim4_start: .ascii "__need_wchar_t \000" .LASF66: .ascii "__UINT_FAST64_TYPE__ long long unsigned int\000" -.LASF889: +.LASF900: .ascii "RCC_CFGR_SWS_BIT 2\000" .LASF156: .ascii "__FLT_MIN__ 1.1754943508222875e-38F\000" @@ -4269,9 +4306,9 @@ tim4_start: .ascii "__SCN64(x) __INT64 __STRINGIFY(x)\000" .LASF647: .ascii "_GCC_WRAP_STDINT_H \000" -.LASF913: +.LASF924: .ascii "__uint16_t\000" -.LASF930: +.LASF941: .ascii "AHB2ENR\000" .LASF805: .ascii "PRIoLEAST64 __PRI64LEAST(o)\000" @@ -4285,7 +4322,7 @@ tim4_start: .ascii "__UINT8_MAX__ 0xff\000" .LASF575: .ascii "_UINTMAX_T_DECLARED \000" -.LASF946: +.LASF957: .ascii "timer\000" .LASF184: .ascii "__LDBL_MAX_EXP__ 1024\000" @@ -4297,6 +4334,8 @@ tim4_start: .ascii "__int8_t_defined 1\000" .LASF176: .ascii "__DBL_HAS_DENORM__ 1\000" +.LASF885: + .ascii "RCC_CFGR_MCO1_HSE (0b10)\000" .LASF625: .ascii "INTMAX_MAX (__INTMAX_MAX__)\000" .LASF602: @@ -4311,7 +4350,7 @@ tim4_start: .ascii "__FLT_DENORM_MIN__ 1.4012984643248171e-45F\000" .LASF534: .ascii "__LEAST8 \"hh\"\000" -.LASF885: +.LASF896: .ascii "RCC_CFGR_HPRE_DIV_NONE 0\000" .LASF540: .ascii "_END_STD_C \000" @@ -4323,13 +4362,13 @@ tim4_start: .ascii "PRIiLEAST16 __PRI16LEAST(i)\000" .LASF303: .ascii "__UACCUM_MIN__ 0.0UK\000" -.LASF870: +.LASF873: .ascii "RCC_PLLCFGR_PLLP_BIT 16\000" .LASF157: .ascii "__FLT_EPSILON__ 1.1920928955078125e-7F\000" .LASF770: .ascii "SCNdLEAST32 __SCN32LEAST(d)\000" -.LASF925: +.LASF936: .ascii "RESERVED0\000" .LASF807: .ascii "PRIxLEAST64 __PRI64LEAST(x)\000" @@ -4349,7 +4388,7 @@ tim4_start: .ascii "INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)\000" .LASF376: .ascii "__GCC_ATOMIC_SHORT_LOCK_FREE 2\000" -.LASF863: +.LASF865: .ascii "RCC_CR_HSION_BIT 0\000" .LASF779: .ascii "PRIxFAST32 __PRI32FAST(x)\000" @@ -4367,7 +4406,7 @@ tim4_start: .ascii "__LACCUM_FBIT__ 31\000" .LASF689: .ascii "PRIuLEAST8 __PRI8LEAST(u)\000" -.LASF941: +.LASF952: .ascii "BDCR\000" .LASF211: .ascii "__FLT32_HAS_QUIET_NAN__ 1\000" @@ -4401,7 +4440,7 @@ tim4_start: .ascii "__FP_FAST_FMAF 1\000" .LASF629: .ascii "SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)\000" -.LASF860: +.LASF862: .ascii "RCC_CR_HSEON_ON (1 << RCC_CR_HSEON_BIT)\000" .LASF565: .ascii "_INT16_T_DECLARED \000" @@ -4425,11 +4464,11 @@ tim4_start: .ascii "PRIdLEAST64 __PRI64LEAST(d)\000" .LASF255: .ascii "__USFRACT_EPSILON__ 0x1P-8UHR\000" -.LASF858: +.LASF860: .ascii "RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT)\000" .LASF763: .ascii "SCNx32 __SCN32(x)\000" -.LASF922: +.LASF933: .ascii "CFGR\000" .LASF558: .ascii "___int_least32_t_defined 1\000" @@ -4499,7 +4538,7 @@ tim4_start: .ascii "___int8_t_defined 1\000" .LASF248: .ascii "__SFRACT_MIN__ (-0.5HR-0.5HR)\000" -.LASF915: +.LASF926: .ascii "long unsigned int\000" .LASF349: .ascii "__SA_IBIT__ 16\000" @@ -4515,9 +4554,9 @@ tim4_start: .ascii "__ARM_FP16_FORMAT_IEEE\000" .LASF48: .ascii "__UINT16_TYPE__ short unsigned int\000" -.LASF868: +.LASF870: .ascii "RCC_PLLCFGR_PLLSRC_BIT 22\000" -.LASF948: +.LASF959: .ascii "DIER\000" .LASF657: .ascii "_WCHAR_T_DEFINED_ \000" @@ -4575,7 +4614,7 @@ tim4_start: .ascii "__GCC_ATOMIC_CHAR16_T_LOCK_FREE 2\000" .LASF790: .ascii "__PRI64FAST(x) __FAST64 __STRINGIFY(x)\000" -.LASF892: +.LASF903: .ascii "RCC_CFGR_SW_BIT 0\000" .LASF168: .ascii "__DBL_MAX_EXP__ 1024\000" @@ -4621,11 +4660,11 @@ tim4_start: .ascii "PRIX32 __PRI32(X)\000" .LASF774: .ascii "SCNxLEAST32 __SCN32LEAST(x)\000" -.LASF958: +.LASF969: .ascii "tim4_start\000" .LASF704: .ascii "SCNiFAST8 __SCN8FAST(i)\000" -.LASF921: +.LASF932: .ascii "PLLCFGR\000" .LASF5: .ascii "__GNUC__ 12\000" @@ -4653,7 +4692,7 @@ tim4_start: .ascii "__ULACCUM_MIN__ 0.0ULK\000" .LASF462: .ascii "_ATEXIT_DYNAMIC_ALLOC 1\000" -.LASF914: +.LASF925: .ascii "__uint32_t\000" .LASF188: .ascii "__LDBL_MAX__ 1.7976931348623157e+308L\000" @@ -4663,7 +4702,7 @@ tim4_start: .ascii "__FLT_RADIX__ 2\000" .LASF455: .ascii "_INTTYPES_H \000" -.LASF916: +.LASF927: .ascii "long long int\000" .LASF401: .ascii "__ARM_FEATURE_CMSE\000" @@ -4683,7 +4722,7 @@ tim4_start: .ascii "WINT_MAX (__WINT_MAX__)\000" .LASF823: .ascii "SCNuFAST64 __SCN64FAST(u)\000" -.LASF943: +.LASF954: .ascii "SSCGR\000" .LASF137: .ascii "__UINT_FAST64_MAX__ 0xffffffffffffffffULL\000" @@ -4711,7 +4750,7 @@ tim4_start: .ascii "___int32_t_defined 1\000" .LASF83: .ascii "__INT_WIDTH__ 32\000" -.LASF927: +.LASF938: .ascii "APB2RSTR\000" .LASF409: .ascii "__ARM_ARCH_PROFILE\000" @@ -4763,9 +4802,9 @@ tim4_start: .ascii "__ARM_NEON_FP\000" .LASF280: .ascii "__LLFRACT_EPSILON__ 0x1P-63LLR\000" -.LASF939: +.LASF950: .ascii "APB2LPENR\000" -.LASF907: +.LASF918: .ascii "TIM_ENABLE (1 << TIM_CR1_CEN_BIT)\000" .LASF821: .ascii "SCNiFAST64 __SCN64FAST(i)\000" @@ -4773,7 +4812,7 @@ tim4_start: .ascii "_ANSIDECL_H_ \000" .LASF684: .ascii "SCNu8 __SCN8(u)\000" -.LASF904: +.LASF915: .ascii "TIM4_BASE_ADDR (0x40000800U)\000" .LASF261: .ascii "__UFRACT_FBIT__ 16\000" @@ -4793,9 +4832,9 @@ tim4_start: .ascii "L)\000" .LASF608: .ascii "INT64_MAX (__INT64_MAX__)\000" -.LASF918: +.LASF929: .ascii "unsigned int\000" -.LASF857: +.LASF859: .ascii "RCC_CR_HSERDY_BIT 17\000" .LASF460: .ascii "__NEWLIB_MINOR__ 3\000" @@ -4833,6 +4872,8 @@ tim4_start: .ascii "__INT_FAST8_WIDTH__ 32\000" .LASF2: .ascii "__STDC_UTF_16__ 1\000" +.LASF890: + .ascii "RCC_CFGR_MCO1PRE_BIT 24\000" .LASF402: .ascii "__ARM_FEATURE_LDREX\000" .LASF336: @@ -4865,13 +4906,13 @@ tim4_start: .ascii "__ARM_FEATURE_COPROC 15\000" .LASF484: .ascii "__OBSOLETE_MATH_DEFAULT 1\000" -.LASF864: +.LASF866: .ascii "RCC_CR_HSION_ON (1 << RCC_CR_HSION_BIT)\000" .LASF671: .ascii "__PRI8FAST(x) __FAST8 __STRINGIFY(x)\000" .LASF82: .ascii "__SHRT_WIDTH__ 16\000" -.LASF880: +.LASF883: .ascii "RCC_CFGR_PPRE_DIV_2 (0b100)\000" .LASF473: .ascii "_UNBUF_STREAM_OPT 1\000" @@ -4879,7 +4920,7 @@ tim4_start: .ascii "__STRINGIFY(a) #a\000" .LASF356: .ascii "__USA_FBIT__ 16\000" -.LASF938: +.LASF949: .ascii "APB1LPENR\000" .LASF480: .ascii "__IEEE_LITTLE_ENDIAN \000" @@ -4909,6 +4950,9 @@ tim4_start: .ascii "PRIuLEAST32 __PRI32LEAST(u)\000" .LASF407: .ascii "__ARM_SIZEOF_MINIMAL_ENUM 1\000" +.LASF872: + .ascii "RCC_PLLCFGR_PLLSRC_HSI (0 << RCC_PLLCFGR_PLLSRC_BIT" + .ascii ")\000" .LASF499: .ascii "_POINTER_INT long\000" .LASF238: @@ -4939,7 +4983,7 @@ tim4_start: .ascii "__SCN16FAST(x) __FAST16 __STRINGIFY(x)\000" .LASF537: .ascii "__LEAST64 \"ll\"\000" -.LASF862: +.LASF864: .ascii "RCC_CR_HSIRDY_READY (1 << RCC_CR_HSIRDY_BIT)\000" .LASF659: .ascii "_WCHAR_T_H \000" @@ -4961,6 +5005,8 @@ tim4_start: .ascii "_FSEEK_OPTIMIZATION 1\000" .LASF87: .ascii "__WINT_WIDTH__ 32\000" +.LASF857: + .ascii "RCC_CR_CSS_BIT 19\000" .LASF515: .ascii "long\000" .LASF65: @@ -4987,9 +5033,11 @@ tim4_start: .ascii "SCNx64 __SCN64(x)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" -.LASF899: +.LASF889: + .ascii "RCC_CFGR_MCO1PRE_DIV4 (0b110)\000" +.LASF910: .ascii "RCC_APB1ENR_USART2EN_BIT 17\000" -.LASF884: +.LASF895: .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" .LASF646: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" @@ -5007,17 +5055,19 @@ tim4_start: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF734: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF926: +.LASF937: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF932: +.LASF943: .ascii "APB1ENR\000" .LASF742: .ascii "SCNdFAST16 __SCN16FAST(d)\000" -.LASF867: +.LASF887: + .ascii "RCC_CFGR_MCO1_BIT 21\000" +.LASF869: .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" .LASF788: @@ -5038,18 +5088,18 @@ tim4_start: .ascii "__NEWLIB_PATCHLEVEL__ 0\000" .LASF26: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" -.LASF869: +.LASF871: .ascii "RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT" .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF917: +.LASF928: .ascii "long long unsigned int\000" .LASF612: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" .LASF150: .ascii "__FLT_MIN_10_EXP__ (-37)\000" -.LASF890: +.LASF901: .ascii "RCC_CFGR_SWS_MASK (0b11)\000" .LASF312: .ascii "__ULACCUM_IBIT__ 32\000" @@ -5083,14 +5133,14 @@ tim4_start: .ascii "__SACCUM_MIN__ (-0X1P7HK-0X1P7HK)\000" .LASF274: .ascii "__ULFRACT_MAX__ 0XFFFFFFFFP-32ULR\000" -.LASF875: +.LASF878: .ascii "RCC_PLLCFGR_PLLN(n) ((n & RCC_PLLCFGR_PLLN_MASK) <<" .ascii " RCC_PLLCFGR_PLLN_BIT)\000" .LASF56: .ascii "__UINT_LEAST16_TYPE__ short unsigned int\000" .LASF574: .ascii "_INTMAX_T_DECLARED \000" -.LASF951: +.LASF962: .ascii "CCER\000" .LASF40: .ascii "__CHAR16_TYPE__ short unsigned int\000" @@ -5136,6 +5186,8 @@ tim4_start: .ascii "SIZE_MAX (__SIZE_MAX__)\000" .LASF333: .ascii "__DQ_IBIT__ 0\000" +.LASF891: + .ascii "RCC_CFGR_MCO1PRE_MASK (0b111)\000" .LASF450: .ascii "__ARM_BF16_FORMAT_ALTERNATIVE\000" .LASF45: @@ -5146,7 +5198,7 @@ tim4_start: .ascii "__int20__ +2\000" .LASF655: .ascii "_WCHAR_T_ \000" -.LASF947: +.LASF958: .ascii "SMCR\000" .LASF829: .ascii "PRIoMAX __PRIMAX(o)\000" @@ -5154,7 +5206,7 @@ tim4_start: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" .LASF744: .ascii "SCNoFAST16 __SCN16FAST(o)\000" -.LASF895: +.LASF906: .ascii "RCC_AHB1ENR_GPIOAEN_BIT 0\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" @@ -5218,7 +5270,7 @@ tim4_start: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF929: +.LASF940: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -5258,11 +5310,11 @@ tim4_start: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF924: +.LASF935: .ascii "AHB2RSTR\000" .LASF672: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" -.LASF882: +.LASF893: .ascii "RCC_CFGR_PPRE2_MASK (0b111)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" @@ -5288,7 +5340,7 @@ tim4_start: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF910: +.LASF921: .ascii "short int\000" .LASF836: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -5298,10 +5350,12 @@ tim4_start: .ascii "__UDA_IBIT__ 32\000" .LASF535: .ascii "__LEAST16 \"h\"\000" -.LASF877: +.LASF880: .ascii "RCC_PLLCFGR_PLLM_MASK (0b111111)\000" .LASF587: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" +.LASF884: + .ascii "RCC_CFGR_MCO1_HSI (0b00)\000" .LASF711: .ascii "__SCN16(x) __INT16 __STRINGIFY(x)\000" .LASF607: @@ -5314,13 +5368,13 @@ tim4_start: .ascii "__ARM_FEATURE_COPROC\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" -.LASF905: +.LASF916: .ascii "TIM4 ((struct timer *) TIM4_BASE_ADDR)\000" .LASF95: .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" .LASF609: .ascii "UINT64_MAX (__UINT64_MAX__)\000" -.LASF896: +.LASF907: .ascii "RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAE" .ascii "N_BIT)\000" .LASF472: @@ -5347,7 +5401,7 @@ tim4_start: .ascii "__INT16_MAX__ 0x7fff\000" .LASF479: .ascii "__SYS_CONFIG_H__ \000" -.LASF876: +.LASF879: .ascii "RCC_PLLCFGR_PLLM_BIT 0\000" .LASF8: .ascii "__VERSION__ \"12.3.1 20230626\"\000" @@ -5383,7 +5437,7 @@ tim4_start: .ascii "PRIdMAX __PRIMAX(d)\000" .LASF388: .ascii "__SIZEOF_WINT_T__ 4\000" -.LASF881: +.LASF892: .ascii "RCC_CFGR_PPRE2_BIT 13\000" .LASF783: .ascii "SCNoFAST32 __SCN32FAST(o)\000" @@ -5395,6 +5449,9 @@ tim4_start: .ascii "__LDBL_DECIMAL_DIG__ 17\000" .LASF702: .ascii "PRIXFAST8 __PRI8FAST(X)\000" +.LASF905: + .ascii "RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << R" + .ascii "CC_CFGR_SW_BIT)\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" .LASF785: @@ -5435,13 +5492,13 @@ tim4_start: .ascii "__ULLFRACT_MIN__ 0.0ULLR\000" .LASF652: .ascii "_T_WCHAR_ \000" -.LASF956: +.LASF967: .ascii "BDTR\000" .LASF382: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF665: .ascii "_BSD_WCHAR_T_\000" -.LASF944: +.LASF955: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -5449,11 +5506,11 @@ tim4_start: .ascii "UINT16_C(x) __UINT16_C(x)\000" .LASF757: .ascii "PRIx32 __PRI32(x)\000" -.LASF959: +.LASF970: .ascii "tim4_init\000" -.LASF920: +.LASF931: .ascii "uint32_t\000" -.LASF873: +.LASF876: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" .LASF690: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" @@ -5487,7 +5544,7 @@ tim4_start: .ascii "__LDBL_DIG__ 15\000" .LASF89: .ascii "__SIZE_WIDTH__ 32\000" -.LASF871: +.LASF874: .ascii "RCC_PLLCFGR_PLLP_MASK (0b11)\000" .LASF481: .ascii "_SUPPORTS_ERREXCEPT \000" @@ -5495,7 +5552,7 @@ tim4_start: .ascii "__FLT64_DIG__ 15\000" .LASF525: .ascii "_INT32_EQ_LONG \000" -.LASF879: +.LASF882: .ascii "RCC_CFGR_PPRE_DIV_NONE 0\000" .LASF77: .ascii "__WINT_MAX__ 0xffffffffU\000" @@ -5511,7 +5568,7 @@ tim4_start: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF911: +.LASF922: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -5527,7 +5584,7 @@ tim4_start: .ascii "__HQ_FBIT__ 15\000" .LASF799: .ascii "SCNi64 __SCN64(i)\000" -.LASF861: +.LASF863: .ascii "RCC_CR_HSIRDY_BIT 1\000" .LASF80: .ascii "__SIZE_MAX__ 0xffffffffU\000" @@ -5535,6 +5592,8 @@ tim4_start: .ascii "__FLT32X_HAS_INFINITY__ 1\000" .LASF819: .ascii "PRIXFAST64 __PRI64FAST(X)\000" +.LASF858: + .ascii "RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT)\000" .LASF412: .ascii "__ARM_ARCH\000" .LASF591: @@ -5551,7 +5610,7 @@ tim4_start: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF523: .ascii "long +4\000" -.LASF923: +.LASF934: .ascii "AHB1RSTR\000" .LASF724: .ascii "SCNx16 __SCN16(x)\000" @@ -5561,7 +5620,7 @@ tim4_start: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF340: .ascii "__USQ_FBIT__ 32\000" -.LASF962: +.LASF973: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF797: .ascii "PRIX64 __PRI64(X)\000" @@ -5613,7 +5672,7 @@ tim4_start: .ascii "__DBL_MANT_DIG__ 53\000" .LASF272: .ascii "__ULFRACT_IBIT__ 0\000" -.LASF887: +.LASF898: .ascii "RCC_CFGR_HPRE_MASK (0b1111)\000" .LASF72: .ascii "__INT_MAX__ 0x7fffffff\000" diff --git a/build/timer.i b/build/timer.i index 2ba9e1b..a51946d 100644 --- a/build/timer.i +++ b/build/timer.i @@ -2014,6 +2014,11 @@ struct rcc { #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) +#define RCC_CR_CSS_BIT 19 +#define RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT) + + + #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -2036,6 +2041,7 @@ struct rcc { #define RCC_PLLCFGR_PLLSRC_BIT 22 #define RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT) +#define RCC_PLLCFGR_PLLSRC_HSI (0 << RCC_PLLCFGR_PLLSRC_BIT) #define RCC_PLLCFGR_PLLP_BIT 16 #define RCC_PLLCFGR_PLLP_MASK (0b11) @@ -2055,6 +2061,19 @@ struct rcc { #define RCC_CFGR_PPRE_DIV_2 (0b100) +#define RCC_CFGR_MCO1_HSI (0b00) +#define RCC_CFGR_MCO1_HSE (0b10) +#define RCC_CFGR_MCO1_PLL (0b11) + +#define RCC_CFGR_MCO1_BIT 21 +#define RCC_CFGR_MCO1_MASK (0b11) + +#define RCC_CFGR_MCO1PRE_DIV4 (0b110) + +#define RCC_CFGR_MCO1PRE_BIT 24 +#define RCC_CFGR_MCO1PRE_MASK (0b111) + + #define RCC_CFGR_PPRE2_BIT 13 #define RCC_CFGR_PPRE2_MASK (0b111) @@ -2075,6 +2094,7 @@ struct rcc { #define RCC_CFGR_SWS_MASK (0b11) +#define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_BIT 0 diff --git a/build/timer.o b/build/timer.o index ef13007a9fb6e5ec660b6e4ea289dd4b14157fd8..8ae381b82693622a8d20766b787023b070d0a884 100644 GIT binary patch delta 7317 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%0DHhm4k>g#Cyy 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 xK2%TE+n~mjuy}IV1~n#!n#pw=)R;> 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" -.LASF899: +.LASF889: + .ascii "RCC_CFGR_MCO1PRE_DIV4 (0b110)\000" +.LASF910: .ascii "RCC_APB1ENR_USART2EN_BIT 17\000" -.LASF884: +.LASF895: .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" .LASF646: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" -.LASF912: +.LASF926: .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" .LASF624: .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" @@ -5546,22 +5636,24 @@ usart2_write: .ascii "__SACCUM_FBIT__ 7\000" .LASF734: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF969: +.LASF984: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF975: +.LASF990: .ascii "APB1ENR\000" .LASF698: .ascii "PRIiFAST8 __PRI8FAST(i)\000" .LASF742: .ascii "SCNdFAST16 __SCN16FAST(d)\000" -.LASF867: +.LASF887: + .ascii "RCC_CFGR_MCO1_BIT 21\000" +.LASF869: .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" -.LASF934: +.LASF949: .ascii "USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)\000" .LASF788: .ascii "__PRI64LEAST(x) __LEAST64 __STRINGIFY(x)\000" @@ -5581,18 +5673,18 @@ usart2_write: .ascii "__NEWLIB_PATCHLEVEL__ 0\000" .LASF26: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" -.LASF869: +.LASF871: .ascii "RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT" .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF960: +.LASF975: .ascii "long long unsigned int\000" .LASF612: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" .LASF150: .ascii "__FLT_MIN_10_EXP__ (-37)\000" -.LASF890: +.LASF901: .ascii "RCC_CFGR_SWS_MASK (0b11)\000" .LASF312: .ascii "__ULACCUM_IBIT__ 32\000" @@ -5618,6 +5710,8 @@ usart2_write: .ascii "SCNdFAST32 __SCN32FAST(d)\000" .LASF339: .ascii "__UHQ_IBIT__ 0\000" +.LASF925: + .ascii "GPIO_MODER_MODER3_BIT 6\000" .LASF370: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF60: @@ -5630,7 +5724,7 @@ usart2_write: .ascii "__SACCUM_MIN__ (-0X1P7HK-0X1P7HK)\000" .LASF274: .ascii "__ULFRACT_MAX__ 0XFFFFFFFFP-32ULR\000" -.LASF875: +.LASF878: .ascii "RCC_PLLCFGR_PLLN(n) ((n & RCC_PLLCFGR_PLLN_MASK) <<" .ascii " RCC_PLLCFGR_PLLN_BIT)\000" .LASF56: @@ -5641,7 +5735,7 @@ usart2_write: .ascii "__LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK\000" .LASF40: .ascii "__CHAR16_TYPE__ short unsigned int\000" -.LASF936: +.LASF951: .ascii "USART_SR_TC_COMPLETED (1 << USART_SR_TC_BIT)\000" .LASF231: .ascii "__FLT32X_DIG__ 15\000" @@ -5675,11 +5769,11 @@ usart2_write: .ascii "SCNdFAST8 __SCN8FAST(d)\000" .LASF577: .ascii "_UINTPTR_T_DECLARED \000" -.LASF997: +.LASF1012: .ascii "AFRH\000" .LASF314: .ascii "__ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK\000" -.LASF996: +.LASF1011: .ascii "AFRL\000" .LASF273: .ascii "__ULFRACT_MIN__ 0.0ULR\000" @@ -5687,6 +5781,8 @@ usart2_write: .ascii "SIZE_MAX (__SIZE_MAX__)\000" .LASF333: .ascii "__DQ_IBIT__ 0\000" +.LASF891: + .ascii "RCC_CFGR_MCO1PRE_MASK (0b111)\000" .LASF450: .ascii "__ARM_BF16_FORMAT_ALTERNATIVE\000" .LASF45: @@ -5705,13 +5801,10 @@ usart2_write: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" .LASF744: .ascii "SCNoFAST16 __SCN16FAST(o)\000" -.LASF1003: +.LASF1018: .ascii "usart2_init\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" -.LASF925: - .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" - .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF348: .ascii "__SA_FBIT__ 15\000" .LASF661: @@ -5736,7 +5829,7 @@ usart2_write: .ascii "PRIi16 __PRI16(i)\000" .LASF390: .ascii "__ARM_FEATURE_DSP 1\000" -.LASF942: +.LASF957: .ascii "USART_CR1_UE_ENABLE (1 << USART_CR1_UE_BIT)\000" .LASF826: .ascii "__SCNMAX(x) __STRINGIFY(ll ##x)\000" @@ -5744,7 +5837,7 @@ usart2_write: .ascii "__QQ_IBIT__ 0\000" .LASF764: .ascii "PRIdLEAST32 __PRI32LEAST(d)\000" -.LASF991: +.LASF1006: .ascii "OTYPER\000" .LASF812: .ascii "SCNuLEAST64 __SCN64LEAST(u)\000" @@ -5766,21 +5859,21 @@ usart2_write: .ascii "RCC_H_ \000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF923: +.LASF938: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" .LASF512: .ascii "short\000" -.LASF948: +.LASF963: .ascii "USART_BRR_MANTISSA_MASK (0b111111111111)\000" -.LASF937: +.LASF952: .ascii "USART_SR_RXNE_BIT 5\000" .LASF436: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF972: +.LASF987: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -5820,11 +5913,11 @@ usart2_write: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF967: +.LASF982: .ascii "AHB2RSTR\000" .LASF672: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" -.LASF882: +.LASF893: .ascii "RCC_CFGR_PPRE2_MASK (0b111)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" @@ -5840,7 +5933,7 @@ usart2_write: .ascii "_FVWRITE_IN_STREAMIO 1\000" .LASF833: .ascii "SCNdMAX __SCNMAX(d)\000" -.LASF920: +.LASF935: .ascii "GPIO_AFRL_AFRL2_BIT 8\000" .LASF190: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" @@ -5852,11 +5945,11 @@ usart2_write: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF993: +.LASF1008: .ascii "PUPDR\000" .LASF836: .ascii "SCNuMAX __SCNMAX(u)\000" -.LASF932: +.LASF947: .ascii "USART2 ((struct usart *) USART2_BASE_ADDR)\000" .LASF121: .ascii "__UINT16_C(c) c\000" @@ -5864,12 +5957,12 @@ usart2_write: .ascii "__UDA_IBIT__ 32\000" .LASF535: .ascii "__LEAST16 \"h\"\000" -.LASF877: +.LASF880: .ascii "RCC_PLLCFGR_PLLM_MASK (0b111111)\000" .LASF587: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" -.LASF935: - .ascii "USART_SR_TC_BIT 6\000" +.LASF884: + .ascii "RCC_CFGR_MCO1_HSI (0b00)\000" .LASF711: .ascii "__SCN16(x) __INT16 __STRINGIFY(x)\000" .LASF607: @@ -5886,6 +5979,8 @@ usart2_write: .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" .LASF609: .ascii "UINT64_MAX (__UINT64_MAX__)\000" +.LASF930: + .ascii "GPIO_AFRH_AFRH8_MASK (0b1111)\000" .LASF472: .ascii "_RETARGETABLE_LOCKING 1\000" .LASF440: @@ -5910,7 +6005,7 @@ usart2_write: .ascii "__INT16_MAX__ 0x7fff\000" .LASF479: .ascii "__SYS_CONFIG_H__ \000" -.LASF876: +.LASF879: .ascii "RCC_PLLCFGR_PLLM_BIT 0\000" .LASF8: .ascii "__VERSION__ \"12.3.1 20230626\"\000" @@ -5920,7 +6015,7 @@ usart2_write: .ascii "__FAST8 \000" .LASF497: .ascii "__XSI_VISIBLE 0\000" -.LASF994: +.LASF1009: .ascii "BSRR\000" .LASF795: .ascii "PRIu64 __PRI64(u)\000" @@ -5946,7 +6041,7 @@ usart2_write: .ascii "PRIdMAX __PRIMAX(d)\000" .LASF388: .ascii "__SIZEOF_WINT_T__ 4\000" -.LASF881: +.LASF892: .ascii "RCC_CFGR_PPRE2_BIT 13\000" .LASF783: .ascii "SCNoFAST32 __SCN32FAST(o)\000" @@ -5958,6 +6053,9 @@ usart2_write: .ascii "__LDBL_DECIMAL_DIG__ 17\000" .LASF702: .ascii "PRIXFAST8 __PRI8FAST(X)\000" +.LASF905: + .ascii "RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << R" + .ascii "CC_CFGR_SW_BIT)\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" .LASF785: @@ -6004,7 +6102,7 @@ usart2_write: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF665: .ascii "_BSD_WCHAR_T_\000" -.LASF987: +.LASF1002: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -6014,9 +6112,9 @@ usart2_write: .ascii "PRIx32 __PRI32(x)\000" .LASF278: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" -.LASF963: +.LASF978: .ascii "uint32_t\000" -.LASF873: +.LASF876: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" .LASF690: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" @@ -6052,7 +6150,7 @@ usart2_write: .ascii "__LDBL_DIG__ 15\000" .LASF89: .ascii "__SIZE_WIDTH__ 32\000" -.LASF871: +.LASF874: .ascii "RCC_PLLCFGR_PLLP_MASK (0b11)\000" .LASF481: .ascii "_SUPPORTS_ERREXCEPT \000" @@ -6068,13 +6166,13 @@ usart2_write: .ascii "__INT_LEAST16_TYPE__ short int\000" .LASF326: .ascii "__QQ_FBIT__ 7\000" -.LASF928: +.LASF943: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF769: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF954: +.LASF969: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -6082,7 +6180,7 @@ usart2_write: .ascii "__FLT32_HAS_INFINITY__ 1\000" .LASF416: .ascii "__thumb__ 1\000" -.LASF947: +.LASF962: .ascii "USART_BRR_MANTISSA_BIT 4\000" .LASF421: .ascii "__ARMEL__ 1\000" @@ -6090,22 +6188,25 @@ usart2_write: .ascii "PRIXLEAST8 __PRI8LEAST(X)\000" .LASF328: .ascii "__HQ_FBIT__ 15\000" -.LASF908: +.LASF919: .ascii "__bool_true_false_are_defined 1\000" -.LASF941: +.LASF956: .ascii "USART_CR1_UE_BIT 13\000" -.LASF911: - .ascii "GPIO_MODER_MODER3_BIT 7\000" +.LASF940: + .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" + .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF799: .ascii "SCNi64 __SCN64(i)\000" -.LASF861: +.LASF863: .ascii "RCC_CR_HSIRDY_BIT 1\000" .LASF80: .ascii "__SIZE_MAX__ 0xffffffffU\000" -.LASF1000: +.LASF1015: .ascii "usart2_write\000" .LASF819: .ascii "PRIXFAST64 __PRI64FAST(X)\000" +.LASF858: + .ascii "RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT)\000" .LASF412: .ascii "__ARM_ARCH\000" .LASF591: @@ -6122,7 +6223,7 @@ usart2_write: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF523: .ascii "long +4\000" -.LASF966: +.LASF981: .ascii "AHB1RSTR\000" .LASF724: .ascii "SCNx16 __SCN16(x)\000" @@ -6132,7 +6233,7 @@ usart2_write: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF340: .ascii "__USQ_FBIT__ 32\000" -.LASF1006: +.LASF1021: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF797: .ascii "PRIX64 __PRI64(X)\000" @@ -6172,7 +6273,7 @@ usart2_write: .ascii "__DBL_MIN_10_EXP__ (-307)\000" .LASF796: .ascii "PRIx64 __PRI64(x)\000" -.LASF943: +.LASF958: .ascii "USART_CR1_TE_BIT 3\000" .LASF513: .ascii "__int20\000" @@ -6180,7 +6281,7 @@ usart2_write: .ascii "INT_FAST32_MAX (__INT_FAST32_MAX__)\000" .LASF205: .ascii "__FLT32_NORM_MAX__ 3.4028234663852886e+38F32\000" -.LASF905: +.LASF916: .ascii "bool _Bool\000" .LASF632: .ascii "PTRDIFF_MIN (-PTRDIFF_MAX - 1)\000" @@ -6190,7 +6291,7 @@ usart2_write: .ascii "__DBL_MANT_DIG__ 53\000" .LASF272: .ascii "__ULFRACT_IBIT__ 0\000" -.LASF887: +.LASF898: .ascii "RCC_CFGR_HPRE_MASK (0b1111)\000" .LASF72: .ascii "__INT_MAX__ 0x7fffffff\000" diff --git a/build/usart.i b/build/usart.i index 4a86ecc..d6fa9c4 100644 --- a/build/usart.i +++ b/build/usart.i @@ -2014,6 +2014,11 @@ struct rcc { #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) +#define RCC_CR_CSS_BIT 19 +#define RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT) + + + #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -2036,6 +2041,7 @@ struct rcc { #define RCC_PLLCFGR_PLLSRC_BIT 22 #define RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT) +#define RCC_PLLCFGR_PLLSRC_HSI (0 << RCC_PLLCFGR_PLLSRC_BIT) #define RCC_PLLCFGR_PLLP_BIT 16 #define RCC_PLLCFGR_PLLP_MASK (0b11) @@ -2055,6 +2061,19 @@ struct rcc { #define RCC_CFGR_PPRE_DIV_2 (0b100) +#define RCC_CFGR_MCO1_HSI (0b00) +#define RCC_CFGR_MCO1_HSE (0b10) +#define RCC_CFGR_MCO1_PLL (0b11) + +#define RCC_CFGR_MCO1_BIT 21 +#define RCC_CFGR_MCO1_MASK (0b11) + +#define RCC_CFGR_MCO1PRE_DIV4 (0b110) + +#define RCC_CFGR_MCO1PRE_BIT 24 +#define RCC_CFGR_MCO1PRE_MASK (0b111) + + #define RCC_CFGR_PPRE2_BIT 13 #define RCC_CFGR_PPRE2_MASK (0b111) @@ -2075,6 +2094,7 @@ struct rcc { #define RCC_CFGR_SWS_MASK (0b11) +#define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_BIT 0 @@ -2132,13 +2152,21 @@ struct gpio { #define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) -#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_AF_MODE (0b10) + +#define GPIO_MODER_MODER8_BIT 16 +#define GPIO_MODER_MODER8_MASK (0b11) + +#define GPIO_MODER_MODER3_BIT 6 #define GPIO_MODER_MODER3_MASK (0b11) -#define GPIO_MODER_MODER3_AF (0b10) #define GPIO_MODER_MODER2_BIT 4 #define GPIO_MODER_MODER2_MASK (0b11) -#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRH_AFRH8_BIT 0 +#define GPIO_AFRH_AFRH8_MASK (0b1111) +#define GPIO_AFRH_AFRH8_MCO_1 (0b0000) #define GPIO_AFRL_AFRL3_BIT 12 @@ -2173,9 +2201,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 64 "src/gpio.h" 3 4 +# 72 "src/gpio.h" 3 4 _Bool -# 64 "src/gpio.h" +# 72 "src/gpio.h" val); # 3 "src/usart.c" 2 # 1 "src/usart.h" 1 @@ -2250,8 +2278,8 @@ void usart2_init(void) { ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 4); ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 4); - ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 7); - ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 7); + ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 6); + ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 6); ((struct gpio *) (0x40020000U))->AFRL &= ~((0b1111) << 8); @@ -2260,19 +2288,25 @@ void usart2_init(void) { ((struct gpio *) (0x40020000U))->AFRL |= ((0b0111) << 12); + ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 16); + ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 16); + + + ((struct gpio *) (0x40020000U))->AFRH &= ~((0b1111) << 0); + ((struct gpio *) (0x40020000U))->AFRH |= ((0b0000) << 0); + + ((struct rcc *) (0x40023800U))->APB1ENR |= (1 << 17); ((struct usart *) (0x40004400U))->CR1 = 0; ((struct usart *) (0x40004400U))->CR2 = 0; ((struct usart *) (0x40004400U))->CR3 = 0; -# 54 "src/usart.c" +# 55 "src/usart.c" ((struct usart *) (0x40004400U))->BRR &= ~((0b111111111111) << 4); - ((struct usart *) (0x40004400U))->BRR |= (0x34 << 4); + ((struct usart *) (0x40004400U))->BRR |= (0x68 << 4); - - ((struct usart *) (0x40004400U))->BRR &= ~((0b111) << 0); - ((struct usart *) (0x40004400U))->BRR |= (0x0 << 0); + ((struct usart *) (0x40004400U))->BRR |= (0x2AB << 0); ((struct usart *) (0x40004400U))->CR1 |= (1 << 3); @@ -2288,8 +2322,8 @@ void usart2_write_byte(uint8_t c) { ((struct usart *) (0x40004400U))->DR = c; - while ((((struct usart *) (0x40004400U))->SR & (1 << 7)) == 0); + while (!(((struct usart *) (0x40004400U))->SR & (1 << 6))); } void usart2_write(char *buf) { diff --git a/build/usart.o b/build/usart.o index 6e2669569b8803292b1932fe98d61d07ccf26b42..6247ac697a8a83251102e3fe45ef8f688de2657c 100644 GIT binary patch delta 8881 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 &= ~(PWR_CR_VOS_MASK << PWR_CR_VOS_BIT); PWR->CR |= (PWR_SCALE3 << PWR_CR_VOS_BIT); + // Turn off HSI (which is on by default) + RCC->CR &= ~RCC_CR_HSION_ON; + // Turn on HSE RCC->CR |= RCC_CR_HSEON_ON; + // Turn on clock security system + RCC->CR |= RCC_CR_CSS_ON; + // Wait indefinitely for HSE to be ready // TODO indicate error/timeout somehow? while (!(RCC->CR & RCC_CR_HSERDY_READY)); @@ -30,6 +36,7 @@ static void system_clock_init(void) { RCC->CR &= ~RCC_CR_PLLON_ON; // Set HSE as PLL source + /* RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; */ RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; // Settings to achieve system clock of 96Mhz @@ -59,19 +66,28 @@ static void system_clock_init(void) { FLASH->ACR |= FLASH_ACR_ICEN_ENABLE; // Set latency to be 3 wait states (TODO: understand why exactly 3) - FLASH->ACR &= ~(FLASH_ACR_LATENCY_MASK << FLASH_ACR_LATENCY_BIT); - RCC->CFGR |= (FLASH_ACR_LATENCY_3_WAIT_STATES << FLASH_ACR_LATENCY_BIT); + /* FLASH->ACR &= ~(FLASH_ACR_LATENCY_MASK << FLASH_ACR_LATENCY_BIT); */ + /* RCC->CFGR |= (FLASH_ACR_LATENCY_3_WAIT_STATES << FLASH_ACR_LATENCY_BIT); */ // Use PLL as system clock - RCC->CFGR &= ~(RCC_CFGR_SW_MASK << RCC_CFGR_SW_BIT); - RCC->CFGR |= (RCC_CFGR_SW_PLL << RCC_CFGR_SW_BIT); + /* RCC->CFGR &= ~(RCC_CFGR_SW_MASK << RCC_CFGR_SW_BIT); */ + /* RCC->CFGR |= (RCC_CFGR_SW_PLL << RCC_CFGR_SW_BIT); */ + RCC->CFGR |= RCC_CFGR_SW(RCC_CFGR_SW_PLL); // Wait indefinitely for PLL clock to be selected // TODO indicate error/timeout somehow? while (((RCC->CFGR >> RCC_CFGR_SWS_BIT) & RCC_CFGR_SWS_MASK) != RCC_CFGR_SWS_PLL); - // Turn off HSI (which is on by default) - RCC->CR &= ~RCC_CR_HSION_ON; + + // Output HSE clock + RCC->CFGR &= ~(RCC_CFGR_MCO1_MASK << RCC_CFGR_MCO1_BIT); + /* RCC->CFGR |= (RCC_CFGR_MCO1_HSE << RCC_CFGR_MCO1_BIT); */ + /* RCC->CFGR |= (RCC_CFGR_MCO1_PLL << RCC_CFGR_MCO1_BIT); */ + RCC->CFGR |= (RCC_CFGR_MCO1_HSI << RCC_CFGR_MCO1_BIT); + + /* RCC->CFGR &= ~(RCC_CFGR_MCO1PRE_MASK << RCC_CFGR_MCO1PRE_BIT); */ + /* RCC->CFGR |= (RCC_CFGR_MCO1PRE_DIV4 << RCC_CFGR_MCO1PRE_BIT); */ + } int main(void) { @@ -89,11 +105,12 @@ int main(void) { uint16_t counter = TIM4->CNT; bool led_on = false; while(1) { + /* usart2_write("U\n"); */ if ((TIM4->CNT - counter) >= 250) { led_on = !led_on; gpio_write(led, led_on); - usart2_write("hello, world\n"); + usart2_write("U\n"); counter = TIM4->CNT; } diff --git a/src/rcc.h b/src/rcc.h index 045b533..c48c141 100644 --- a/src/rcc.h +++ b/src/rcc.h @@ -46,6 +46,11 @@ struct rcc { #define RCC_CR_PLLON_BIT 24 #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) +// Clock security system +#define RCC_CR_CSS_BIT 19 +#define RCC_CR_CSS_ON (1 << RCC_CR_CSS_BIT) + + // HSE clock ready flag #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -69,6 +74,7 @@ struct rcc { #define RCC_PLLCFGR_PLLSRC_BIT 22 #define RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT) +#define RCC_PLLCFGR_PLLSRC_HSI (0 << RCC_PLLCFGR_PLLSRC_BIT) #define RCC_PLLCFGR_PLLP_BIT 16 // Bits [17:16] #define RCC_PLLCFGR_PLLP_MASK (0b11) @@ -87,6 +93,19 @@ struct rcc { #define RCC_CFGR_PPRE_DIV_NONE 0 #define RCC_CFGR_PPRE_DIV_2 (0b100) +// Microcontroller clock output 1 +#define RCC_CFGR_MCO1_HSI (0b00) +#define RCC_CFGR_MCO1_HSE (0b10) +#define RCC_CFGR_MCO1_PLL (0b11) + +#define RCC_CFGR_MCO1_BIT 21 // Bits [22:21] +#define RCC_CFGR_MCO1_MASK (0b11) + +#define RCC_CFGR_MCO1PRE_DIV4 (0b110) + +#define RCC_CFGR_MCO1PRE_BIT 24 // Bits [26:24] +#define RCC_CFGR_MCO1PRE_MASK (0b111) + // APB2 #define RCC_CFGR_PPRE2_BIT 13 // Bits [15:13] #define RCC_CFGR_PPRE2_MASK (0b111) @@ -109,6 +128,7 @@ struct rcc { // System clock switch #define RCC_CFGR_SW_PLL (0b10) +#define RCC_CFGR_SW_PLL (0b10) #define RCC_CFGR_SW_BIT 0 // Bits [1:0] #define RCC_CFGR_SW_MASK (0b11) diff --git a/src/usart.c b/src/usart.c index 32bc316..84cab3e 100644 --- a/src/usart.c +++ b/src/usart.c @@ -9,9 +9,9 @@ void usart2_init(void) { // Configure PA2 and PA3 (USART2 pins) to use alternative functions // file:///home/alex/sync/org/stm32-sand/stm32f411ce.pdf#page=48 GPIOA->MODER &= ~(GPIO_MODER_MODER2_MASK << GPIO_MODER_MODER2_BIT); - GPIOA->MODER |= (GPIO_MODER_MODER2_AF << GPIO_MODER_MODER2_BIT); + GPIOA->MODER |= (GPIO_MODER_AF_MODE << GPIO_MODER_MODER2_BIT); GPIOA->MODER &= ~(GPIO_MODER_MODER3_MASK << GPIO_MODER_MODER3_BIT); - GPIOA->MODER |= (GPIO_MODER_MODER3_AF << GPIO_MODER_MODER3_BIT); + GPIOA->MODER |= (GPIO_MODER_AF_MODE << GPIO_MODER_MODER3_BIT); // Set pin alternative modes to use USART GPIOA->AFRL &= ~(GPIO_AFRL_AFRL2_MASK << GPIO_AFRL_AFRL2_BIT); @@ -19,6 +19,14 @@ void usart2_init(void) { GPIOA->AFRL &= ~(GPIO_AFRL_AFRL3_MASK << GPIO_AFRL_AFRL3_BIT); GPIOA->AFRL |= (GPIO_AFRL_AFRL3_USART2_RX << GPIO_AFRL_AFRL3_BIT); + // Configure PA8 to output HSE (MCO1) + GPIOA->MODER &= ~(GPIO_MODER_MODER8_MASK << GPIO_MODER_MODER8_BIT); + GPIOA->MODER |= (GPIO_MODER_AF_MODE << GPIO_MODER_MODER8_BIT); + + // Set pin alternative mode to use MCO1 + GPIOA->AFRH &= ~(GPIO_AFRH_AFRH8_MASK << GPIO_AFRH_AFRH8_BIT); + GPIOA->AFRH |= (GPIO_AFRH_AFRH8_MCO_1 << GPIO_AFRH_AFRH8_BIT); + // Enable USART RCC->APB1ENR |= RCC_APB1ENR_USART2EN_ENABLE; @@ -30,33 +38,24 @@ void usart2_init(void) { // Calculate Baud rate: // baud = f_clck / (8 * (2 - OVER8) * USARTDIV) => // (8 * (2 - OVER8) * USARTDIV) = f_clock / baud => + // baud * (8 * (2 - OVER8) * USARTDIV) = f_clock => // USARTDIV = (f_clock / (baud * (8 * (2 - OVER8))) - // Target Baud rate = 115200, f_clock = 48MHz + // Target Baud rate = 115200, f_clock = 48MHz,OVER8 = 0 - // With OVER8 = 1 (oversampling by 8) - // USARTDIV = (48E6 / (115200 * (8 * (2 - 0)))) = 26.0416666 + // USARTDIV = (48E6 / (115200 * (8 * 2))) = 26.0416666 // mantissa = 26 - // fraction = 0.041666 * 8 = 0.33328 ~= 0 + // fraction = 0.041666 * 16 = 0.666656 ~= 1 - // rounding fraction up: USARTDIV = 26 // baud = 48E6 / (8 * 2 * 26) = 115384.61538461539 // error of 0.001% (115384.61538461539 / 115200 ) = 1.001602564102564 - - // baud = f_clck / (8 * (2 - OVER8) * USARTDIV) */ - // baud * ((8 * (2 - OVER8) * USARTDIV)) = f_clck */ - // 393400 * (8 * 2 * 26) = 163654400 - - /* USART2->CR1 |= USART_CR1_OVER8_8; */ USART2->BRR &= ~(USART_BRR_MANTISSA_MASK << USART_BRR_MANTISSA_BIT); - USART2->BRR |= (0x34 << USART_BRR_MANTISSA_BIT); - /* USART2->BRR |= (0x69 << USART_BRR_MANTISSA_BIT); */ - /* USART2->BRR |= (0x1A << USART_BRR_MANTISSA_BIT); */ - USART2->BRR &= ~(USART_BRR_FRACTION_MASK << USART_BRR_FRACTION_BIT); - USART2->BRR |= (0x0 << USART_BRR_FRACTION_BIT); + USART2->BRR |= (0x68 << USART_BRR_MANTISSA_BIT); + /* USART2->BRR &= ~(USART_BRR_FRACTION_MASK << USART_BRR_FRACTION_BIT); */ + USART2->BRR |= (0x2AB << USART_BRR_FRACTION_BIT); // Enable transmitter and receiver USART2->CR1 |= USART_CR1_TE_ENABLE; @@ -72,8 +71,8 @@ void usart2_write_byte(uint8_t c) { USART2->DR = c; // Wait indefinitely for transmission to be ready for data - while ((USART2->SR & USART_SR_TXE_TRANSMITTED) == 0); - /* while (!(USART2->SR & USART_SR_TC_COMPLETED)); */ + /* while ((USART2->SR & USART_SR_TXE_TRANSMITTED) == 0); */ + while (!(USART2->SR & USART_SR_TC_COMPLETED)); } void usart2_write(char *buf) { diff --git a/src/usart.h b/src/usart.h index c44a0ad..48a121d 100644 --- a/src/usart.h +++ b/src/usart.h @@ -49,10 +49,10 @@ struct usart { // BRR Register #define USART_BRR_MANTISSA_BIT 4 // Bits [15:4] -#define USART_BRR_MANTISSA_MASK (0b111111111111) // Bits [15:4] +#define USART_BRR_MANTISSA_MASK (0b111111111111) #define USART_BRR_FRACTION_BIT 0 // Bits [3:0] -#define USART_BRR_FRACTION_MASK (0b111) // Bits [3:0] +#define USART_BRR_FRACTION_MASK (0b111) void usart2_init(void); void usart2_start(void);