rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit 3d4cfb0330b4d9e4f8caf211a974a40e0755e89b
parent 760b82e3729aa5b63e3d8001c799e9191a204e77
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Tue, 21 Mar 2023 12:14:57 +0900

PLL worked.
But I don't understand why pll post dividers shoud be set atomically.
And I don't understand how to push and pop registers.
It makes some warning and pico stops suddenly.
Maybe stack overflows.

Diffstat:
Mmain.s | 24++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/main.s b/main.s @@ -45,8 +45,7 @@ xosc_stable: // set pll feedback divider ldr r0, pll_sys_base - mov r1, #0x4 - lsl r1, r1, #4 // + mov r1, #16 str r1, [r0, #0x8] // PLL_FBDIV_INT // power on pll @@ -63,11 +62,12 @@ pll_lock: beq pll_lock // set post dividers - ldr r1, atomic_set + ldr r0, pll_sys_base + ldr r1, atomic_clr add r0, r0, r1 - mov r1, #1 + mov r1, #4 lsl r1, r1, #4 - add r1, r1, #1 + add r1, r1, #4 lsl r1, r1, #12 str r1, [r0, #0xc] // PLL_PRIM @@ -83,11 +83,9 @@ pll_lock: mov r1, #1 str r1, [r0, #0x3c] // CLOCKS_CLK_SYS_CTRL - ldr r1, pll_sys_base - ldr r0, [r1, #0x4] - bl pr - loop: + bl p0 + bl p1 b loop // functions @@ -150,18 +148,20 @@ p1: pop {pc} led_blink: - push {lr, r4} + push {lr} + push {r4} ldr r4, sio_base mov r5, r0 str r5, [r4, #0x10] // SIO_GPIO_OUT_SET bl delay str r5, [r4, #0x18] // SIO_GPIO_OUT_CLR bl delay - pop {r4, pc} + pop {r4} + pop {pc} delay: mov r0, #1 - lsl r0, r0, #20 + lsl r0, r0, #21 del_loop: sub r0, r0, #1 bne del_loop