rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit e4552941012ea76bbfebbcd9d88f18c40287650b
parent 1bb9104eb3c2827abad41cb80b96d3f5b2fc2f2d
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 13 Apr 2023 12:43:55 +0900

ssi nanmo wakarann

Diffstat:
Mmach.s | 70+++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mmain.s | 2--
2 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/mach.s b/mach.s @@ -134,18 +134,43 @@ pll_lock: lsl r1, r1, #5 str r1, [r0, #0x2c] // UART0_UARTLCR_H -flash_read: + bl exit_xip + + ldr r3, xip_ssi_base + + mov r1, #0x06 // write enable + str r1, [r3, #0x60] // SSI: DR0 + bl wait_ssi + bl ssi_drain + + mov r1, #0x05 // read status register-1 + str r1, [r3, #0x60] // SSI: DR0 + bl wait_ssi + bl ssi_print + mov r1, #0x35 // read status register-2 + str r1, [r3, #0x60] // SSI: DR0 + bl wait_ssi + bl ssi_print + mov r1, #0x15 // read status register-3 + str r1, [r3, #0x60] // SSI: DR0 + bl wait_ssi + bl ssi_print + + pop {pc} + +exit_xip: + push {lr} + ldr r3, xip_ssi_base // disable ssi mov r1, #0 str r1, [r3, #0x8] // SSI: SSIENR - ldr r1, =((0 << 21) | (31 << 16) | (3 << 8)) + ldr r1, =(0 << 21 | 7 << 16 | 3 << 8) str r1, [r3, #0] // SSI: CTRLR0 - mov r1, #0 + mov r1, #0 // NDF str r1, [r3, #4] // SSI: CTRLR1 // setup SPI - ldr r1, =((0x0 << 24) | (0 << 11) | (0 << 8) | (0 << 2) | 0) - //ldr r1, =(0x03 << 24) + ldr r1, =(0x0 << 24 | 0 << 11 | 2 << 8 | 0 << 2 | 0) mov r2, #0xf4 str r1, [r3, r2] // SSI: SPI_CTRLR0 // reenable SSI @@ -155,17 +180,7 @@ flash_read: mov r1, #0x00 str r1, [r3, #0x60] // SSI: DR0 bl wait_ssi - bl ssi_pop - - ldr r3, xip_ssi_base - mov r1, #0x03 - lsl r1, r1, #24 - mov r2, #1 - lsl r2, r2, #8 - add r1, r1, r2 - str r1, [r3, #0x60] // SSI: DR0 - bl wait_ssi - bl ssi_pop + bl ssi_drain pop {pc} @@ -180,22 +195,35 @@ wait_ssi: bne wait_ssi bx lr -ssi_pop: +ssi_print: push {r4, lr} ldr r4, xip_ssi_base -ssi_pop_loop: +ssi_print_loop: ldr r1, [r4, #0x28] // SSI: SR mov r2, #8 // RFNE tst r1, r2 - beq ssi_empty + beq ssi_print_empty ldr r0, [r4, #0x60] // SSI: DR0 bl printh mov r0, #'\n' bl putchar - b ssi_pop_loop -ssi_empty: + b ssi_print_loop +ssi_print_empty: 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 diff --git a/main.s b/main.s @@ -5,6 +5,4 @@ main: bl init loop: bl led_p2 - bl led_p2 - bl led_p2 b loop