From d9389b4eb864ff4426ea09232b44b365ba1407c7 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Wed, 31 Jul 2024 11:57:35 +0200 Subject: [PATCH] Configure system clock to run at 96Mhz --- build/final.elf | Bin 48108 -> 49840 bytes build/final.elf.map | 262 ++++----- build/main.S | 1264 ++++++++++++++++++++++++++++++------------- build/main.i | 146 ++++- build/main.o | Bin 45212 -> 47756 bytes src/flash.h | 1 - src/main.c | 68 +++ src/pwr.h | 22 + src/rcc.h | 16 +- 9 files changed, 1252 insertions(+), 527 deletions(-) create mode 100644 src/pwr.h diff --git a/build/final.elf b/build/final.elf index b09d64636b2bfad852f1a1d4c6e86d38fa74364a..40a2191924ffe6be03801548097ea2bc3143d238 100755 GIT binary patch delta 5845 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 RLTv{F!)cf>s5uQ~0{{#|N^t-H diff --git a/build/final.elf.map b/build/final.elf.map index 6d411a5..8e44d1b 100644 --- a/build/final.elf.map +++ b/build/final.elf.map @@ -33,6 +33,8 @@ Discarded input sections .group 0x00000000 0xc build/main.o .group 0x00000000 0xc build/main.o .group 0x00000000 0xc build/main.o + .group 0x00000000 0xc build/main.o + .group 0x00000000 0xc build/main.o .text 0x00000000 0x0 build/main.o .data 0x00000000 0x0 build/main.o .bss 0x00000000 0x0 build/main.o @@ -86,7 +88,7 @@ LOAD build/startup.o 0x08000000 interrupt_vector_table 0x08000198 . = ALIGN (0x4) -.text 0x08000198 0x1a8 +.text 0x08000198 0x2f4 0x08000198 . = ALIGN (0x4) *(.text) *(.text.*) @@ -96,108 +98,112 @@ LOAD build/startup.o .text.gpio_write 0x080001fa 0x4c build/gpio.o 0x080001fa gpio_write - .text.spin 0x08000246 0x22 build/main.o - .text.main 0x08000268 0x5c build/main.o - 0x08000268 main + *fill* 0x08000246 0x2 + .text.system_clock_init + 0x08000248 0x144 build/main.o + .text.spin 0x0800038c 0x22 build/main.o + *fill* 0x080003ae 0x2 + .text.main 0x080003b0 0x60 build/main.o + 0x080003b0 main .text.init_memory - 0x080002c4 0x64 build/startup.o - 0x080002c4 init_memory - .text.reset 0x08000328 0x10 build/startup.o - 0x08000328 reset + 0x08000410 0x64 build/startup.o + 0x08000410 init_memory + .text.reset 0x08000474 0x10 build/startup.o + 0x08000474 reset .text.default_handler - 0x08000338 0x8 build/startup.o - 0x08000338 exti0 - 0x08000338 debug_monitor - 0x08000338 rcc - 0x08000338 x - 0x08000338 sdio - 0x08000338 usage_fault - 0x08000338 tim1_up_tim10 - 0x08000338 usart1 - 0x08000338 i2c3_er - 0x08000338 spi2 - 0x08000338 dma1_stream1 - 0x08000338 bus_fault - 0x08000338 spi5 - 0x08000338 exti3 - 0x08000338 dma2_stream5 - 0x08000338 tim2 - 0x08000338 dma1_stream6 - 0x08000338 default_handler - 0x08000338 i2c1_er - 0x08000338 hard_fault - 0x08000338 usart6 - 0x08000338 exti15_10 - 0x08000338 usart2 - 0x08000338 pend_sv - 0x08000338 i2c1_ev - 0x08000338 wwdg - 0x08000338 adc - 0x08000338 rtc_alarm - 0x08000338 spi3 - 0x08000338 exti1 - 0x08000338 mem_manage - 0x08000338 dma2_stream1 - 0x08000338 dma1_stream2 - 0x08000338 dma2_stream3 - 0x08000338 sv_call - 0x08000338 tim3 - 0x08000338 otg_fs - 0x08000338 dma1_stream5 - 0x08000338 dma2_stream6 - 0x08000338 flash - 0x08000338 tamp_stamp - 0x08000338 i2c3_ev - 0x08000338 rtc_wkup - 0x08000338 dma2_stream0 - 0x08000338 pvd - 0x08000338 fpu - 0x08000338 exti4 - 0x08000338 exti2 - 0x08000338 spi1 - 0x08000338 dma1_stream0 - 0x08000338 tim1_brk_tim9 - 0x08000338 i2c2_ev - 0x08000338 otg_fs_wkup - 0x08000338 spi4 - 0x08000338 dma2_stream2 - 0x08000338 tim1_cc - 0x08000338 tim1_trg_com_tim11 - 0x08000338 exti9_5 - 0x08000338 dma1_stream3 - 0x08000338 dma2_stream4 - 0x08000338 i2c2_er - 0x08000338 dma2_stream7 - 0x08000338 dma1_stream7 - 0x08000338 nmi - 0x08000338 systick - 0x08000338 tim4 - 0x08000338 tim5 - 0x08000338 dma1_stream4 + 0x08000484 0x8 build/startup.o + 0x08000484 exti0 + 0x08000484 debug_monitor + 0x08000484 rcc + 0x08000484 x + 0x08000484 sdio + 0x08000484 usage_fault + 0x08000484 tim1_up_tim10 + 0x08000484 usart1 + 0x08000484 i2c3_er + 0x08000484 spi2 + 0x08000484 dma1_stream1 + 0x08000484 bus_fault + 0x08000484 spi5 + 0x08000484 exti3 + 0x08000484 dma2_stream5 + 0x08000484 tim2 + 0x08000484 dma1_stream6 + 0x08000484 default_handler + 0x08000484 i2c1_er + 0x08000484 hard_fault + 0x08000484 usart6 + 0x08000484 exti15_10 + 0x08000484 usart2 + 0x08000484 pend_sv + 0x08000484 i2c1_ev + 0x08000484 wwdg + 0x08000484 adc + 0x08000484 rtc_alarm + 0x08000484 spi3 + 0x08000484 exti1 + 0x08000484 mem_manage + 0x08000484 dma2_stream1 + 0x08000484 dma1_stream2 + 0x08000484 dma2_stream3 + 0x08000484 sv_call + 0x08000484 tim3 + 0x08000484 otg_fs + 0x08000484 dma1_stream5 + 0x08000484 dma2_stream6 + 0x08000484 flash + 0x08000484 tamp_stamp + 0x08000484 i2c3_ev + 0x08000484 rtc_wkup + 0x08000484 dma2_stream0 + 0x08000484 pvd + 0x08000484 fpu + 0x08000484 exti4 + 0x08000484 exti2 + 0x08000484 spi1 + 0x08000484 dma1_stream0 + 0x08000484 tim1_brk_tim9 + 0x08000484 i2c2_ev + 0x08000484 otg_fs_wkup + 0x08000484 spi4 + 0x08000484 dma2_stream2 + 0x08000484 tim1_cc + 0x08000484 tim1_trg_com_tim11 + 0x08000484 exti9_5 + 0x08000484 dma1_stream3 + 0x08000484 dma2_stream4 + 0x08000484 i2c2_er + 0x08000484 dma2_stream7 + 0x08000484 dma1_stream7 + 0x08000484 nmi + 0x08000484 systick + 0x08000484 tim4 + 0x08000484 tim5 + 0x08000484 dma1_stream4 *(.rodata) *(.rodata.*) - 0x08000340 . = ALIGN (0x4) - 0x08000340 _data_addr = LOADADDR (.data) + 0x0800048c . = ALIGN (0x4) + 0x0800048c _data_addr = LOADADDR (.data) -.glue_7 0x08000340 0x0 - .glue_7 0x08000340 0x0 linker stubs +.glue_7 0x0800048c 0x0 + .glue_7 0x0800048c 0x0 linker stubs -.glue_7t 0x08000340 0x0 - .glue_7t 0x08000340 0x0 linker stubs +.glue_7t 0x0800048c 0x0 + .glue_7t 0x0800048c 0x0 linker stubs -.vfp11_veneer 0x08000340 0x0 - .vfp11_veneer 0x08000340 0x0 linker stubs +.vfp11_veneer 0x0800048c 0x0 + .vfp11_veneer 0x0800048c 0x0 linker stubs -.v4_bx 0x08000340 0x0 - .v4_bx 0x08000340 0x0 linker stubs +.v4_bx 0x0800048c 0x0 + .v4_bx 0x0800048c 0x0 linker stubs -.iplt 0x08000340 0x0 - .iplt 0x08000340 0x0 build/main.o +.iplt 0x0800048c 0x0 + .iplt 0x0800048c 0x0 build/main.o -.rel.dyn 0x08000340 0x0 - .rel.iplt 0x08000340 0x0 build/main.o +.rel.dyn 0x0800048c 0x0 + .rel.iplt 0x0800048c 0x0 build/main.o -.data 0x20000000 0x0 load address 0x08000340 +.data 0x20000000 0x0 load address 0x0800048c 0x20000000 . = ALIGN (0x4) 0x20000000 _data_start = . *(.data) @@ -205,10 +211,10 @@ LOAD build/startup.o 0x20000000 . = ALIGN (0x4) 0x20000000 _data_end = . -.igot.plt 0x20000000 0x0 load address 0x08000340 +.igot.plt 0x20000000 0x0 load address 0x0800048c .igot.plt 0x20000000 0x0 build/main.o -.bss 0x20000000 0x0 load address 0x08000340 +.bss 0x20000000 0x0 load address 0x0800048c 0x20000000 . = ALIGN (0x4) 0x20000000 _bss_start = . *(.bss) @@ -218,34 +224,34 @@ LOAD build/startup.o OUTPUT(build/final.elf elf32-littlearm) LOAD linker stubs -.debug_info 0x00000000 0x64e +.debug_info 0x00000000 0x6f5 .debug_info 0x00000000 0x21a build/gpio.o - .debug_info 0x0000021a 0x2ac build/main.o - .debug_info 0x000004c6 0x188 build/startup.o + .debug_info 0x0000021a 0x353 build/main.o + .debug_info 0x0000056d 0x188 build/startup.o -.debug_abbrev 0x00000000 0x36d +.debug_abbrev 0x00000000 0x397 .debug_abbrev 0x00000000 0x12b build/gpio.o - .debug_abbrev 0x0000012b 0x11b build/main.o - .debug_abbrev 0x00000246 0x127 build/startup.o + .debug_abbrev 0x0000012b 0x145 build/main.o + .debug_abbrev 0x00000270 0x127 build/startup.o -.debug_aranges 0x00000000 0x80 +.debug_aranges 0x00000000 0x88 .debug_aranges 0x00000000 0x28 build/gpio.o .debug_aranges - 0x00000028 0x28 build/main.o + 0x00000028 0x30 build/main.o .debug_aranges - 0x00000050 0x30 build/startup.o + 0x00000058 0x30 build/startup.o .debug_rnglists - 0x00000000 0x51 + 0x00000000 0x58 .debug_rnglists 0x00000000 0x19 build/gpio.o .debug_rnglists - 0x00000019 0x19 build/main.o + 0x00000019 0x20 build/main.o .debug_rnglists - 0x00000032 0x1f build/startup.o + 0x00000039 0x1f build/startup.o -.debug_macro 0x00000000 0x2e91 +.debug_macro 0x00000000 0x2f1d .debug_macro 0x00000000 0xb56 build/gpio.o .debug_macro 0x00000b56 0x22 build/gpio.o .debug_macro 0x00000b78 0x75 build/gpio.o @@ -261,24 +267,26 @@ LOAD linker stubs .debug_macro 0x00001115 0x4cc build/gpio.o .debug_macro 0x000015e1 0x22 build/gpio.o .debug_macro 0x00001603 0x34 build/gpio.o - .debug_macro 0x00001637 0xb6b build/main.o - .debug_macro 0x000021a2 0x118 build/main.o - .debug_macro 0x000022ba 0x2e build/main.o - .debug_macro 0x000022e8 0xb02 build/startup.o - .debug_macro 0x00002dea 0x56 build/startup.o - .debug_macro 0x00002e40 0x51 build/startup.o + .debug_macro 0x00001637 0xb7d build/main.o + .debug_macro 0x000021b4 0x11e build/main.o + .debug_macro 0x000022d2 0x2e build/main.o + .debug_macro 0x00002300 0x46 build/main.o + .debug_macro 0x00002346 0x2e build/main.o + .debug_macro 0x00002374 0xb02 build/startup.o + .debug_macro 0x00002e76 0x56 build/startup.o + .debug_macro 0x00002ecc 0x51 build/startup.o -.debug_line 0x00000000 0x2fe +.debug_line 0x00000000 0x3ee .debug_line 0x00000000 0x116 build/gpio.o - .debug_line 0x00000116 0xfe build/main.o - .debug_line 0x00000214 0xea build/startup.o + .debug_line 0x00000116 0x1ee build/main.o + .debug_line 0x00000304 0xea build/startup.o -.debug_str 0x00000000 0x5ada +.debug_str 0x00000000 0x5d86 .debug_str 0x00000000 0x5372 build/gpio.o 0x551a (size before relaxing) - .debug_str 0x00005372 0x6e0 build/main.o - 0x5ba5 (size before relaxing) - .debug_str 0x00005a52 0x88 build/startup.o + .debug_str 0x00005372 0x98c build/main.o + 0x5e56 (size before relaxing) + .debug_str 0x00005cfe 0x88 build/startup.o 0x3cdf (size before relaxing) .comment 0x00000000 0x45 @@ -297,18 +305,18 @@ LOAD linker stubs 0x00000068 0x34 build/startup.o .debug_line_str - 0x00000000 0x265 + 0x00000000 0x273 .debug_line_str 0x00000000 0x24e build/gpio.o 0x260 (size before relaxing) .debug_line_str - 0x0000024e 0xd build/main.o - 0x266 (size before relaxing) + 0x0000024e 0x1b build/main.o + 0x274 (size before relaxing) .debug_line_str - 0x0000025b 0xa build/startup.o + 0x00000269 0xa build/startup.o 0x21b (size before relaxing) -.debug_frame 0x00000000 0x124 +.debug_frame 0x00000000 0x144 .debug_frame 0x00000000 0x60 build/gpio.o - .debug_frame 0x00000060 0x58 build/main.o - .debug_frame 0x000000b8 0x6c build/startup.o + .debug_frame 0x00000060 0x78 build/main.o + .debug_frame 0x000000d8 0x6c build/startup.o diff --git a/build/main.S b/build/main.S index 4a25ba7..6c86b0f 100644 --- a/build/main.S +++ b/build/main.S @@ -17,6 +17,225 @@ .Ltext0: .cfi_sections .debug_frame .file 1 "src/main.c" + .section .text.system_clock_init,"ax",%progbits + .align 1 + .syntax unified + .thumb + .thumb_func + .type system_clock_init, %function +system_clock_init: +.LFB0: + .loc 1 9 37 + .cfi_startproc + @ args = 0, pretend = 0, frame = 0 + @ frame_needed = 1, uses_anonymous_args = 0 + @ link register save eliminated. + push {r7} + .cfi_def_cfa_offset 4 + .cfi_offset 7, -4 + add r7, sp, #0 + .cfi_def_cfa_register 7 + .loc 1 11 33 + ldr r3, .L5 + ldr r3, [r3, #64] + ldr r2, .L5 + .loc 1 11 43 + orr r3, r3, #268435456 + str r3, [r2, #64] + .loc 1 14 33 + ldr r3, .L5+4 + ldr r3, [r3] + ldr r2, .L5+4 + .loc 1 14 38 + bic r3, r3, #49152 + str r3, [r2] + .loc 1 15 33 + ldr r3, .L5+4 + ldr r3, [r3] + ldr r2, .L5+4 + .loc 1 15 38 + orr r3, r3, #49152 + str r3, [r2] + .loc 1 18 33 + ldr r3, .L5 + ldr r3, [r3] + ldr r2, .L5 + .loc 1 18 38 + orr r3, r3, #65536 + str r3, [r2] + .loc 1 22 9 + nop +.L2: + .loc 1 22 42 discriminator 1 + ldr r3, .L5 + ldr r3, [r3] + .loc 1 22 47 discriminator 1 + and r3, r3, #131072 + .loc 1 22 10 discriminator 1 + cmp r3, #0 + beq .L2 + .loc 1 26 33 + ldr r3, .L5 + ldr r3, [r3] + ldr r2, .L5 + .loc 1 26 38 + bic r3, r3, #16777216 + str r3, [r2] + .loc 1 29 33 + ldr r3, .L5 + ldr r3, [r3, #4] + ldr r2, .L5 + .loc 1 29 43 + orr r3, r3, #4194304 + str r3, [r2, #4] + .loc 1 32 33 + ldr r3, .L5 + ldr r2, [r3, #4] + ldr r1, .L5 + .loc 1 32 43 + ldr r3, .L5+8 + orrs r3, r3, r2 + str r3, [r1, #4] + .loc 1 35 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 35 40 + bic r3, r3, #240 + str r3, [r2, #8] + .loc 1 36 33 + ldr r3, .L5 + ldr r2, .L5 + ldr r3, [r3, #8] + .loc 1 36 40 + str r3, [r2, #8] + .loc 1 39 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 39 40 + bic r3, r3, #7168 + str r3, [r2, #8] + .loc 1 40 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 40 40 + orr r3, r3, #4096 + str r3, [r2, #8] + .loc 1 43 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 43 40 + bic r3, r3, #57344 + str r3, [r2, #8] + .loc 1 44 33 + ldr r3, .L5 + ldr r2, .L5 + ldr r3, [r3, #8] + .loc 1 44 40 + str r3, [r2, #8] + .loc 1 47 33 + ldr r3, .L5 + ldr r3, [r3] + ldr r2, .L5 + .loc 1 47 38 + orr r3, r3, #16777216 + str r3, [r2] + .loc 1 51 9 + nop +.L3: + .loc 1 51 42 discriminator 1 + ldr r3, .L5 + ldr r3, [r3] + .loc 1 51 47 discriminator 1 + and r3, r3, #131072 + .loc 1 51 10 discriminator 1 + cmp r3, #0 + beq .L3 + .loc 1 54 35 + ldr r3, .L5+12 + ldr r3, [r3] + ldr r2, .L5+12 + .loc 1 54 41 + orr r3, r3, #1024 + str r3, [r2] + .loc 1 55 35 + ldr r3, .L5+12 + ldr r3, [r3] + ldr r2, .L5+12 + .loc 1 55 41 + orr r3, r3, #512 + str r3, [r2] + .loc 1 58 35 + ldr r3, .L5+12 + ldr r3, [r3] + ldr r2, .L5+12 + .loc 1 58 41 + bic r3, r3, #15 + str r3, [r2] + .loc 1 59 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 59 40 + orr r3, r3, #272 + orr r3, r3, #1 + str r3, [r2, #8] + .loc 1 62 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 62 40 + bic r3, r3, #3 + str r3, [r2, #8] + .loc 1 63 33 + ldr r3, .L5 + ldr r3, [r3, #8] + ldr r2, .L5 + .loc 1 63 40 + orr r3, r3, #2 + str r3, [r2, #8] + .loc 1 67 9 + nop +.L4: + .loc 1 67 42 discriminator 1 + ldr r3, .L5 + ldr r3, [r3, #8] + .loc 1 67 49 discriminator 1 + lsrs r3, r3, #2 + .loc 1 67 55 discriminator 1 + and r3, r3, #3 + .loc 1 67 65 discriminator 1 + cmp r3, #2 + bne .L4 + .loc 1 70 33 + ldr r3, .L5 + ldr r3, [r3] + ldr r2, .L5 + .loc 1 70 38 + bic r3, r3, #1 + str r3, [r2] + .loc 1 71 1 + nop + mov sp, r7 + .cfi_def_cfa_register 13 + @ sp needed + ldr r7, [sp], #4 + .cfi_restore 7 + .cfi_def_cfa_offset 0 + bx lr +.L6: + .align 2 +.L5: + .word 1073887232 + .word 1073770496 + .word 67252505 + .word 1073888256 + .cfi_endproc +.LFE0: + .size system_clock_init, .-system_clock_init .section .text.spin,"ax",%progbits .align 1 .syntax unified @@ -24,8 +243,8 @@ .thumb_func .type spin, %function spin: -.LFB0: - .loc 1 7 50 +.LFB1: + .loc 1 73 50 .cfi_startproc @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 @@ -38,17 +257,17 @@ spin: add r7, sp, #0 .cfi_def_cfa_register 7 str r0, [r7, #4] - .loc 1 8 9 + .loc 1 74 9 nop -.L2: - .loc 1 8 15 discriminator 1 +.L8: + .loc 1 74 15 discriminator 1 ldr r3, [r7, #4] subs r2, r3, #1 str r2, [r7, #4] - .loc 1 8 10 discriminator 1 + .loc 1 74 10 discriminator 1 cmp r3, #0 - bne .L2 - .loc 1 9 1 + bne .L8 + .loc 1 75 1 nop nop adds r7, r7, #12 @@ -61,7 +280,7 @@ spin: .cfi_def_cfa_offset 0 bx lr .cfi_endproc -.LFE0: +.LFE1: .size spin, .-spin .section .text.main,"ax",%progbits .align 1 @@ -71,8 +290,8 @@ spin: .thumb_func .type main, %function main: -.LFB1: - .loc 1 11 16 +.LFB2: + .loc 1 77 16 .cfi_startproc @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 @@ -84,58 +303,60 @@ main: .cfi_def_cfa_offset 16 add r7, sp, #0 .cfi_def_cfa_register 7 - .loc 1 12 12 + .loc 1 78 3 + bl system_clock_init + .loc 1 80 12 movw r3, #525 strh r3, [r7, #6] @ movhi - .loc 1 13 33 - ldr r3, .L5 + .loc 1 81 33 + ldr r3, .L11 ldr r3, [r3, #48] - .loc 1 13 57 + .loc 1 81 57 ldrh r2, [r7, #6] lsrs r2, r2, #8 uxth r2, r2 mov r1, r2 - .loc 1 13 49 + .loc 1 81 49 movs r2, #1 lsls r2, r2, r1 mov r1, r2 - .loc 1 13 33 - ldr r2, .L5 - .loc 1 13 43 + .loc 1 81 33 + ldr r2, .L11 + .loc 1 81 43 orrs r3, r3, r1 str r3, [r2, #48] - .loc 1 14 3 + .loc 1 82 3 ldrh r3, [r7, #6] movs r1, #1 mov r0, r3 bl gpio_set_mode -.L4: - .loc 1 16 5 discriminator 1 +.L10: + .loc 1 84 5 discriminator 1 ldrh r3, [r7, #6] movs r1, #1 mov r0, r3 bl gpio_write - .loc 1 17 5 discriminator 1 - ldr r0, .L5+4 + .loc 1 85 5 discriminator 1 + ldr r0, .L11+4 bl spin - .loc 1 18 5 discriminator 1 + .loc 1 86 5 discriminator 1 ldrh r3, [r7, #6] movs r1, #0 mov r0, r3 bl gpio_write - .loc 1 19 5 discriminator 1 - ldr r0, .L5+4 + .loc 1 87 5 discriminator 1 + ldr r0, .L11+4 bl spin - .loc 1 16 5 discriminator 1 + .loc 1 84 5 discriminator 1 nop - b .L4 -.L6: + b .L10 +.L12: .align 2 -.L5: +.L11: .word 1073887232 .word 999999 .cfi_endproc -.LFE1: +.LFE2: .size main, .-main .text .Letext0: @@ -143,18 +364,20 @@ main: .file 3 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_stdint.h" .file 4 "src/rcc.h" .file 5 "src/gpio.h" + .file 6 "src/flash.h" + .file 7 "src/pwr.h" .section .debug_info,"",%progbits .Ldebug_info0: - .4byte 0x2a8 + .4byte 0x34f .2byte 0x5 .byte 0x1 .byte 0x4 .4byte .Ldebug_abbrev0 - .uleb128 0x9 - .4byte .LASF956 + .uleb128 0xa + .4byte .LASF979 .byte 0x1d - .4byte .LASF957 - .4byte .LASF958 + .4byte .LASF980 + .4byte .LASF981 .4byte .LLRL0 .4byte 0 .4byte .Ldebug_line0 @@ -162,17 +385,17 @@ main: .uleb128 0x2 .byte 0x1 .byte 0x6 - .4byte .LASF910 + .4byte .LASF929 .uleb128 0x2 .byte 0x1 .byte 0x8 - .4byte .LASF911 + .4byte .LASF930 .uleb128 0x2 .byte 0x2 .byte 0x5 - .4byte .LASF912 - .uleb128 0x3 - .4byte .LASF915 + .4byte .LASF931 + .uleb128 0x4 + .4byte .LASF934 .byte 0x2 .byte 0x39 .byte 0x1c @@ -180,13 +403,13 @@ main: .uleb128 0x2 .byte 0x2 .byte 0x7 - .4byte .LASF913 + .4byte .LASF932 .uleb128 0x2 .byte 0x4 .byte 0x5 - .4byte .LASF914 - .uleb128 0x3 - .4byte .LASF916 + .4byte .LASF933 + .uleb128 0x4 + .4byte .LASF935 .byte 0x2 .byte 0x4f .byte 0x1b @@ -194,194 +417,220 @@ main: .uleb128 0x2 .byte 0x4 .byte 0x7 - .4byte .LASF917 + .4byte .LASF936 .uleb128 0x2 .byte 0x8 .byte 0x5 - .4byte .LASF918 + .4byte .LASF937 .uleb128 0x2 .byte 0x8 .byte 0x7 - .4byte .LASF919 - .uleb128 0xa + .4byte .LASF938 + .uleb128 0xb .byte 0x4 .byte 0x5 .ascii "int\000" .uleb128 0x2 .byte 0x4 .byte 0x7 - .4byte .LASF920 - .uleb128 0x3 - .4byte .LASF921 + .4byte .LASF939 + .uleb128 0x4 + .4byte .LASF940 .byte 0x3 .byte 0x24 .byte 0x14 .4byte 0x3f - .uleb128 0x3 - .4byte .LASF922 + .uleb128 0x4 + .4byte .LASF941 .byte 0x3 .byte 0x30 .byte 0x14 .4byte 0x59 .uleb128 0x7 .4byte 0x94 - .uleb128 0xb + .uleb128 0x8 .ascii "rcc\000" .byte 0x8c .byte 0x4 - .byte 0x6 - .byte 0x8 - .4byte 0x1e6 - .uleb128 0x6 + .4byte 0x200 + .uleb128 0x3 .ascii "CR\000" + .byte 0x4 .byte 0x7 .4byte 0xa0 .byte 0 .uleb128 0x1 - .4byte .LASF923 + .4byte .LASF942 + .byte 0x4 .byte 0x8 .4byte 0xa0 .byte 0x4 .uleb128 0x1 - .4byte .LASF924 + .4byte .LASF943 + .byte 0x4 .byte 0x9 .4byte 0xa0 .byte 0x8 - .uleb128 0x6 + .uleb128 0x3 .ascii "CIR\000" + .byte 0x4 .byte 0xa .4byte 0xa0 .byte 0xc .uleb128 0x1 - .4byte .LASF925 + .4byte .LASF944 + .byte 0x4 .byte 0xb .4byte 0xa0 .byte 0x10 .uleb128 0x1 - .4byte .LASF926 + .4byte .LASF945 + .byte 0x4 .byte 0xc .4byte 0xa0 .byte 0x14 .uleb128 0x1 - .4byte .LASF927 + .4byte .LASF946 + .byte 0x4 .byte 0xd - .4byte 0x1f6 + .4byte 0x210 .byte 0x18 .uleb128 0x1 - .4byte .LASF928 + .4byte .LASF947 + .byte 0x4 .byte 0xe .4byte 0xa0 .byte 0x20 .uleb128 0x1 - .4byte .LASF929 + .4byte .LASF948 + .byte 0x4 .byte 0xf .4byte 0xa0 .byte 0x24 .uleb128 0x1 - .4byte .LASF930 + .4byte .LASF949 + .byte 0x4 .byte 0x10 - .4byte 0x1f6 + .4byte 0x210 .byte 0x28 .uleb128 0x1 - .4byte .LASF931 + .4byte .LASF950 + .byte 0x4 .byte 0x11 .4byte 0xa0 .byte 0x30 .uleb128 0x1 - .4byte .LASF932 + .4byte .LASF951 + .byte 0x4 .byte 0x12 .4byte 0xa0 .byte 0x34 .uleb128 0x1 - .4byte .LASF933 + .4byte .LASF952 + .byte 0x4 .byte 0x13 - .4byte 0x1f6 + .4byte 0x210 .byte 0x38 .uleb128 0x1 - .4byte .LASF934 + .4byte .LASF953 + .byte 0x4 .byte 0x14 .4byte 0xa0 .byte 0x40 .uleb128 0x1 - .4byte .LASF935 + .4byte .LASF954 + .byte 0x4 .byte 0x15 .4byte 0xa0 .byte 0x44 .uleb128 0x1 - .4byte .LASF936 + .4byte .LASF955 + .byte 0x4 .byte 0x16 - .4byte 0x1f6 + .4byte 0x210 .byte 0x48 .uleb128 0x1 - .4byte .LASF937 + .4byte .LASF956 + .byte 0x4 .byte 0x17 .4byte 0xa0 .byte 0x50 .uleb128 0x1 - .4byte .LASF938 + .4byte .LASF957 + .byte 0x4 .byte 0x18 .4byte 0xa0 .byte 0x54 .uleb128 0x1 - .4byte .LASF939 + .4byte .LASF958 + .byte 0x4 .byte 0x19 - .4byte 0x1f6 + .4byte 0x210 .byte 0x58 .uleb128 0x1 - .4byte .LASF940 + .4byte .LASF959 + .byte 0x4 .byte 0x1a .4byte 0xa0 .byte 0x60 .uleb128 0x1 - .4byte .LASF941 + .4byte .LASF960 + .byte 0x4 .byte 0x1b .4byte 0xa0 .byte 0x64 .uleb128 0x1 - .4byte .LASF942 + .4byte .LASF961 + .byte 0x4 .byte 0x1c - .4byte 0x1f6 + .4byte 0x210 .byte 0x68 .uleb128 0x1 - .4byte .LASF943 + .4byte .LASF962 + .byte 0x4 .byte 0x1d .4byte 0xa0 .byte 0x70 - .uleb128 0x6 + .uleb128 0x3 .ascii "CSR\000" + .byte 0x4 .byte 0x1e .4byte 0xa0 .byte 0x74 .uleb128 0x1 - .4byte .LASF944 + .4byte .LASF963 + .byte 0x4 .byte 0x1f - .4byte 0x1f6 + .4byte 0x210 .byte 0x78 .uleb128 0x1 - .4byte .LASF945 + .4byte .LASF964 + .byte 0x4 .byte 0x20 .4byte 0xa0 .byte 0x80 .uleb128 0x1 - .4byte .LASF946 + .4byte .LASF965 + .byte 0x4 .byte 0x21 .4byte 0xa0 .byte 0x84 .uleb128 0x1 - .4byte .LASF947 + .4byte .LASF966 + .byte 0x4 .byte 0x22 .4byte 0xa0 .byte 0x88 .byte 0 .uleb128 0xc .4byte 0xa0 - .4byte 0x1f6 + .4byte 0x210 .uleb128 0xd .4byte 0x81 .byte 0x1 .byte 0 .uleb128 0x7 - .4byte 0x1e6 + .4byte 0x200 .uleb128 0xe .byte 0x7 .byte 0x1 @@ -389,88 +638,160 @@ main: .byte 0x5 .byte 0x20 .byte 0xe - .4byte 0x222 - .uleb128 0x4 - .4byte .LASF948 + .4byte 0x23c + .uleb128 0x5 + .4byte .LASF967 .byte 0 - .uleb128 0x4 - .4byte .LASF949 + .uleb128 0x5 + .4byte .LASF968 .byte 0x1 - .uleb128 0x4 - .4byte .LASF950 + .uleb128 0x5 + .4byte .LASF969 .byte 0x2 - .uleb128 0x4 - .4byte .LASF951 + .uleb128 0x5 + .4byte .LASF970 .byte 0x3 .byte 0 - .uleb128 0x3 - .4byte .LASF952 + .uleb128 0x4 + .4byte .LASF971 .byte 0x5 .byte 0x25 .byte 0x3 - .4byte 0x1fb + .4byte 0x215 + .uleb128 0xf + .4byte .LASF972 + .byte 0x18 + .byte 0x6 + .byte 0x6 + .byte 0x8 + .4byte 0x29c + .uleb128 0x3 + .ascii "ACR\000" + .byte 0x6 + .byte 0x7 + .4byte 0xa0 + .byte 0 + .uleb128 0x1 + .4byte .LASF973 + .byte 0x6 + .byte 0x8 + .4byte 0xa0 + .byte 0x4 + .uleb128 0x1 + .4byte .LASF974 + .byte 0x6 + .byte 0x9 + .4byte 0xa0 + .byte 0x8 + .uleb128 0x3 + .ascii "SR\000" + .byte 0x6 + .byte 0xa + .4byte 0xa0 + .byte 0xc + .uleb128 0x3 + .ascii "CR\000" + .byte 0x6 + .byte 0xb + .4byte 0xa0 + .byte 0x10 + .uleb128 0x1 + .4byte .LASF975 + .byte 0x6 + .byte 0xc + .4byte 0xa0 + .byte 0x14 + .byte 0 .uleb128 0x8 - .4byte .LASF954 + .ascii "pwr\000" + .byte 0x8 + .byte 0x7 + .4byte 0x2bf + .uleb128 0x3 + .ascii "CR\000" + .byte 0x7 + .byte 0x7 + .4byte 0xa0 + .byte 0 + .uleb128 0x3 + .ascii "CSR\000" + .byte 0x7 + .byte 0x8 + .4byte 0xa0 + .byte 0x4 + .byte 0 + .uleb128 0x9 + .4byte .LASF977 .byte 0x28 - .4byte 0x243 - .uleb128 0x5 + .4byte 0x2d4 + .uleb128 0x6 .4byte 0x88 - .uleb128 0x5 - .4byte 0x243 + .uleb128 0x6 + .4byte 0x2d4 .byte 0 .uleb128 0x2 .byte 0x1 .byte 0x2 - .4byte .LASF953 - .uleb128 0x8 - .4byte .LASF955 + .4byte .LASF976 + .uleb128 0x9 + .4byte .LASF978 .byte 0x27 - .4byte 0x25f - .uleb128 0x5 + .4byte 0x2f0 + .uleb128 0x6 .4byte 0x88 - .uleb128 0x5 - .4byte 0x222 + .uleb128 0x6 + .4byte 0x23c .byte 0 - .uleb128 0xf - .4byte .LASF959 + .uleb128 0x10 + .4byte .LASF982 .byte 0x1 - .byte 0xb + .byte 0x4d .byte 0x5 .4byte 0x7a - .4byte .LFB1 - .4byte .LFE1-.LFB1 + .4byte .LFB2 + .4byte .LFE2-.LFB2 .uleb128 0x1 .byte 0x9c - .4byte 0x289 - .uleb128 0x10 + .4byte 0x31a + .uleb128 0x11 .ascii "led\000" .byte 0x1 - .byte 0xc + .byte 0x50 .byte 0xc .4byte 0x88 .uleb128 0x2 .byte 0x91 .sleb128 -10 .byte 0 - .uleb128 0x11 - .4byte .LASF960 + .uleb128 0x12 + .4byte .LASF983 .byte 0x1 - .byte 0x7 + .byte 0x49 .byte 0x14 - .4byte .LFB0 - .4byte .LFE0-.LFB0 + .4byte .LFB1 + .4byte .LFE1-.LFB1 .uleb128 0x1 .byte 0x9c - .uleb128 0x12 - .4byte .LASF961 + .4byte 0x340 + .uleb128 0x13 + .4byte .LASF984 .byte 0x1 - .byte 0x7 + .byte 0x49 .byte 0x2b .4byte 0xa0 .uleb128 0x2 .byte 0x91 .sleb128 -12 .byte 0 + .uleb128 0x14 + .4byte .LASF985 + .byte 0x1 + .byte 0x9 + .byte 0xd + .4byte .LFB0 + .4byte .LFE0-.LFB0 + .uleb128 0x1 + .byte 0x9c .byte 0 .section .debug_abbrev,"",%progbits .Ldebug_abbrev0: @@ -480,8 +801,7 @@ main: .uleb128 0x3 .uleb128 0xe .uleb128 0x3a - .uleb128 0x21 - .sleb128 4 + .uleb128 0xb .uleb128 0x3b .uleb128 0xb .uleb128 0x39 @@ -505,6 +825,24 @@ main: .byte 0 .byte 0 .uleb128 0x3 + .uleb128 0xd + .byte 0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x39 + .uleb128 0x21 + .sleb128 21 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xb + .byte 0 + .byte 0 + .uleb128 0x4 .uleb128 0x16 .byte 0 .uleb128 0x3 @@ -519,7 +857,7 @@ main: .uleb128 0x13 .byte 0 .byte 0 - .uleb128 0x4 + .uleb128 0x5 .uleb128 0x28 .byte 0 .uleb128 0x3 @@ -528,30 +866,11 @@ main: .uleb128 0xb .byte 0 .byte 0 - .uleb128 0x5 - .uleb128 0x5 - .byte 0 - .uleb128 0x49 - .uleb128 0x13 - .byte 0 - .byte 0 .uleb128 0x6 - .uleb128 0xd + .uleb128 0x5 .byte 0 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0x3a - .uleb128 0x21 - .sleb128 4 - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x39 - .uleb128 0x21 - .sleb128 21 .uleb128 0x49 .uleb128 0x13 - .uleb128 0x38 - .uleb128 0xb .byte 0 .byte 0 .uleb128 0x7 @@ -562,6 +881,25 @@ main: .byte 0 .byte 0 .uleb128 0x8 + .uleb128 0x13 + .byte 0x1 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x21 + .sleb128 6 + .uleb128 0x39 + .uleb128 0x21 + .sleb128 8 + .uleb128 0x1 + .uleb128 0x13 + .byte 0 + .byte 0 + .uleb128 0x9 .uleb128 0x2e .byte 0x1 .uleb128 0x3f @@ -584,7 +922,7 @@ main: .uleb128 0x13 .byte 0 .byte 0 - .uleb128 0x9 + .uleb128 0xa .uleb128 0x11 .byte 0x1 .uleb128 0x25 @@ -605,7 +943,7 @@ main: .uleb128 0x17 .byte 0 .byte 0 - .uleb128 0xa + .uleb128 0xb .uleb128 0x24 .byte 0 .uleb128 0xb @@ -616,23 +954,6 @@ main: .uleb128 0x8 .byte 0 .byte 0 - .uleb128 0xb - .uleb128 0x13 - .byte 0x1 - .uleb128 0x3 - .uleb128 0x8 - .uleb128 0xb - .uleb128 0xb - .uleb128 0x3a - .uleb128 0xb - .uleb128 0x3b - .uleb128 0xb - .uleb128 0x39 - .uleb128 0xb - .uleb128 0x1 - .uleb128 0x13 - .byte 0 - .byte 0 .uleb128 0xc .uleb128 0x1 .byte 0x1 @@ -671,6 +992,23 @@ main: .byte 0 .byte 0 .uleb128 0xf + .uleb128 0x13 + .byte 0x1 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x39 + .uleb128 0xb + .uleb128 0x1 + .uleb128 0x13 + .byte 0 + .byte 0 + .uleb128 0x10 .uleb128 0x2e .byte 0x1 .uleb128 0x3f @@ -699,7 +1037,7 @@ main: .uleb128 0x13 .byte 0 .byte 0 - .uleb128 0x10 + .uleb128 0x11 .uleb128 0x34 .byte 0 .uleb128 0x3 @@ -716,7 +1054,7 @@ main: .uleb128 0x18 .byte 0 .byte 0 - .uleb128 0x11 + .uleb128 0x12 .uleb128 0x2e .byte 0x1 .uleb128 0x3 @@ -737,9 +1075,11 @@ main: .uleb128 0x18 .uleb128 0x7a .uleb128 0x19 + .uleb128 0x1 + .uleb128 0x13 .byte 0 .byte 0 - .uleb128 0x12 + .uleb128 0x13 .uleb128 0x5 .byte 0 .uleb128 0x3 @@ -756,9 +1096,32 @@ main: .uleb128 0x18 .byte 0 .byte 0 + .uleb128 0x14 + .uleb128 0x2e + .byte 0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x39 + .uleb128 0xb + .uleb128 0x27 + .uleb128 0x19 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x6 + .uleb128 0x40 + .uleb128 0x18 + .uleb128 0x7a + .uleb128 0x19 + .byte 0 + .byte 0 .byte 0 .section .debug_aranges,"",%progbits - .4byte 0x24 + .4byte 0x2c .2byte 0x2 .4byte .Ldebug_info0 .byte 0x4 @@ -769,6 +1132,8 @@ main: .4byte .LFE0-.LFB0 .4byte .LFB1 .4byte .LFE1-.LFB1 + .4byte .LFB2 + .4byte .LFE2-.LFB2 .4byte 0 .4byte 0 .section .debug_rnglists,"",%progbits @@ -786,6 +1151,9 @@ main: .byte 0x7 .4byte .LFB1 .uleb128 .LFE1-.LFB1 + .byte 0x7 + .4byte .LFB2 + .uleb128 .LFE2-.LFB2 .byte 0 .Ldebug_ranges3: .section .debug_macro,"",%progbits @@ -2158,76 +2526,76 @@ main: .byte 0x5 .uleb128 0 .4byte .LASF453 - .file 6 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" + .file 8 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" .byte 0x3 .uleb128 0x1 - .uleb128 0x6 + .uleb128 0x8 .byte 0x5 .uleb128 0xe .4byte .LASF454 - .file 7 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" + .file 9 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" .byte 0x3 .uleb128 0x10 - .uleb128 0x7 + .uleb128 0x9 .byte 0x5 .uleb128 0x7 .4byte .LASF455 - .file 8 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_newlib_version.h" + .file 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_newlib_version.h" .byte 0x3 .uleb128 0xa - .uleb128 0x8 + .uleb128 0xa .byte 0x7 .4byte .Ldebug_macro2 .byte 0x4 .byte 0x7 .4byte .Ldebug_macro3 .byte 0x4 - .file 9 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" + .file 11 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" .byte 0x3 .uleb128 0x11 - .uleb128 0x9 + .uleb128 0xb .byte 0x5 .uleb128 0x2 .4byte .LASF478 - .file 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" + .file 12 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" .byte 0x3 .uleb128 0x4 - .uleb128 0xa + .uleb128 0xc .byte 0x7 .4byte .Ldebug_macro4 .byte 0x4 - .file 11 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" + .file 13 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" .byte 0x3 .uleb128 0x5 - .uleb128 0xb + .uleb128 0xd .byte 0x7 .4byte .Ldebug_macro5 .byte 0x4 .byte 0x7 .4byte .Ldebug_macro6 .byte 0x4 - .file 12 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" + .file 14 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" .byte 0x3 .uleb128 0x12 - .uleb128 0xc + .uleb128 0xe .byte 0x7 .4byte .Ldebug_macro7 .byte 0x4 - .file 13 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_ansi.h" + .file 15 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_ansi.h" .byte 0x3 .uleb128 0x13 - .uleb128 0xd + .uleb128 0xf .byte 0x7 .4byte .Ldebug_macro8 .byte 0x4 - .file 14 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdint.h" + .file 16 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdint.h" .byte 0x3 .uleb128 0x14 - .uleb128 0xe - .file 15 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" + .uleb128 0x10 + .file 17 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" .byte 0x3 .uleb128 0x9 - .uleb128 0xf + .uleb128 0x11 .byte 0x5 .uleb128 0xa .4byte .LASF546 @@ -2253,10 +2621,10 @@ main: .byte 0x5 .uleb128 0x15 .4byte .LASF647 - .file 16 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" + .file 18 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" .byte 0x3 .uleb128 0x16 - .uleb128 0x10 + .uleb128 0x12 .byte 0x7 .4byte .Ldebug_macro12 .byte 0x4 @@ -2274,20 +2642,32 @@ main: .uleb128 0x5 .byte 0x5 .uleb128 0x2 - .4byte .LASF896 - .file 17 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdbool.h" + .4byte .LASF897 + .file 19 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdbool.h" .byte 0x3 .uleb128 0x4 - .uleb128 0x11 + .uleb128 0x13 .byte 0x7 .4byte .Ldebug_macro15 .byte 0x4 .byte 0x7 .4byte .Ldebug_macro16 .byte 0x4 - .byte 0x5 + .byte 0x3 + .uleb128 0x4 + .uleb128 0x6 + .byte 0x7 + .4byte .Ldebug_macro17 + .byte 0x4 + .byte 0x3 .uleb128 0x5 - .4byte .LASF909 + .uleb128 0x7 + .byte 0x7 + .4byte .Ldebug_macro18 + .byte 0x4 + .byte 0x5 + .uleb128 0x7 + .4byte .LASF928 .byte 0x4 .byte 0 .section .debug_macro,"G",%progbits,wm4._newlib_version.h.4.6d111ab2e95434b664b53815e5c8ccba,comdat @@ -3547,7 +3927,7 @@ main: .uleb128 0x135 .4byte .LASF849 .byte 0 - .section .debug_macro,"G",%progbits,wm4.rcc.h.2.a0fe590d50a4a87e3e0cde8c35fecccb,comdat + .section .debug_macro,"G",%progbits,wm4.rcc.h.2.f63dea3638ca6807414aa0ffe92775a0,comdat .Ldebug_macro14: .2byte 0x5 .byte 0 @@ -3573,122 +3953,125 @@ main: .uleb128 0x2f .4byte .LASF856 .byte 0x5 - .uleb128 0x30 + .uleb128 0x32 .4byte .LASF857 .byte 0x5 .uleb128 0x33 .4byte .LASF858 .byte 0x5 - .uleb128 0x34 + .uleb128 0x36 .4byte .LASF859 .byte 0x5 .uleb128 0x37 .4byte .LASF860 .byte 0x5 - .uleb128 0x38 + .uleb128 0x3a .4byte .LASF861 .byte 0x5 .uleb128 0x3b .4byte .LASF862 .byte 0x5 - .uleb128 0x3c + .uleb128 0x3e .4byte .LASF863 .byte 0x5 - .uleb128 0x3e + .uleb128 0x3f .4byte .LASF864 .byte 0x5 - .uleb128 0x3f + .uleb128 0x42 .4byte .LASF865 .byte 0x5 - .uleb128 0x42 + .uleb128 0x43 .4byte .LASF866 .byte 0x5 - .uleb128 0x43 + .uleb128 0x44 .4byte .LASF867 .byte 0x5 - .uleb128 0x44 + .uleb128 0x46 .4byte .LASF868 .byte 0x5 - .uleb128 0x46 + .uleb128 0x47 .4byte .LASF869 .byte 0x5 - .uleb128 0x47 + .uleb128 0x49 .4byte .LASF870 .byte 0x5 - .uleb128 0x49 + .uleb128 0x4a .4byte .LASF871 .byte 0x5 - .uleb128 0x4a + .uleb128 0x4b .4byte .LASF872 .byte 0x5 - .uleb128 0x4b + .uleb128 0x4d .4byte .LASF873 .byte 0x5 - .uleb128 0x4d + .uleb128 0x4e .4byte .LASF874 .byte 0x5 - .uleb128 0x4e + .uleb128 0x4f .4byte .LASF875 .byte 0x5 - .uleb128 0x4f + .uleb128 0x51 .4byte .LASF876 .byte 0x5 - .uleb128 0x51 + .uleb128 0x52 .4byte .LASF877 .byte 0x5 - .uleb128 0x52 + .uleb128 0x53 .4byte .LASF878 .byte 0x5 - .uleb128 0x53 + .uleb128 0x57 .4byte .LASF879 .byte 0x5 - .uleb128 0x57 + .uleb128 0x58 .4byte .LASF880 .byte 0x5 - .uleb128 0x58 + .uleb128 0x5b .4byte .LASF881 .byte 0x5 - .uleb128 0x5b + .uleb128 0x5c .4byte .LASF882 .byte 0x5 - .uleb128 0x5c + .uleb128 0x5f .4byte .LASF883 .byte 0x5 - .uleb128 0x5f + .uleb128 0x60 .4byte .LASF884 .byte 0x5 - .uleb128 0x60 + .uleb128 0x63 .4byte .LASF885 .byte 0x5 - .uleb128 0x63 + .uleb128 0x65 .4byte .LASF886 .byte 0x5 - .uleb128 0x65 + .uleb128 0x66 .4byte .LASF887 .byte 0x5 - .uleb128 0x66 + .uleb128 0x69 .4byte .LASF888 .byte 0x5 - .uleb128 0x69 + .uleb128 0x6b .4byte .LASF889 .byte 0x5 - .uleb128 0x6b + .uleb128 0x6c .4byte .LASF890 .byte 0x5 - .uleb128 0x6c + .uleb128 0x6f .4byte .LASF891 .byte 0x5 - .uleb128 0x6f + .uleb128 0x71 .4byte .LASF892 .byte 0x5 - .uleb128 0x71 + .uleb128 0x72 .4byte .LASF893 .byte 0x5 - .uleb128 0x72 + .uleb128 0x73 .4byte .LASF894 .byte 0x5 - .uleb128 0x73 + .uleb128 0x76 .4byte .LASF895 + .byte 0x5 + .uleb128 0x77 + .4byte .LASF896 .byte 0 .section .debug_macro,"G",%progbits,wm4.stdbool.h.29.eb124ecb79face0a1d832a352bec45e0,comdat .Ldebug_macro15: @@ -3696,19 +4079,19 @@ main: .byte 0 .byte 0x5 .uleb128 0x1d - .4byte .LASF897 - .byte 0x5 - .uleb128 0x21 .4byte .LASF898 .byte 0x5 - .uleb128 0x23 + .uleb128 0x21 .4byte .LASF899 .byte 0x5 - .uleb128 0x24 + .uleb128 0x23 .4byte .LASF900 .byte 0x5 - .uleb128 0x32 + .uleb128 0x24 .4byte .LASF901 + .byte 0x5 + .uleb128 0x32 + .4byte .LASF902 .byte 0 .section .debug_macro,"G",%progbits,wm4.gpio.h.20.f43cb24618dcbca74136a185a6bbf080,comdat .Ldebug_macro16: @@ -3716,25 +4099,89 @@ main: .byte 0 .byte 0x5 .uleb128 0x14 - .4byte .LASF902 - .byte 0x5 - .uleb128 0x15 .4byte .LASF903 .byte 0x5 - .uleb128 0x16 + .uleb128 0x15 .4byte .LASF904 .byte 0x5 - .uleb128 0x18 + .uleb128 0x16 .4byte .LASF905 .byte 0x5 - .uleb128 0x1a + .uleb128 0x18 .4byte .LASF906 .byte 0x5 - .uleb128 0x1c + .uleb128 0x1a .4byte .LASF907 .byte 0x5 - .uleb128 0x1e + .uleb128 0x1c .4byte .LASF908 + .byte 0x5 + .uleb128 0x1e + .4byte .LASF909 + .byte 0 + .section .debug_macro,"G",%progbits,wm4.flash.h.2.51d6f0499046dca8c8d7cee08875e55f,comdat +.Ldebug_macro17: + .2byte 0x5 + .byte 0 + .byte 0x5 + .uleb128 0x2 + .4byte .LASF910 + .byte 0x5 + .uleb128 0xf + .4byte .LASF911 + .byte 0x5 + .uleb128 0x10 + .4byte .LASF912 + .byte 0x5 + .uleb128 0x14 + .4byte .LASF913 + .byte 0x5 + .uleb128 0x15 + .4byte .LASF914 + .byte 0x5 + .uleb128 0x18 + .4byte .LASF915 + .byte 0x5 + .uleb128 0x19 + .4byte .LASF916 + .byte 0x5 + .uleb128 0x1c + .4byte .LASF917 + .byte 0x5 + .uleb128 0x1e + .4byte .LASF918 + .byte 0x5 + .uleb128 0x1f + .4byte .LASF919 + .byte 0x5 + .uleb128 0x20 + .4byte .LASF920 + .byte 0 + .section .debug_macro,"G",%progbits,wm4.pwr.h.2.b22d01f8fafa27268c4600cc8f787804,comdat +.Ldebug_macro18: + .2byte 0x5 + .byte 0 + .byte 0x5 + .uleb128 0x2 + .4byte .LASF921 + .byte 0x5 + .uleb128 0xb + .4byte .LASF922 + .byte 0x5 + .uleb128 0xc + .4byte .LASF923 + .byte 0x5 + .uleb128 0xf + .4byte .LASF924 + .byte 0x5 + .uleb128 0x12 + .4byte .LASF925 + .byte 0x5 + .uleb128 0x13 + .4byte .LASF926 + .byte 0x5 + .uleb128 0x14 + .4byte .LASF927 .byte 0 .section .debug_line,"",%progbits .Ldebug_line0: @@ -3751,7 +4198,7 @@ main: .ascii "__UHA_FBIT__ 8\000" .LASF814: .ascii "PRIiFAST64 __PRI64FAST(i)\000" -.LASF911: +.LASF930: .ascii "unsigned char\000" .LASF225: .ascii "__FLT64_DENORM_MIN__ 4.9406564584124654e-324F64\000" @@ -3785,7 +4232,7 @@ main: .ascii "__WINT_MIN__ 0U\000" .LASF90: .ascii "__INTMAX_MAX__ 0x7fffffffffffffffLL\000" -.LASF950: +.LASF969: .ascii "GPIO_MODE_AF\000" .LASF335: .ascii "__TQ_IBIT__ 0\000" @@ -3809,6 +4256,8 @@ main: .ascii "__FRACT_MIN__ (-0.5R-0.5R)\000" .LASF324: .ascii "__ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULLK\000" +.LASF972: + .ascii "flash\000" .LASF294: .ascii "__USACCUM_MAX__ 0XFFFFP-8UHK\000" .LASF246: @@ -3863,8 +4312,8 @@ main: .ascii "INT_LEAST16_MAX (__INT_LEAST16_MAX__)\000" .LASF703: .ascii "SCNiFAST8 __SCN8FAST(i)\000" -.LASF120: - .ascii "__UINT_LEAST16_MAX__ 0xffff\000" +.LASF790: + .ascii "__SCN64FAST(x) __FAST64 __STRINGIFY(x)\000" .LASF616: .ascii "INT_FAST16_MAX (__INT_FAST16_MAX__)\000" .LASF281: @@ -3875,6 +4324,10 @@ main: .ascii "_LDBL_EQ_DBL 1\000" .LASF675: .ascii "PRIi8 __PRI8(i)\000" +.LASF916: + .ascii "FLASH_ACR_ICEN_ENABLE (1 <= ((maj) << 16) + (min))\000" @@ -4022,7 +4478,7 @@ main: .ascii "INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)\000" .LASF672: .ascii "__SCN8LEAST(x) __LEAST8 __STRINGIFY(x)\000" -.LASF857: +.LASF856: .ascii "RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT)\000" .LASF55: .ascii "__UINT_LEAST8_TYPE__ unsigned char\000" @@ -4032,12 +4488,12 @@ main: .ascii "__ACCUM_FBIT__ 15\000" .LASF791: .ascii "PRId64 __PRI64(d)\000" -.LASF873: +.LASF872: .ascii "RCC_PLLCFGR_PLLP(p) ((p & RCC_PLLCFGR_PLLP_MASK) <<" .ascii " RCC_PLLCFGR_PLLP_BIT)\000" .LASF302: .ascii "__UACCUM_IBIT__ 16\000" -.LASF914: +.LASF933: .ascii "long int\000" .LASF719: .ascii "SCNd16 __SCN16(d)\000" @@ -4055,7 +4511,7 @@ main: .ascii "__FLT32X_EPSILON__ 2.2204460492503131e-16F32x\000" .LASF556: .ascii "___int_least16_t_defined 1\000" -.LASF879: +.LASF878: .ascii "RCC_PLLCFGR_PLLM(m) ((m & RCC_PLLCFGR_PLLM_MASK) <<" .ascii " RCC_PLLCFGR_PLLM_BIT)\000" .LASF59: @@ -4068,7 +4524,7 @@ main: .ascii "PRIdFAST32 __PRI32FAST(d)\000" .LASF93: .ascii "__UINTMAX_C(c) c ## ULL\000" -.LASF866: +.LASF865: .ascii "RCC_PLLCFGR_PLLQ_BIT 24\000" .LASF31: .ascii "__SIZEOF_POINTER__ 4\000" @@ -4076,7 +4532,7 @@ main: .ascii "INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)\000" .LASF371: .ascii "__GCC_ATOMIC_BOOL_LOCK_FREE 2\000" -.LASF894: +.LASF893: .ascii "RCC_CFGR_SW_MASK (0b11)\000" .LASF432: .ascii "__ARM_NEON__\000" @@ -4086,7 +4542,7 @@ main: .ascii "__FLT32_MAX_EXP__ 128\000" .LASF824: .ascii "__PRIMAX(x) __STRINGIFY(ll ##x)\000" -.LASF959: +.LASF982: .ascii "main\000" .LASF435: .ascii "__THUMB_INTERWORK__ 1\000" @@ -4104,7 +4560,7 @@ main: .ascii "__CHAR32_TYPE__ long unsigned int\000" .LASF429: .ascii "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC\000" -.LASF896: +.LASF897: .ascii "GPIO_H_ \000" .LASF179: .ascii "__DBL_IS_IEC_60559__ 2\000" @@ -4116,7 +4572,7 @@ main: .ascii "__SIZEOF_LONG__ 4\000" .LASF753: .ascii "PRIi32 __PRI32(i)\000" -.LASF935: +.LASF954: .ascii "APB2ENR\000" .LASF850: .ascii "RCC_H_ \000" @@ -4130,9 +4586,11 @@ main: .ascii "__INT_LEAST32_WIDTH__ 32\000" .LASF232: .ascii "__FLT32X_MIN_EXP__ (-1021)\000" +.LASF915: + .ascii "FLASH_ACR_ICEN_BIT 9\000" .LASF815: .ascii "PRIoFAST64 __PRI64FAST(o)\000" -.LASF937: +.LASF956: .ascii "AHB1LPENR\000" .LASF406: .ascii "__ARM_FEATURE_SIMD32 1\000" @@ -4144,7 +4602,7 @@ main: .ascii "PRIoLEAST16 __PRI16LEAST(o)\000" .LASF458: .ascii "__NEWLIB__ 4\000" -.LASF947: +.LASF966: .ascii "DCKCFGR\000" .LASF720: .ascii "SCNi16 __SCN16(i)\000" @@ -4154,7 +4612,7 @@ main: .ascii "__FLT_DECIMAL_DIG__ 9\000" .LASF562: .ascii "_UINT8_T_DECLARED \000" -.LASF910: +.LASF929: .ascii "signed char\000" .LASF805: .ascii "PRIuLEAST64 __PRI64LEAST(u)\000" @@ -4164,7 +4622,7 @@ main: .ascii "INTMAX_MIN (-INTMAX_MAX - 1)\000" .LASF364: .ascii "__GNUC_STDC_INLINE__ 1\000" -.LASF952: +.LASF971: .ascii "GPIO_MODE\000" .LASF256: .ascii "__FRACT_FBIT__ 15\000" @@ -4176,44 +4634,47 @@ main: .ascii "__GNUC_PATCHLEVEL__ 1\000" .LASF374: .ascii "__GCC_ATOMIC_CHAR32_T_LOCK_FREE 2\000" -.LASF867: +.LASF866: .ascii "RCC_PLLCFGR_PLLQ_MASK (0b1111)\000" -.LASF648: - .ascii "__wchar_t__ \000" +.LASF120: + .ascii "__UINT_LEAST16_MAX__ 0xffff\000" .LASF410: .ascii "__ARM_ARCH_PROFILE 77\000" .LASF546: .ascii "_STDINT_H \000" -.LASF897: +.LASF898: .ascii "_STDBOOL_H \000" .LASF219: .ascii "__FLT64_MAX_10_EXP__ 308\000" -.LASF875: +.LASF874: .ascii "RCC_PLLCFGR_PLLN_MASK (0b111111111)\000" -.LASF927: +.LASF946: .ascii "RESERVED0\000" -.LASF930: +.LASF949: .ascii "RESERVED1\000" -.LASF933: +.LASF952: .ascii "RESERVED2\000" .LASF3: .ascii "__STDC_UTF_32__ 1\000" -.LASF939: +.LASF958: .ascii "RESERVED4\000" .LASF241: .ascii "__FLT32X_DENORM_MIN__ 4.9406564584124654e-324F32x\000" -.LASF944: +.LASF963: .ascii "RESERVED6\000" .LASF152: .ascii "__FLT_MAX_10_EXP__ 38\000" .LASF42: .ascii "__SIG_ATOMIC_TYPE__ int\000" -.LASF884: +.LASF883: .ascii "RCC_CFGR_PPRE1_BIT 10\000" .LASF259: .ascii "__FRACT_MAX__ 0X7FFFP-15R\000" .LASF728: .ascii "PRIxLEAST16 __PRI16LEAST(x)\000" +.LASF927: + .ascii "PWR_CR_VOS(scale) ((scale & PWR_CR_VOS_MASK) << PWR" + .ascii "_CR_VOS_BIT)\000" .LASF130: .ascii "__INT_FAST32_MAX__ 0x7fffffff\000" .LASF10: @@ -4222,7 +4683,7 @@ main: .ascii "_READ_WRITE_RETURN_TYPE int\000" .LASF771: .ascii "SCNoLEAST32 __SCN32LEAST(o)\000" -.LASF892: +.LASF891: .ascii "RCC_CFGR_SW_PLL (0b10)\000" .LASF844: .ascii "PRIXPTR __PRIPTR(X)\000" @@ -4246,25 +4707,29 @@ main: .ascii "__int_fast64_t_defined 1\000" .LASF837: .ascii "__PRIPTR(x) __STRINGIFY(x)\000" -.LASF921: +.LASF940: .ascii "uint16_t\000" .LASF417: .ascii "__thumb2__ 1\000" .LASF321: .ascii "__ULLACCUM_FBIT__ 32\000" -.LASF953: +.LASF976: .ascii "_Bool\000" +.LASF895: + .ascii "RCC_APB1ENR_PWREN_BIT 28\000" .LASF366: .ascii "__STRICT_ANSI__ 1\000" .LASF485: .ascii "_SYS_FEATURES_H \000" .LASF812: .ascii "SCNxLEAST64 __SCN64LEAST(x)\000" -.LASF936: +.LASF769: + .ascii "SCNdLEAST32 __SCN32LEAST(d)\000" +.LASF955: .ascii "RESERVED3\000" .LASF22: .ascii "__SIZEOF_LONG_DOUBLE__ 8\000" -.LASF942: +.LASF961: .ascii "RESERVED5\000" .LASF386: .ascii "__PRAGMA_REDEFINE_EXTNAME 1\000" @@ -4272,7 +4737,7 @@ main: .ascii "__WCHAR_TYPE__ unsigned int\000" .LASF469: .ascii "_MB_LEN_MAX 8\000" -.LASF949: +.LASF968: .ascii "GPIO_MODE_OUTPUT\000" .LASF357: .ascii "__USA_IBIT__ 16\000" @@ -4286,7 +4751,7 @@ main: .ascii "__need_wchar_t \000" .LASF66: .ascii "__UINT_FAST64_TYPE__ long long unsigned int\000" -.LASF890: +.LASF889: .ascii "RCC_CFGR_SWS_BIT 2\000" .LASF156: .ascii "__FLT_MIN__ 1.1754943508222875e-38F\000" @@ -4312,9 +4777,9 @@ main: .ascii "__SCN64(x) __INT64 __STRINGIFY(x)\000" .LASF646: .ascii "_GCC_WRAP_STDINT_H \000" -.LASF915: +.LASF934: .ascii "__uint16_t\000" -.LASF932: +.LASF951: .ascii "AHB2ENR\000" .LASF804: .ascii "PRIoLEAST64 __PRI64LEAST(o)\000" @@ -4342,10 +4807,12 @@ main: .ascii "INTMAX_MAX (__INTMAX_MAX__)\000" .LASF601: .ascii "INT32_MAX (__INT32_MAX__)\000" -.LASF905: +.LASF906: .ascii "BIT(x) (1 << x)\000" -.LASF350: - .ascii "__DA_FBIT__ 31\000" +.LASF985: + .ascii "system_clock_init\000" +.LASF912: + .ascii "FLASH ((struct flash *) FLASH_BASE_ADDR)\000" .LASF69: .ascii "__GXX_ABI_VERSION 1017\000" .LASF109: @@ -4354,16 +4821,16 @@ main: .ascii "__FLT_DENORM_MIN__ 1.4012984643248171e-45F\000" .LASF533: .ascii "__LEAST8 \"hh\"\000" -.LASF886: +.LASF885: .ascii "RCC_CFGR_HPRE_DIV_NONE 0\000" -.LASF859: - .ascii "RCC_CR_HSEBYP (1 << RCC_CR_HSEBYP_BIT)\000" .LASF539: .ascii "_END_STD_C \000" -.LASF899: +.LASF900: .ascii "true ((_Bool)+1u)\000" .LASF766: .ascii "PRIuLEAST32 __PRI32LEAST(u)\000" +.LASF917: + .ascii "FLASH_ACR_LATENCY_3_WAIT_STATES (0x0111)\000" .LASF599: .ascii "UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)\000" .LASF123: @@ -4372,15 +4839,13 @@ main: .ascii "PRIiLEAST16 __PRI16LEAST(i)\000" .LASF303: .ascii "__UACCUM_MIN__ 0.0UK\000" -.LASF871: +.LASF870: .ascii "RCC_PLLCFGR_PLLP_BIT 16\000" .LASF157: .ascii "__FLT_EPSILON__ 1.1920928955078125e-7F\000" -.LASF856: - .ascii "RCC_CR_PLLON_OFF (0 << RCC_CR_PLLON_BIT)\000" -.LASF769: - .ascii "SCNdLEAST32 __SCN32LEAST(d)\000" -.LASF906: +.LASF297: + .ascii "__ACCUM_IBIT__ 16\000" +.LASF907: .ascii "PIN(port,num) ((((port) - 'A') << 8) | num)\000" .LASF806: .ascii "PRIxLEAST64 __PRI64LEAST(x)\000" @@ -4400,7 +4865,7 @@ main: .ascii "INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)\000" .LASF376: .ascii "__GCC_ATOMIC_SHORT_LOCK_FREE 2\000" -.LASF864: +.LASF863: .ascii "RCC_CR_HSION_BIT 0\000" .LASF778: .ascii "PRIxFAST32 __PRI32FAST(x)\000" @@ -4416,10 +4881,8 @@ main: .ascii "__MISC_VISIBLE 0\000" .LASF306: .ascii "__LACCUM_FBIT__ 31\000" -.LASF943: +.LASF962: .ascii "BDCR\000" -.LASF865: - .ascii "RCC_CR_HSION_OFF (0 << RCC_CR_HSION_BIT)\000" .LASF211: .ascii "__FLT32_HAS_QUIET_NAN__ 1\000" .LASF484: @@ -4452,7 +4915,7 @@ main: .ascii "__FP_FAST_FMAF 1\000" .LASF628: .ascii "SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)\000" -.LASF863: +.LASF860: .ascii "RCC_CR_HSEON_ON (1 << RCC_CR_HSEON_BIT)\000" .LASF564: .ascii "_INT16_T_DECLARED \000" @@ -4474,15 +4937,13 @@ main: .ascii "__ARM_FEATURE_FP16_FML\000" .LASF802: .ascii "PRIdLEAST64 __PRI64LEAST(d)\000" -.LASF858: - .ascii "RCC_CR_HSEBYP_BIT 18\000" .LASF255: .ascii "__USFRACT_EPSILON__ 0x1P-8UHR\000" -.LASF861: +.LASF858: .ascii "RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT)\000" .LASF762: .ascii "SCNx32 __SCN32(x)\000" -.LASF924: +.LASF943: .ascii "CFGR\000" .LASF557: .ascii "___int_least32_t_defined 1\000" @@ -4528,6 +4989,8 @@ main: .ascii "__PRI8LEAST(x) __LEAST8 __STRINGIFY(x)\000" .LASF174: .ascii "__DBL_EPSILON__ ((double)2.2204460492503131e-16L)\000" +.LASF974: + .ascii "OPTKEYR\000" .LASF268: .ascii "__LFRACT_MIN__ (-0.5LR-0.5LR)\000" .LASF117: @@ -4550,7 +5013,7 @@ main: .ascii "___int8_t_defined 1\000" .LASF248: .ascii "__SFRACT_MIN__ (-0.5HR-0.5HR)\000" -.LASF917: +.LASF936: .ascii "long unsigned int\000" .LASF349: .ascii "__SA_IBIT__ 16\000" @@ -4566,11 +5029,11 @@ main: .ascii "__ARM_FP16_FORMAT_IEEE\000" .LASF48: .ascii "__UINT16_TYPE__ short unsigned int\000" -.LASF869: +.LASF868: .ascii "RCC_PLLCFGR_PLLSRC_BIT 22\000" -.LASF954: +.LASF977: .ascii "gpio_write\000" -.LASF900: +.LASF901: .ascii "false ((_Bool)+0u)\000" .LASF656: .ascii "_WCHAR_T_DEFINED_ \000" @@ -4578,11 +5041,11 @@ main: .ascii "__FLT_EVAL_METHOD_TS_18661_3__ 0\000" .LASF521: .ascii "int +2\000" -.LASF958: +.LASF981: .ascii "/home/alex/code/own/c-compile-experiments\000" .LASF636: .ascii "INT8_C(x) __INT8_C(x)\000" -.LASF909: +.LASF928: .ascii "exit 42\000" .LASF63: .ascii "__UINT_FAST8_TYPE__ unsigned int\000" @@ -4614,7 +5077,7 @@ main: .ascii "SCNx8 __SCN8(x)\000" .LASF208: .ascii "__FLT32_DENORM_MIN__ 1.4012984643248171e-45F32\000" -.LASF955: +.LASF978: .ascii "gpio_set_mode\000" .LASF125: .ascii "__UINT64_C(c) c ## ULL\000" @@ -4634,7 +5097,7 @@ main: .ascii "__GCC_ATOMIC_CHAR16_T_LOCK_FREE 2\000" .LASF789: .ascii "__PRI64FAST(x) __FAST64 __STRINGIFY(x)\000" -.LASF893: +.LASF892: .ascii "RCC_CFGR_SW_BIT 0\000" .LASF168: .ascii "__DBL_MAX_EXP__ 1024\000" @@ -4662,8 +5125,6 @@ main: .ascii "_INT32_T_DECLARED \000" .LASF1: .ascii "__STDC_VERSION__ 202000L\000" -.LASF790: - .ascii "__SCN64FAST(x) __FAST64 __STRINGIFY(x)\000" .LASF531: .ascii "__FAST32 \000" .LASF519: @@ -4684,12 +5145,12 @@ main: .ascii "SCNxLEAST32 __SCN32LEAST(x)\000" .LASF711: .ascii "__SCN16LEAST(x) __LEAST16 __STRINGIFY(x)\000" -.LASF923: - .ascii "PLLCFGR\000" .LASF5: .ascii "__GNUC__ 12\000" .LASF692: .ascii "SCNiLEAST8 __SCN8LEAST(i)\000" +.LASF923: + .ascii "PWR ((struct pwr *) PWR_BASE_ADDR)\000" .LASF752: .ascii "PRId32 __PRI32(d)\000" .LASF84: @@ -4712,7 +5173,7 @@ main: .ascii "__ULACCUM_MIN__ 0.0ULK\000" .LASF461: .ascii "_ATEXIT_DYNAMIC_ALLOC 1\000" -.LASF916: +.LASF935: .ascii "__uint32_t\000" .LASF188: .ascii "__LDBL_MAX__ 1.7976931348623157e+308L\000" @@ -4722,7 +5183,7 @@ main: .ascii "__FLT_RADIX__ 2\000" .LASF454: .ascii "_INTTYPES_H \000" -.LASF918: +.LASF937: .ascii "long long int\000" .LASF784: .ascii "SCNxFAST32 __SCN32FAST(x)\000" @@ -4730,6 +5191,10 @@ main: .ascii "__ARM_FEATURE_CMSE\000" .LASF602: .ascii "UINT32_MAX (__UINT32_MAX__)\000" +.LASF648: + .ascii "__wchar_t__ \000" +.LASF925: + .ascii "PWR_CR_VOS_BIT 14\000" .LASF195: .ascii "__LDBL_HAS_QUIET_NAN__ 1\000" .LASF85: @@ -4754,8 +5219,12 @@ main: .ascii "__INTPTR_WIDTH__ 32\000" .LASF379: .ascii "__GCC_ATOMIC_LLONG_LOCK_FREE 1\000" +.LASF942: + .ascii "PLLCFGR\000" .LASF239: .ascii "__FLT32X_MIN__ 2.2250738585072014e-308F32x\000" +.LASF918: + .ascii "FLASH_ACR_LATENCY_BIT 0\000" .LASF218: .ascii "__FLT64_MAX_EXP__ 1024\000" .LASF653: @@ -4766,7 +5235,7 @@ main: .ascii "___int32_t_defined 1\000" .LASF83: .ascii "__INT_WIDTH__ 32\000" -.LASF929: +.LASF948: .ascii "APB2RSTR\000" .LASF409: .ascii "__ARM_ARCH_PROFILE\000" @@ -4816,15 +5285,15 @@ main: .ascii "__ARM_NEON_FP\000" .LASF280: .ascii "__LLFRACT_EPSILON__ 0x1P-63LLR\000" -.LASF941: +.LASF960: .ascii "APB2LPENR\000" .LASF820: .ascii "SCNiFAST64 __SCN64FAST(i)\000" -.LASF960: +.LASF983: .ascii "spin\000" .LASF683: .ascii "SCNu8 __SCN8(u)\000" -.LASF961: +.LASF984: .ascii "count\000" .LASF261: .ascii "__UFRACT_FBIT__ 16\000" @@ -4839,16 +5308,19 @@ main: .ascii "__FLOAT_TYPE float\000" .LASF185: .ascii "__LDBL_MAX_10_EXP__ 308\000" +.LASF920: + .ascii "FLASH_ACR_LATENCY(latency) ((latency & FLASH_ACR_LA" + .ascii "TENCY_MASK) << FLASH_ACR_LATENCY_BIT)\000" .LASF175: .ascii "__DBL_DENORM_MIN__ ((double)4.9406564584124654e-324" .ascii "L)\000" .LASF607: .ascii "INT64_MAX (__INT64_MAX__)\000" -.LASF920: +.LASF939: .ascii "unsigned int\000" -.LASF860: +.LASF857: .ascii "RCC_CR_HSERDY_BIT 17\000" -.LASF903: +.LASF904: .ascii "GPIO_PORT_OFFSET (0x400U)\000" .LASF459: .ascii "__NEWLIB_MINOR__ 3\000" @@ -4862,6 +5334,8 @@ main: .ascii "PRIiFAST16 __PRI16FAST(i)\000" .LASF292: .ascii "__USACCUM_IBIT__ 8\000" +.LASF914: + .ascii "FLASH_ACR_DCEN_ENABLE (1 <> 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" -.LASF885: +.LASF884: .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" .LASF645: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" @@ -5058,17 +5540,17 @@ main: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF733: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF928: +.LASF947: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF934: +.LASF953: .ascii "APB1ENR\000" .LASF741: .ascii "SCNdFAST16 __SCN16FAST(d)\000" -.LASF868: +.LASF867: .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" .LASF787: @@ -5089,18 +5571,18 @@ main: .ascii "__NEWLIB_PATCHLEVEL__ 0\000" .LASF26: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" -.LASF870: +.LASF869: .ascii "RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT" .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF919: +.LASF938: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" .LASF150: .ascii "__FLT_MIN_10_EXP__ (-37)\000" -.LASF891: +.LASF890: .ascii "RCC_CFGR_SWS_MASK (0b11)\000" .LASF312: .ascii "__ULACCUM_IBIT__ 32\000" @@ -5134,11 +5616,13 @@ main: .ascii "__SACCUM_MIN__ (-0X1P7HK-0X1P7HK)\000" .LASF274: .ascii "__ULFRACT_MAX__ 0XFFFFFFFFP-32ULR\000" -.LASF876: +.LASF875: .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" +.LASF924: + .ascii "PWR_SCALE3 (0b11)\000" .LASF573: .ascii "_INTMAX_T_DECLARED \000" .LASF309: @@ -5203,7 +5687,9 @@ main: .ascii "PRIoMAX __PRIMAX(o)\000" .LASF747: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" -.LASF948: +.LASF919: + .ascii "FLASH_ACR_LATENCY_MASK (0b1111)\000" +.LASF967: .ascii "GPIO_MODE_INPUT\000" .LASF743: .ascii "SCNoFAST16 __SCN16FAST(o)\000" @@ -5261,7 +5747,7 @@ main: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF902: +.LASF903: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" @@ -5271,7 +5757,7 @@ main: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF931: +.LASF950: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -5311,11 +5797,11 @@ main: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF926: +.LASF945: .ascii "AHB2RSTR\000" .LASF671: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" -.LASF883: +.LASF882: .ascii "RCC_CFGR_PPRE2_MASK (0b111)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" @@ -5333,15 +5819,15 @@ main: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" .LASF445: .ascii "__ARM_FEATURE_CDE\000" -.LASF297: - .ascii "__ACCUM_IBIT__ 16\000" +.LASF973: + .ascii "KEYR\000" .LASF716: .ascii "PRIu16 __PRI16(u)\000" .LASF509: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF912: +.LASF931: .ascii "short int\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -5351,7 +5837,7 @@ main: .ascii "__UDA_IBIT__ 32\000" .LASF534: .ascii "__LEAST16 \"h\"\000" -.LASF878: +.LASF877: .ascii "RCC_PLLCFGR_PLLM_MASK (0b111111)\000" .LASF586: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" @@ -5365,7 +5851,7 @@ main: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF951: +.LASF970: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" @@ -5375,6 +5861,8 @@ main: .ascii "UINT64_MAX (__UINT64_MAX__)\000" .LASF471: .ascii "_RETARGETABLE_LOCKING 1\000" +.LASF913: + .ascii "FLASH_ACR_DCEN_BIT 10\000" .LASF453: .ascii "__USES_INITFINI__ 1\000" .LASF637: @@ -5397,7 +5885,7 @@ main: .ascii "__INT16_MAX__ 0x7fff\000" .LASF478: .ascii "__SYS_CONFIG_H__ \000" -.LASF877: +.LASF876: .ascii "RCC_PLLCFGR_PLLM_BIT 0\000" .LASF8: .ascii "__VERSION__ \"12.3.1 20230626\"\000" @@ -5433,7 +5921,7 @@ main: .ascii "PRIdMAX __PRIMAX(d)\000" .LASF388: .ascii "__SIZEOF_WINT_T__ 4\000" -.LASF882: +.LASF881: .ascii "RCC_CFGR_PPRE2_BIT 13\000" .LASF782: .ascii "SCNoFAST32 __SCN32FAST(o)\000" @@ -5447,7 +5935,7 @@ main: .ascii "PRIXFAST8 __PRI8FAST(X)\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" -.LASF957: +.LASF980: .ascii "src/main.c\000" .LASF126: .ascii "__INT_FAST8_MAX__ 0x7fffffff\000" @@ -5489,7 +5977,7 @@ main: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF664: .ascii "_BSD_WCHAR_T_\000" -.LASF946: +.LASF965: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -5499,18 +5987,22 @@ main: .ascii "PRIx32 __PRI32(x)\000" .LASF278: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" -.LASF922: +.LASF941: .ascii "uint32_t\000" -.LASF874: +.LASF873: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" .LASF689: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" .LASF506: .ascii "_SYS__INTSUP_H \000" +.LASF975: + .ascii "OPTCR\000" .LASF290: .ascii "__SACCUM_EPSILON__ 0x1P-7HK\000" .LASF415: .ascii "__GCC_ASM_FLAG_OUTPUTS__ 1\000" +.LASF911: + .ascii "FLASH_BASE_ADDR (0x40023C00U)\000" .LASF745: .ascii "SCNxFAST16 __SCN16FAST(x)\000" .LASF470: @@ -5535,7 +6027,7 @@ main: .ascii "__LDBL_DIG__ 15\000" .LASF89: .ascii "__SIZE_WIDTH__ 32\000" -.LASF872: +.LASF871: .ascii "RCC_PLLCFGR_PLLP_MASK (0b11)\000" .LASF480: .ascii "_SUPPORTS_ERREXCEPT \000" @@ -5551,13 +6043,13 @@ main: .ascii "__INT_LEAST16_TYPE__ short int\000" .LASF159: .ascii "__FLT_HAS_DENORM__ 1\000" -.LASF907: +.LASF908: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF913: +.LASF932: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -5571,17 +6063,21 @@ main: .ascii "PRIXLEAST8 __PRI8LEAST(X)\000" .LASF328: .ascii "__HQ_FBIT__ 15\000" -.LASF901: +.LASF902: .ascii "__bool_true_false_are_defined 1\000" -.LASF904: +.LASF905: .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF798: .ascii "SCNi64 __SCN64(i)\000" +.LASF861: + .ascii "RCC_CR_HSIRDY_BIT 1\000" .LASF80: .ascii "__SIZE_MAX__ 0xffffffffU\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" +.LASF910: + .ascii "FLASH_H_ \000" .LASF412: .ascii "__ARM_ARCH\000" .LASF590: @@ -5598,7 +6094,7 @@ main: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF522: .ascii "long +4\000" -.LASF925: +.LASF944: .ascii "AHB1RSTR\000" .LASF723: .ascii "SCNx16 __SCN16(x)\000" @@ -5650,7 +6146,7 @@ main: .ascii "INT_FAST32_MAX (__INT_FAST32_MAX__)\000" .LASF205: .ascii "__FLT32_NORM_MAX__ 3.4028234663852886e+38F32\000" -.LASF898: +.LASF899: .ascii "bool _Bool\000" .LASF698: .ascii "PRIoFAST8 __PRI8FAST(o)\000" @@ -5662,7 +6158,7 @@ main: .ascii "__ULFRACT_IBIT__ 0\000" .LASF852: .ascii "RCC ((struct rcc *) RCC_BASE_ADDR)\000" -.LASF888: +.LASF887: .ascii "RCC_CFGR_HPRE_MASK (0b1111)\000" .LASF72: .ascii "__INT_MAX__ 0x7fffffff\000" @@ -5670,6 +6166,8 @@ main: .ascii "__INT_LEAST64_TYPE__ long long int\000" .LASF103: .ascii "__UINT16_MAX__ 0xffff\000" +.LASF922: + .ascii "PWR_BASE_ADDR (0x40007000U)\000" .LASF446: .ascii "__ARM_FEATURE_CDE_COPROC\000" .LASF765: diff --git a/build/main.i b/build/main.i index 8675bbd..ed3b075 100644 --- a/build/main.i +++ b/build/main.i @@ -2012,14 +2012,9 @@ struct rcc { #define RCC_CR_PLLON_BIT 24 -#define RCC_CR_PLLON_OFF (0 << RCC_CR_PLLON_BIT) #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) -#define RCC_CR_HSEBYP_BIT 18 -#define RCC_CR_HSEBYP (1 << RCC_CR_HSEBYP_BIT) - - #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -2027,8 +2022,13 @@ struct rcc { #define RCC_CR_HSEON_BIT 16 #define RCC_CR_HSEON_ON (1 << RCC_CR_HSEON_BIT) + +#define RCC_CR_HSIRDY_BIT 1 +#define RCC_CR_HSIRDY_READY (1 << RCC_CR_HSIRDY_BIT) + + #define RCC_CR_HSION_BIT 0 -#define RCC_CR_HSION_OFF (0 << RCC_CR_HSION_BIT) +#define RCC_CR_HSION_ON (1 << RCC_CR_HSION_BIT) #define RCC_PLLCFGR_PLLQ_BIT 24 @@ -2081,6 +2081,10 @@ struct rcc { #define RCC_CFGR_SW_BIT 0 #define RCC_CFGR_SW_MASK (0b11) #define RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << RCC_CFGR_SW_BIT) + + +#define RCC_APB1ENR_PWREN_BIT 28 +#define RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PWREN_BIT) # 3 "src/main.c" 2 # 1 "src/gpio.h" 1 @@ -2140,28 +2144,150 @@ void gpio_write(uint16_t pin, # 40 "src/gpio.h" val); # 4 "src/main.c" 2 +# 1 "src/flash.h" 1 + +#define FLASH_H_ + + + +struct flash { + volatile uint32_t ACR; + volatile uint32_t KEYR; + volatile uint32_t OPTKEYR; + volatile uint32_t SR; + volatile uint32_t CR; + volatile uint32_t OPTCR; +}; + +#define FLASH_BASE_ADDR (0x40023C00U) +#define FLASH ((struct flash *) FLASH_BASE_ADDR) + + + +#define FLASH_ACR_DCEN_BIT 10 +#define FLASH_ACR_DCEN_ENABLE (1 <APB1ENR |= (1 << 28); + + + ((struct pwr *) (0x40007000U))->CR &= ~((0b11) << 14); + ((struct pwr *) (0x40007000U))->CR |= ((0b11) << 14); + + + ((struct rcc *) (0x40023800U))->CR |= (1 << 16); + + + + while (!(((struct rcc *) (0x40023800U))->CR & (1 << 17))); + + + + ((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))->CFGR &= ~((0b1111) << 4); + ((struct rcc *) (0x40023800U))->CFGR |= (0 << 4); + + + ((struct rcc *) (0x40023800U))->CFGR &= ~((0b111) << 10); + ((struct rcc *) (0x40023800U))->CFGR |= ((0b100) << 10); + + + ((struct rcc *) (0x40023800U))->CFGR &= ~((0b111) << 13); + ((struct rcc *) (0x40023800U))->CFGR |= (0 << 13); + + + ((struct rcc *) (0x40023800U))->CR |= (1 << 24); + + + + while (!(((struct rcc *) (0x40023800U))->CR & (1 << 17))); + + + ((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); + + + + while (((((struct rcc *) (0x40023800U))->CFGR >> 2) & (0b11)) != (0b10)); + + + ((struct rcc *) (0x40023800U))->CR &= ~(1 << 0); +} + static inline void spin(volatile uint32_t count) { while (count--) (void) 0; } int main(void) { + (void) system_clock_init(); + uint16_t led = (((('C') - 'A') << 8) | 13); ((struct rcc *) (0x40023800U))->AHB1ENR |= (1 << (led >> 8)); gpio_set_mode(led, GPIO_MODE_OUTPUT); for (;;) { gpio_write(led, -# 16 "src/main.c" 3 4 +# 84 "src/main.c" 3 4 ((_Bool)+1u) -# 16 "src/main.c" +# 84 "src/main.c" ); spin(999999); gpio_write(led, -# 18 "src/main.c" 3 4 +# 86 "src/main.c" 3 4 ((_Bool)+0u) -# 18 "src/main.c" +# 86 "src/main.c" ); spin(999999); }; diff --git a/build/main.o b/build/main.o index 8c3c42b73302b4fe27b092268dc4ecf82a11b3f0..12ff0e92e775672f785ee46b7cbc586dd5143efb 100644 GIT binary patch delta 21510 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 K%fKK23Jn0B48AD< delta 19044 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 T28GFiyOdc|mM}2<0EGqsO!x5Y diff --git a/src/flash.h b/src/flash.h index 780cee5..aa17358 100644 --- a/src/flash.h +++ b/src/flash.h @@ -17,7 +17,6 @@ struct flash { // ACR Register // Data cache enable - #define FLASH_ACR_DCEN_BIT 10 #define FLASH_ACR_DCEN_ENABLE (1 < #include "rcc.h" #include "gpio.h" +#include "flash.h" +#include "pwr.h" #define exit 42 +static void system_clock_init(void) { + // Power on clock for PLL + RCC->APB1ENR |= RCC_APB1ENR_PWREN_CLOCK_ENABLE; + + // Set voltage scaling to "high" + PWR->CR &= ~(PWR_CR_VOS_MASK << PWR_CR_VOS_BIT); + PWR->CR |= (PWR_SCALE3 << PWR_CR_VOS_BIT); + + // Turn on HSE + RCC->CR |= RCC_CR_HSEON_ON; + + // Wait indefinitely for HSE to be ready + // TODO indicate error/timeout somehow? + while (!(RCC->CR & RCC_CR_HSERDY_READY)); + + // Disable PLL before changing settings as documentation state + // "These bits should be written only if PLL is disabled." + RCC->CR &= ~RCC_CR_PLLON_ON; + + // Set HSE as PLL source + RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; + + // Settings to achieve system clock of 96Mhz + RCC->PLLCFGR |= RCC_PLLCFGR_PLLM(25) | RCC_PLLCFGR_PLLN(196) | RCC_PLLCFGR_PLLP(2) | RCC_PLLCFGR_PLLQ(4); + + // Set AHB prescalar to /1 + RCC->CFGR &= ~(RCC_CFGR_HPRE_MASK << RCC_CFGR_HPRE_BIT); + RCC->CFGR |= (RCC_CFGR_HPRE_DIV_NONE << RCC_CFGR_HPRE_BIT); + + // Set APB1 prescalar to /2 + RCC->CFGR &= ~(RCC_CFGR_PPRE1_MASK << RCC_CFGR_PPRE1_BIT); + RCC->CFGR |= (RCC_CFGR_PPRE_DIV_2 << RCC_CFGR_PPRE1_BIT); + + // Set APB2 prescalar to /1 + RCC->CFGR &= ~(RCC_CFGR_PPRE2_MASK << RCC_CFGR_PPRE2_BIT); + RCC->CFGR |= (RCC_CFGR_PPRE_DIV_NONE << RCC_CFGR_PPRE2_BIT); + + // Turn PLL back on + RCC->CR |= RCC_CR_PLLON_ON; + + // Wait indefinitely for PLL to be ready + // TODO indicate error/timeout somehow? + while (!(RCC->CR & RCC_CR_HSERDY_READY)); + + // Enable caching of instructions and data + FLASH->ACR |= FLASH_ACR_DCEN_ENABLE; + 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); + + // 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); + + // 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; +} + static inline void spin(volatile uint32_t count) { while (count--) (void) 0; } int main(void) { + (void) system_clock_init(); + uint16_t led = PIN('C', 13); // Blue LED RCC->AHB1ENR |= BIT(PINPORT(led)); // Enable GPIO clock for LED gpio_set_mode(led, GPIO_MODE_OUTPUT); // Set blue LED to output mode diff --git a/src/pwr.h b/src/pwr.h new file mode 100644 index 0000000..3bbd6d2 --- /dev/null +++ b/src/pwr.h @@ -0,0 +1,22 @@ +#ifndef PWR_H_ +#define PWR_H_ + +#include + +struct pwr { + volatile uint32_t CR; // Power control register + volatile uint32_t CSR; // Power control/status registe +}; + +#define PWR_BASE_ADDR (0x40007000U) +#define PWR ((struct pwr *) PWR_BASE_ADDR) + +// Power control register +#define PWR_SCALE3 (0b11) + +// Regulator voltage scaling output selection +#define PWR_CR_VOS_BIT 14 // Bits [15:14] +#define PWR_CR_VOS_MASK (0b11) +#define PWR_CR_VOS(scale) ((scale & PWR_CR_VOS_MASK) << PWR_CR_VOS_BIT) + +#endif diff --git a/src/rcc.h b/src/rcc.h index bfd657e..5fcb8b5 100644 --- a/src/rcc.h +++ b/src/rcc.h @@ -44,13 +44,8 @@ struct rcc { // PLL toggle #define RCC_CR_PLLON_BIT 24 -#define RCC_CR_PLLON_OFF (0 << RCC_CR_PLLON_BIT) #define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) -// HSE clock bypass -#define RCC_CR_HSEBYP_BIT 18 -#define RCC_CR_HSEBYP (1 << RCC_CR_HSEBYP_BIT) - // HSE clock ready flag #define RCC_CR_HSERDY_BIT 17 #define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) @@ -59,8 +54,13 @@ struct rcc { #define RCC_CR_HSEON_BIT 16 #define RCC_CR_HSEON_ON (1 << RCC_CR_HSEON_BIT) +// HSI clock ready flag +#define RCC_CR_HSIRDY_BIT 1 +#define RCC_CR_HSIRDY_READY (1 << RCC_CR_HSIRDY_BIT) + +// HSI clock enable #define RCC_CR_HSION_BIT 0 -#define RCC_CR_HSION_OFF (0 << RCC_CR_HSION_BIT) +#define RCC_CR_HSION_ON (1 << RCC_CR_HSION_BIT) // PLLCFGR Register #define RCC_PLLCFGR_PLLQ_BIT 24 // Bits [27:24] @@ -114,4 +114,8 @@ struct rcc { #define RCC_CFGR_SW_MASK (0b11) #define RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << RCC_CFGR_SW_BIT) +// APB1ENR Register +#define RCC_APB1ENR_PWREN_BIT 28 +#define RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PWREN_BIT) + #endif