rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit d631538bf79ac256e65bfa9b3e1f8432aa03303a
parent eff07034c7559d6e7008df62f86bef8c677a11f2
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu,  6 Apr 2023 08:40:27 +0900

change register

Diffstat:
Mboot2/boot2.S | 70+++++++++++++++++++++++++++++++++++-----------------------------------
1 file changed, 35 insertions(+), 35 deletions(-)

diff --git a/boot2/boot2.S b/boot2/boot2.S @@ -7,58 +7,57 @@ .equ PPB_BASE, 0xe0000000 boot2: - push {lr} + push {r4, lr} - ldr r0, =PADS_QSPI_BASE + ldr r4, =PADS_QSPI_BASE ldr r1, =(2 << 4 | 1) // 8mA, slew fast - str r1, [r0, #0x4] // PADS_QSPI: GPIO_QSPI_SCLK + str r1, [r4, #0x4] // PADS_QSPI: GPIO_QSPI_SCLK - ldr r0, =XIP_SSI_BASE + // r4 should not be changed + ldr r4, =XIP_SSI_BASE // set SSI standard SPI // disable ssi mov r1, #0 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR //set divider ldr r1, =0x2 // This is 2 in sdk - str r1, [r0, #0x14] // SSI: BAUDR + str r1, [r4, #0x14] // SSI: BAUDR // set 1-cycle sample delay. mov r1, #1 mov r2, #0xf0 - str r1, [r0, r2] // SSI: RX_SAMPLE_DLY + str r1, [r4, r2] // SSI: RX_SAMPLE_DLY // setup sregs ldr r1, =((7 << 16) | (0 << 8)) // 8bit data frame size, tx and rx - str r1, [r0, #0] // SSI: CTRLR0 + str r1, [r4, #0] // SSI: CTRLR0 // enable ssi mov r1, #1 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR // set flash QSPI // write enable mov r1, #0x06 // write enable - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 bl wait_ssi - ldr r0, =XIP_SSI_BASE - ldr r1, [r0, #0x60] // SSI: DR0 + ldr r1, [r4, #0x60] // SSI: DR0 // set sreg mov r1, #0x31 // write status register-2 - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 mov r1, #0x2 // quad enable - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 bl wait_ssi - ldr r1, [r0, #0x60] // SSI: DR0 - ldr r1, [r0, #0x60] // SSI: DR0 + ldr r1, [r4, #0x60] // SSI: DR0 + ldr r1, [r4, #0x60] // SSI: DR0 wait_sreg: mov r1, #0x5 // read status register-1 // maybe the first str represents the command // while does the second one the address. - str r1, [r0, #0x60] // SSI: DR0 - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 bl wait_ssi - ldr r0, =XIP_SSI_BASE - ldr r1, [r0, #0x60] // SSI: DR0 - ldr r1, [r0, #0x60] // SSI: DR0 + ldr r1, [r4, #0x60] // SSI: DR0 + ldr r1, [r4, #0x60] // SSI: DR0 mov r2, #1 // BUSY flag tst r1, r2 bne wait_sreg @@ -66,47 +65,48 @@ wait_sreg: // set SSI QSPI and XIP // disable ssi mov r1, #0 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR // set up quad spi ldr r1, =((2 << 21) | (31 << 16)| (0 << 8)) // tmod is 3 in sdk - str r1, [r0, #0] // SSI: CTRLR0 + str r1, [r4, #0] // SSI: CTRLR0 mov r1, #0 // NDF = 0 - str r1, [r0, #0x4] // SSI: CTRLR1 + str r1, [r4, #0x4] // SSI: CTRLR1 // setup xip ldr r1, =((4 << 11) | (2 << 8) | (8 << 2) | (1 << 0)) mov r2, #0xf4 - str r1, [r0, r2] // SSI: SPI_CTRLR0 + str r1, [r4, r2] // SSI: SPI_CTRLR0 // re-enable spi mov r1, #1 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR // first read from flash // set flash continuous read mov r1, #0xeb // fast read quad i/o - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 // continuous read is not documented in w25q16j datasheet... // it says mode bits shoud be Fxh (x: don't care)... // in w2580bv datasheet, these bits are said to be 0bxx10xxxx. // why w25q16j lacks the description? mov r1, #0x20 - str r1, [r0, #0x60] // SSI: DR0 + str r1, [r4, #0x60] // SSI: DR0 bl wait_ssi // I think I need to read rxd-fifo - // ldr r1, [r0, #0x60] + // ldr r1, [r4, #0x60] // set SIP continuous read - // disable spi + // disable ssi mov r1, #0 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR // the command bit is not documented. ldr r1, =((0x20 << 24) | (4 << 11) | (0 << 8) | (8 << 2) | (2 << 0)) mov r2, #0xf4 - str r1, [r0, r2] // SSI: SPI_CTRLR0 + str r1, [r4, r2] // SSI: SPI_CTRLR0 // re-enable ssi mov r1, #1 - str r1, [r0, #0x8] // SSI: SSIENR + str r1, [r4, #0x8] // SSI: SSIENR // exit from boot2 + pop {r4} pop {r0} cmp r0, #0 beq vector_into_flash @@ -120,8 +120,8 @@ vector_into_flash: bx r1 wait_ssi: - ldr r0, =XIP_SSI_BASE - ldr r1, [r0, #0x28] // SSI: SR + // asumes that r4 is XIP_SSI_BASE + ldr r1, [r4, #0x28] // SSI: SR mov r2, #4 // TFE tst r1, r2 beq wait_ssi