commit 07d07fe2aeaee6b1cbda4b132c08aa68a483b4f7
parent e15aac2f4537c9045462db34543a5bd779dc8520
Author: Matsuda Kenji <info@mtkn.jp>
Date: Mon, 27 Mar 2023 10:44:22 +0900
try to use core1
Diffstat:
M | as.s | | | 95 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- |
M | main.c | | | 16 | +++++++++------- |
2 files changed, 102 insertions(+), 9 deletions(-)
diff --git a/as.s b/as.s
@@ -121,8 +121,6 @@ pll_lock:
pop {pc}
-// functions
-
unreset:
// unreset subsystems specified by r0
// args: bit mask to specify the subsystems to unreset
@@ -144,6 +142,99 @@ 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
+
+ bl led_p0
+
+ mov r0, #1
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, #1
+ bne mcfork_retry
+
+ bl led_p1
+
+ 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:
+ 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
+ bne 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/main.c b/main.c
@@ -1,13 +1,15 @@
void
main(void)
{
- char *s = "unko\n";
- char *c;
+ int cpuid;
init();
- while(1) {
- for (c = s; *c != '\0'; c++) {
- putchar(*c);
- }
- delay();
+ print("unko\n");
+ cpuid = mcfork();
+ if (cpuid == 0) {
+ print("cpu0\n");
+ } else if (cpuid == 1) {
+ print("cpu1\n");
+ } else {
+ print("something wrong\n");
}
}