rp2040

RP2040 Programming without SDK
Log | Files | Refs

commit 8c54c0628b21d5f16efafa85d87daa47a09e5500
parent 05a083bed2c4eb3af68cf1d269d7309317b88634
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 30 Mar 2023 10:45:15 +0900

add printh

Diffstat:
Mas.s | 51+++++++++++++++++++++++++++++++++++++--------------
Mmain.c | 11++---------
2 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/as.s b/as.s @@ -183,7 +183,6 @@ mcfork_retry: cmp r0, r4 bne mcfork_retry - adr r0, mcfork_ent add r0, r0, #1 // thumb mode mov r4, r0 @@ -192,12 +191,11 @@ mcfork_retry: cmp r0, r4 bne mcfork_retry .align 2 -mcfork_ent: +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: @@ -264,7 +262,7 @@ uart0_rxfe: pop {r4, r5, r6, pc} .global print - // void print(char *s); + // void print(char *); print: push {r4, r5, lr} mov r4, r0 @@ -280,25 +278,48 @@ print_loop: print_end: pop {r4, r5, pc} + .global printh + // void printh(uint32_t); + // print in hex +printh: + push {r4, r5, r6, lr} + mov r4, r0 + mov r5, #0xF + mov r6, #28 +printh_loop: + mov r0, r4 + lsr r0, r0, r6 + and r0, r0, r5 + cmp r0, #10 + blt printh_low + add r0, #'A' - 10 + b printh_high +printh_low: + add r0, #'0' +printh_high: + bl putchar + sub r6, r6, #4 + bge printh_loop + pop {r4, r5, r6, pc} + led_pr: // print register with 2 leds - push {lr} + push {r0, r1, r2, r4, lr} + mov r4, r0 mov r1, #32 led_pr_loop: - push {r0} mov r2, #1 - and r2, r2, r0 + and r2, r2, r4 beq led_pr_0 bl led_p1 b led_pr_1 led_pr_0: bl led_p0 led_pr_1: - pop {r0} - lsr r0, r0, #1 + lsr r4, r4, #1 sub r1, #1 bne led_pr_loop - pop {pc} + pop {r0, r1, r2, r4, pc} led_p0: // blink led on gpio22 @@ -319,29 +340,31 @@ led_p1: .global led_p2 led_p2: // blink led on gpio22 and gpio24 - push {lr} + push {r0, lr} mov r0, #5 lsl r0, r0, #22 bl led_blink - pop {pc} + pop {r0, pc} led_blink: - push {r4, r5, lr} + push {r0, r4, r5, lr} 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, r5, pc} + pop {r0, r4, r5, pc} .global delay delay: + push {r0} mov r0, #1 lsl r0, r0, #22 del_loop: sub r0, r0, #1 bne del_loop + pop {r0} bx lr diff --git a/main.c b/main.c @@ -1,15 +1,8 @@ void main(void) { - int cpuid; init(); - print("unko\n"); - cpuid = mcfork(); - if (cpuid == 0) { - print("cpu0\n"); - } else if (cpuid == 1) { - print("cpu1\n"); - } else { - print("something wrong\n"); + while(1) { + putchar(getchar()); } }