rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit d948bda3a8d2db3ec661e3c2d93e873b05a30970
parent 4bd1aedd867266f7f05e28b8edbba3ceac9b6d62
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 17 Apr 2023 08:46:12 +0900

read bootrom

Diffstat:
Mmach.s | 95++++++++++---------------------------------------------------------------------
1 file changed, 11 insertions(+), 84 deletions(-)

diff --git a/mach.s b/mach.s @@ -134,95 +134,20 @@ pll_lock: lsl r1, r1, #5 str r1, [r0, #0x2c] // UART0_UARTLCR_H - ldr r0, =(0 << 21 | 32 << 16 | 3 << 8) // SSI: CTRLR0 - ldr r1, =(0x0 << 24 | 0 << 11 | 0 << 8 | 0 << 2 | 0) // SSI: SPI_CTRLR0 - bl setup_ssi - bl exit_xip - - ldr r4, xip_ssi_base - - ldr r0, =(0 << 21 | 32 << 16 | 3 << 8) // SSI: CTRLR0 - ldr r1, =(0x0 << 24 | 0 << 11 | 0 << 8 | 0 << 2 | 0) // SSI: SPI_CTRLR0 - bl setup_ssi - - mov r0, #0x03 - lsl r0, r0, #24 - str r0, [r4, #0x60] // SSI: DR0 - - bl wait_ssi - bl ssi_print - - pop {r4, pc} - -exit_xip: - push {lr} - mov r1, #0 - str r1, [r3, #0x60] // SSI: DR0 - str r1, [r3, #0x60] // SSI: DR0 - str r1, [r3, #0x60] // SSI: DR0 - str r1, [r3, #0x60] // SSI: DR0 - bl wait_ssi - bl ssi_drain - pop {pc} - -setup_ssi: - push {lr} - ldr r3, xip_ssi_base - // disable ssi - mov r2, #0 - str r2, [r3, #0x8] // SSI: SSIENR - // setup SSI - str r0, [r3, #0] // SSI: CTRLR0 - mov r2, #0 // NDF - str r2, [r3, #4] // SSI: CTRLR1 - // setup SPI - mov r2, #0xf4 - str r1, [r3, r2] // SSI: SPI_CTRLR0 - // reenable SSI - mov r2, #1 - str r2, [r3, #0x8] // SSI: SSIENR - pop {pc} - -wait_ssi: - ldr r3, xip_ssi_base - ldr r1, [r3, #0x28] // SSI: SR - mov r2, #4 // TFE - tst r1, r2 - beq wait_ssi - mov r2, #1 // BUSY - tst r1, r2 - bne wait_ssi - bx lr - -ssi_print: - push {r4, lr} - ldr r4, xip_ssi_base -ssi_print_loop: - ldr r1, [r4, #0x28] // SSI: SR - mov r2, #8 // RFNE - tst r1, r2 - beq ssi_print_empty - ldr r0, [r4, #0x60] // SSI: DR0 + ldr r3, rom_base + ldrb r0, [r3, #0x10] + bl putchar + ldrb r0, [r3, #0x11] + bl putchar + ldrb r0, [r3, #0x12] bl printh mov r0, #'\n' bl putchar - b ssi_print_loop -ssi_print_empty: + ldrb r0, [r3, #0x13] + bl printh + pop {r4, pc} -ssi_drain: - push {lr} - ldr r3, xip_ssi_base -ssi_drain_loop: - ldr r1, [r3, #0x28] // SSI: SR - mov r2, #8 // RFNE - tst r1, r2 - beq ssi_drain_empty - ldr r0, [r3, #0x60] // SSI: DR0 - b ssi_drain_loop -ssi_drain_empty: - pop {pc} - unreset: // unreset subsystems specified by r0 // args: bit mask to specify the subsystems to unreset @@ -387,6 +312,8 @@ atomic_set: .word 0x00002000 atomic_clr: .word 0x00003000 +rom_base: + .word 0x00000000 xip_base: .word 0x10000000 xip_ssi_base: