Use RCC_CFGR_SW helper function to set software clock

This commit is contained in:
Alexander Heldt
2024-12-30 11:48:38 +01:00
parent 11f469564f
commit 3aad7271a1
6 changed files with 141 additions and 150 deletions

Binary file not shown.

View File

@@ -121,7 +121,7 @@ LOAD build/timer.o
0x08000000 interrupt_vector_table 0x08000000 interrupt_vector_table
0x08000198 . = ALIGN (0x4) 0x08000198 . = ALIGN (0x4)
.text 0x08000198 0x358 .text 0x08000198 0x34c
0x08000198 . = ALIGN (0x4) 0x08000198 . = ALIGN (0x4)
*(.text) *(.text)
*(.text.*) *(.text.*)
@@ -133,114 +133,114 @@ LOAD build/timer.o
0x080001fa gpio_write 0x080001fa gpio_write
*fill* 0x08000246 0x2 *fill* 0x08000246 0x2
.text.system_clock_init .text.system_clock_init
0x08000248 0x144 build/main.o 0x08000248 0x138 build/main.o
.text.main 0x0800038c 0x88 build/main.o .text.main 0x08000380 0x88 build/main.o
0x0800038c main 0x08000380 main
.text.init_memory .text.init_memory
0x08000414 0x64 build/startup.o 0x08000408 0x64 build/startup.o
0x08000414 init_memory 0x08000408 init_memory
.text.reset 0x08000478 0x10 build/startup.o .text.reset 0x0800046c 0x10 build/startup.o
0x08000478 reset 0x0800046c reset
.text.default_handler .text.default_handler
0x08000488 0x8 build/startup.o 0x0800047c 0x8 build/startup.o
0x08000488 exti0 0x0800047c exti0
0x08000488 debug_monitor 0x0800047c debug_monitor
0x08000488 rcc 0x0800047c rcc
0x08000488 x 0x0800047c x
0x08000488 sdio 0x0800047c sdio
0x08000488 usage_fault 0x0800047c usage_fault
0x08000488 tim1_up_tim10 0x0800047c tim1_up_tim10
0x08000488 usart1 0x0800047c usart1
0x08000488 i2c3_er 0x0800047c i2c3_er
0x08000488 spi2 0x0800047c spi2
0x08000488 dma1_stream1 0x0800047c dma1_stream1
0x08000488 bus_fault 0x0800047c bus_fault
0x08000488 spi5 0x0800047c spi5
0x08000488 exti3 0x0800047c exti3
0x08000488 dma2_stream5 0x0800047c dma2_stream5
0x08000488 tim2 0x0800047c tim2
0x08000488 dma1_stream6 0x0800047c dma1_stream6
0x08000488 default_handler 0x0800047c default_handler
0x08000488 i2c1_er 0x0800047c i2c1_er
0x08000488 hard_fault 0x0800047c hard_fault
0x08000488 usart6 0x0800047c usart6
0x08000488 exti15_10 0x0800047c exti15_10
0x08000488 usart2 0x0800047c usart2
0x08000488 pend_sv 0x0800047c pend_sv
0x08000488 i2c1_ev 0x0800047c i2c1_ev
0x08000488 wwdg 0x0800047c wwdg
0x08000488 adc 0x0800047c adc
0x08000488 rtc_alarm 0x0800047c rtc_alarm
0x08000488 spi3 0x0800047c spi3
0x08000488 exti1 0x0800047c exti1
0x08000488 mem_manage 0x0800047c mem_manage
0x08000488 dma2_stream1 0x0800047c dma2_stream1
0x08000488 dma1_stream2 0x0800047c dma1_stream2
0x08000488 dma2_stream3 0x0800047c dma2_stream3
0x08000488 sv_call 0x0800047c sv_call
0x08000488 tim3 0x0800047c tim3
0x08000488 otg_fs 0x0800047c otg_fs
0x08000488 dma1_stream5 0x0800047c dma1_stream5
0x08000488 dma2_stream6 0x0800047c dma2_stream6
0x08000488 flash 0x0800047c flash
0x08000488 tamp_stamp 0x0800047c tamp_stamp
0x08000488 i2c3_ev 0x0800047c i2c3_ev
0x08000488 rtc_wkup 0x0800047c rtc_wkup
0x08000488 dma2_stream0 0x0800047c dma2_stream0
0x08000488 pvd 0x0800047c pvd
0x08000488 fpu 0x0800047c fpu
0x08000488 exti4 0x0800047c exti4
0x08000488 exti2 0x0800047c exti2
0x08000488 spi1 0x0800047c spi1
0x08000488 dma1_stream0 0x0800047c dma1_stream0
0x08000488 tim1_brk_tim9 0x0800047c tim1_brk_tim9
0x08000488 i2c2_ev 0x0800047c i2c2_ev
0x08000488 otg_fs_wkup 0x0800047c otg_fs_wkup
0x08000488 spi4 0x0800047c spi4
0x08000488 dma2_stream2 0x0800047c dma2_stream2
0x08000488 tim1_cc 0x0800047c tim1_cc
0x08000488 tim1_trg_com_tim11 0x0800047c tim1_trg_com_tim11
0x08000488 exti9_5 0x0800047c exti9_5
0x08000488 dma1_stream3 0x0800047c dma1_stream3
0x08000488 dma2_stream4 0x0800047c dma2_stream4
0x08000488 i2c2_er 0x0800047c i2c2_er
0x08000488 dma2_stream7 0x0800047c dma2_stream7
0x08000488 dma1_stream7 0x0800047c dma1_stream7
0x08000488 nmi 0x0800047c nmi
0x08000488 systick 0x0800047c systick
0x08000488 tim4 0x0800047c tim4
0x08000488 tim5 0x0800047c tim5
0x08000488 dma1_stream4 0x0800047c dma1_stream4
.text.tim4_init .text.tim4_init
0x08000490 0x40 build/timer.o 0x08000484 0x40 build/timer.o
0x08000490 tim4_init 0x08000484 tim4_init
.text.tim4_start .text.tim4_start
0x080004d0 0x20 build/timer.o 0x080004c4 0x20 build/timer.o
0x080004d0 tim4_start 0x080004c4 tim4_start
*(.rodata) *(.rodata)
*(.rodata.*) *(.rodata.*)
0x080004f0 . = ALIGN (0x4) 0x080004e4 . = ALIGN (0x4)
0x080004f0 _data_addr = LOADADDR (.data) 0x080004e4 _data_addr = LOADADDR (.data)
.glue_7 0x080004f0 0x0 .glue_7 0x080004e4 0x0
.glue_7 0x080004f0 0x0 linker stubs .glue_7 0x080004e4 0x0 linker stubs
.glue_7t 0x080004f0 0x0 .glue_7t 0x080004e4 0x0
.glue_7t 0x080004f0 0x0 linker stubs .glue_7t 0x080004e4 0x0 linker stubs
.vfp11_veneer 0x080004f0 0x0 .vfp11_veneer 0x080004e4 0x0
.vfp11_veneer 0x080004f0 0x0 linker stubs .vfp11_veneer 0x080004e4 0x0 linker stubs
.v4_bx 0x080004f0 0x0 .v4_bx 0x080004e4 0x0
.v4_bx 0x080004f0 0x0 linker stubs .v4_bx 0x080004e4 0x0 linker stubs
.iplt 0x080004f0 0x0 .iplt 0x080004e4 0x0
.iplt 0x080004f0 0x0 build/main.o .iplt 0x080004e4 0x0 build/main.o
.rel.dyn 0x080004f0 0x0 .rel.dyn 0x080004e4 0x0
.rel.iplt 0x080004f0 0x0 build/main.o .rel.iplt 0x080004e4 0x0 build/main.o
.data 0x20000000 0x0 load address 0x080004f0 .data 0x20000000 0x0 load address 0x080004e4
0x20000000 . = ALIGN (0x4) 0x20000000 . = ALIGN (0x4)
0x20000000 _data_start = . 0x20000000 _data_start = .
*(.data) *(.data)
@@ -248,10 +248,10 @@ LOAD build/timer.o
0x20000000 . = ALIGN (0x4) 0x20000000 . = ALIGN (0x4)
0x20000000 _data_end = . 0x20000000 _data_end = .
.igot.plt 0x20000000 0x0 load address 0x080004f0 .igot.plt 0x20000000 0x0 load address 0x080004e4
.igot.plt 0x20000000 0x0 build/main.o .igot.plt 0x20000000 0x0 build/main.o
.bss 0x20000000 0x0 load address 0x080004f0 .bss 0x20000000 0x0 load address 0x080004e4
0x20000000 . = ALIGN (0x4) 0x20000000 . = ALIGN (0x4)
0x20000000 _bss_start = . 0x20000000 _bss_start = .
*(.bss) *(.bss)
@@ -321,11 +321,11 @@ LOAD linker stubs
.debug_macro 0x00002f20 0xb5c build/timer.o .debug_macro 0x00002f20 0xb5c build/timer.o
.debug_macro 0x00003a7c 0x124 build/timer.o .debug_macro 0x00003a7c 0x124 build/timer.o
.debug_line 0x00000000 0x4b9 .debug_line 0x00000000 0x4b3
.debug_line 0x00000000 0x116 build/gpio.o .debug_line 0x00000000 0x116 build/gpio.o
.debug_line 0x00000116 0x1da build/main.o .debug_line 0x00000116 0x1d4 build/main.o
.debug_line 0x000002f0 0xea build/startup.o .debug_line 0x000002ea 0xea build/startup.o
.debug_line 0x000003da 0xdf build/timer.o .debug_line 0x000003d4 0xdf build/timer.o
.debug_str 0x00000000 0x5eb4 .debug_str 0x00000000 0x5eb4
.debug_str 0x00000000 0x536f build/gpio.o .debug_str 0x00000000 0x536f build/gpio.o

View File

@@ -195,29 +195,22 @@ system_clock_init:
ldr r3, [r3, #8] ldr r3, [r3, #8]
ldr r2, .L5 ldr r2, .L5
.loc 1 68 40 .loc 1 68 40
bic r3, r3, #3
str r3, [r2, #8]
.loc 1 69 33
ldr r3, .L5
ldr r3, [r3, #8]
ldr r2, .L5
.loc 1 69 40
orr r3, r3, #2 orr r3, r3, #2
str r3, [r2, #8] str r3, [r2, #8]
.loc 1 73 9 .loc 1 72 9
nop nop
.L4: .L4:
.loc 1 73 42 discriminator 1 .loc 1 72 42 discriminator 1
ldr r3, .L5 ldr r3, .L5
ldr r3, [r3, #8] ldr r3, [r3, #8]
.loc 1 73 49 discriminator 1 .loc 1 72 49 discriminator 1
lsrs r3, r3, #2 lsrs r3, r3, #2
.loc 1 73 55 discriminator 1 .loc 1 72 55 discriminator 1
and r3, r3, #3 and r3, r3, #3
.loc 1 73 65 discriminator 1 .loc 1 72 65 discriminator 1
cmp r3, #2 cmp r3, #2
bne .L4 bne .L4
.loc 1 74 1 .loc 1 73 1
nop nop
nop nop
mov sp, r7 mov sp, r7
@@ -246,7 +239,7 @@ system_clock_init:
.type main, %function .type main, %function
main: main:
.LFB1: .LFB1:
.loc 1 76 16 .loc 1 75 16
.cfi_startproc .cfi_startproc
@ args = 0, pretend = 0, frame = 8 @ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0 @ frame_needed = 1, uses_anonymous_args = 0
@@ -258,56 +251,56 @@ main:
.cfi_def_cfa_offset 16 .cfi_def_cfa_offset 16
add r7, sp, #0 add r7, sp, #0
.cfi_def_cfa_register 7 .cfi_def_cfa_register 7
.loc 1 77 3 .loc 1 76 3
bl system_clock_init bl system_clock_init
.loc 1 78 3 .loc 1 77 3
bl tim4_init bl tim4_init
.loc 1 80 3 .loc 1 79 3
bl tim4_start bl tim4_start
.loc 1 82 12 .loc 1 81 12
movw r3, #525 movw r3, #525
strh r3, [r7, #2] @ movhi strh r3, [r7, #2] @ movhi
.loc 1 83 33 .loc 1 82 33
ldr r3, .L10 ldr r3, .L10
ldr r3, [r3, #48] ldr r3, [r3, #48]
.loc 1 83 57 .loc 1 82 57
ldrh r2, [r7, #2] ldrh r2, [r7, #2]
lsrs r2, r2, #8 lsrs r2, r2, #8
uxth r2, r2 uxth r2, r2
mov r1, r2 mov r1, r2
.loc 1 83 49 .loc 1 82 49
movs r2, #1 movs r2, #1
lsls r2, r2, r1 lsls r2, r2, r1
mov r1, r2 mov r1, r2
.loc 1 83 33 .loc 1 82 33
ldr r2, .L10 ldr r2, .L10
.loc 1 83 43 .loc 1 82 43
orrs r3, r3, r1 orrs r3, r3, r1
str r3, [r2, #48] str r3, [r2, #48]
.loc 1 84 3 .loc 1 83 3
ldrh r3, [r7, #2] ldrh r3, [r7, #2]
movs r1, #1 movs r1, #1
mov r0, r3 mov r0, r3
bl gpio_set_mode bl gpio_set_mode
.loc 1 86 54 .loc 1 85 54
ldr r3, .L10+4 ldr r3, .L10+4
ldr r3, [r3, #36] ldr r3, [r3, #36]
.loc 1 86 12 .loc 1 85 12
strh r3, [r7, #6] @ movhi strh r3, [r7, #6] @ movhi
.loc 1 87 7 .loc 1 86 7
movs r3, #0 movs r3, #0
strb r3, [r7, #5] strb r3, [r7, #5]
.L9: .L9:
.loc 1 89 39 .loc 1 88 39
ldr r3, .L10+4 ldr r3, .L10+4
ldr r2, [r3, #36] ldr r2, [r3, #36]
.loc 1 89 45 .loc 1 88 45
ldrh r3, [r7, #6] ldrh r3, [r7, #6]
subs r3, r2, r3 subs r3, r2, r3
.loc 1 89 5 .loc 1 88 5
cmp r3, #249 cmp r3, #249
bls .L9 bls .L9
.loc 1 90 3 .loc 1 89 3
ldrb r3, [r7, #5] @ zero_extendqisi2 ldrb r3, [r7, #5] @ zero_extendqisi2
cmp r3, #0 cmp r3, #0
ite ne ite ne
@@ -316,23 +309,23 @@ main:
uxtb r3, r3 uxtb r3, r3
eor r3, r3, #1 eor r3, r3, #1
uxtb r3, r3 uxtb r3, r3
.loc 1 90 10 .loc 1 89 10
strb r3, [r7, #5] strb r3, [r7, #5]
ldrb r3, [r7, #5] ldrb r3, [r7, #5]
and r3, r3, #1 and r3, r3, #1
strb r3, [r7, #5] strb r3, [r7, #5]
.loc 1 91 3 .loc 1 90 3
ldrb r2, [r7, #5] @ zero_extendqisi2 ldrb r2, [r7, #5] @ zero_extendqisi2
ldrh r3, [r7, #2] ldrh r3, [r7, #2]
mov r1, r2 mov r1, r2
mov r0, r3 mov r0, r3
bl gpio_write bl gpio_write
.loc 1 93 45 .loc 1 92 45
ldr r3, .L10+4 ldr r3, .L10+4
ldr r3, [r3, #36] ldr r3, [r3, #36]
.loc 1 93 11 .loc 1 92 11
strh r3, [r7, #6] @ movhi strh r3, [r7, #6] @ movhi
.loc 1 89 5 .loc 1 88 5
b .L9 b .L9
.L11: .L11:
.align 2 .align 2
@@ -860,7 +853,7 @@ main:
.uleb128 0x12 .uleb128 0x12
.4byte .LASF1005 .4byte .LASF1005
.byte 0x1 .byte 0x1
.byte 0x4c .byte 0x4b
.byte 0x5 .byte 0x5
.4byte 0x7a .4byte 0x7a
.4byte .LFB1 .4byte .LFB1
@@ -871,7 +864,7 @@ main:
.uleb128 0x13 .uleb128 0x13
.ascii "led\000" .ascii "led\000"
.byte 0x1 .byte 0x1
.byte 0x52 .byte 0x51
.byte 0xc .byte 0xc
.4byte 0x88 .4byte 0x88
.uleb128 0x2 .uleb128 0x2
@@ -879,7 +872,7 @@ main:
.sleb128 -14 .sleb128 -14
.uleb128 0xc .uleb128 0xc
.4byte .LASF1000 .4byte .LASF1000
.byte 0x56 .byte 0x55
.byte 0xc .byte 0xc
.4byte 0x88 .4byte 0x88
.uleb128 0x2 .uleb128 0x2
@@ -887,7 +880,7 @@ main:
.sleb128 -10 .sleb128 -10
.uleb128 0xc .uleb128 0xc
.4byte .LASF1001 .4byte .LASF1001
.byte 0x57 .byte 0x56
.byte 0x7 .byte 0x7
.4byte 0x3cd .4byte 0x3cd
.uleb128 0x2 .uleb128 0x2

View File

@@ -2302,8 +2302,7 @@ static void system_clock_init(void) {
((struct rcc *) (0x40023800U))->CFGR |= ((0x0111) << 0); ((struct rcc *) (0x40023800U))->CFGR |= ((0x0111) << 0);
((struct rcc *) (0x40023800U))->CFGR &= ~((0b11) << 0); ((struct rcc *) (0x40023800U))->CFGR |= (((0b10) & (0b11)) << 0);
((struct rcc *) (0x40023800U))->CFGR |= ((0b10) << 0);
@@ -2322,13 +2321,13 @@ int main(void) {
uint16_t counter = ((struct timer *) (0x40000800U))->CNT; uint16_t counter = ((struct timer *) (0x40000800U))->CNT;
# 87 "src/main.c" 3 4 # 86 "src/main.c" 3 4
_Bool _Bool
# 87 "src/main.c" # 86 "src/main.c"
led_on = led_on =
# 87 "src/main.c" 3 4 # 86 "src/main.c" 3 4
((_Bool)+0u) ((_Bool)+0u)
# 87 "src/main.c" # 86 "src/main.c"
; ;
while(1) { while(1) {
if ((((struct timer *) (0x40000800U))->CNT - counter) >= 250) { if ((((struct timer *) (0x40000800U))->CNT - counter) >= 250) {

Binary file not shown.

View File

@@ -65,8 +65,7 @@ static void system_clock_init(void) {
RCC->CFGR |= (FLASH_ACR_LATENCY_3_WAIT_STATES << FLASH_ACR_LATENCY_BIT); RCC->CFGR |= (FLASH_ACR_LATENCY_3_WAIT_STATES << FLASH_ACR_LATENCY_BIT);
// Use PLL as system clock // Use PLL as system clock
RCC->CFGR &= ~(RCC_CFGR_SW_MASK << RCC_CFGR_SW_BIT); RCC->CFGR |= RCC_CFGR_SW(RCC_CFGR_SW_PLL);
RCC->CFGR |= (RCC_CFGR_SW_PLL << RCC_CFGR_SW_BIT);
// Wait indefinitely for PLL clock to be selected // Wait indefinitely for PLL clock to be selected
// TODO indicate error/timeout somehow? // TODO indicate error/timeout somehow?