rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit ff8864dedcf5869674a844eeff4e3b087cc80c6d
parent 2efe1f1ad6d3ea2c94c5ccda4b10bdd4414bd5d6
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 10 Apr 2023 08:55:07 +0900

divide code for multicore which is wip

Diffstat:
Mmach.s | 89-------------------------------------------------------------------------------
Amc.s | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/mach.s b/mach.s @@ -154,95 +154,6 @@ reset_chk: beq reset_chk bx lr - .global mcfork // int mcfork(void) -mcfork: - push {r4, lr} - ldr r0, =0x20000800 - mov r1, lr - str r1, [r0, #0] -mcfork_retry: - bl mc_fifo_drain - mov r0, #0 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, #0 - bne mcfork_retry - - bl mc_fifo_drain - mov r0, #0 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, #0 - bne mcfork_retry - - mov r0, #1 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, #1 - bne mcfork_retry - - ldr r0, =0x10000100 // __vectors - mov r4, r0 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, r4 - bne mcfork_retry - - ldr r0, =0x200007fc // initial sp - mov r4, r0 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, r4 - bne mcfork_retry - - adr r0, mcfork_ent - add r0, r0, #1 // thumb mode - mov r4, r0 - bl mc_fifo_send - bl mc_fifo_recv - cmp r0, r4 - bne mcfork_retry - .align 2 -mcfork_ent: // this part doesn't work for cpu1 - ldr r0, sio_base - ldr r0, [r0, #0] - pop {r4, pc} - -mc_fifo_drain: - ldr r0, sio_base -mc_fifo_not_empty: - ldr r1, [r0, #0x50] // SIO_FIFO_ST - mov r2, #1 - and r1, r2 - beq mc_fifo_empty - ldr r3, [r0, #0x58] // SIO_FIFO_RD - b mc_fifo_not_empty -mc_fifo_empty: - sev - bx lr - -mc_fifo_send: - ldr r1, sio_base -mc_fifo_full: - ldr r2, [r1, #0x50] // SIO_FIFO_ST - mov r3, #2 - and r2, r3 - beq mc_fifo_full - str r0, [r1, #0x54] // SIO_FIFO_WR - sev - bx lr - -mc_fifo_recv: - ldr r1, sio_base - ldr r2, [r1, #0x50] // SIO_FIFO_ST - mov r3, #1 - and r2, r3 - bne mc_fifo_redy - wfe -mc_fifo_redy: - ldr r0, [r1, #0x58] // SIO_FIFO_RD - bx lr - .global putchar putchar: uart0_write: diff --git a/mc.s b/mc.s @@ -0,0 +1,89 @@ + .global mcfork // int mcfork(void) +mcfork: + push {r4, lr} + ldr r0, =0x20000800 + mov r1, lr + str r1, [r0, #0] +mcfork_retry: + bl mc_fifo_drain + mov r0, #0 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, #0 + bne mcfork_retry + + bl mc_fifo_drain + mov r0, #0 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, #0 + bne mcfork_retry + + mov r0, #1 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, #1 + bne mcfork_retry + + ldr r0, =0x10000100 // __vectors + mov r4, r0 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, r4 + bne mcfork_retry + + ldr r0, =0x200007fc // initial sp + mov r4, r0 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, r4 + bne mcfork_retry + + adr r0, mcfork_ent + add r0, r0, #1 // thumb mode + mov r4, r0 + bl mc_fifo_send + bl mc_fifo_recv + cmp r0, r4 + bne mcfork_retry + .align 2 +mcfork_ent: // this part doesn't work for cpu1 + ldr r0, sio_base + ldr r0, [r0, #0] + pop {r4, pc} + +mc_fifo_drain: + ldr r0, sio_base +mc_fifo_not_empty: + ldr r1, [r0, #0x50] // SIO_FIFO_ST + mov r2, #1 + and r1, r2 + beq mc_fifo_empty + ldr r3, [r0, #0x58] // SIO_FIFO_RD + b mc_fifo_not_empty +mc_fifo_empty: + sev + bx lr + +mc_fifo_send: + ldr r1, sio_base +mc_fifo_full: + ldr r2, [r1, #0x50] // SIO_FIFO_ST + mov r3, #2 + and r2, r3 + beq mc_fifo_full + str r0, [r1, #0x54] // SIO_FIFO_WR + sev + bx lr + +mc_fifo_recv: + ldr r1, sio_base + ldr r2, [r1, #0x50] // SIO_FIFO_ST + mov r3, #1 + and r2, r3 + bne mc_fifo_redy + wfe +mc_fifo_redy: + ldr r0, [r1, #0x58] // SIO_FIFO_RD + bx lr +