commit 7e304f12d94a6d4ea5cc5518f2e093508cb746f4
parent 27af25bb882a8c50c2c7e0290eb6c77a166f9886
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sat, 16 Mar 2024 09:04:33 +0900
rewrite isr_alarm in assembly
Diffstat:
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/ex3/main.c b/ex3/main.c
@@ -8,7 +8,6 @@ void *get_sp(void);
void wfi(void);
void *memcpy(void *s1, void *s2, long n);
void setreg(void);
-void print_sr(void);
extern char proc0_start, proc0_size;
extern char proc1_start, proc1_size;
@@ -52,7 +51,6 @@ main(void) {
p1.r[15] = (void *) 0x20000100; // pc
for (;;) {
- print_sr(); puts("");
setreg();
wfi();
}
@@ -82,12 +80,10 @@ void
isr_svcall(void) {
puts("svcall");
}
-
+/*
void
isr_alarm(void) {
int *sp = get_sp();
- print_sr();
- puts("");
for (int i = 0; i < 12; i += 1) {
printh(sp+i);
printh((void *)*(sp+i));
@@ -96,3 +92,4 @@ isr_alarm(void) {
scheduler();
set_alarm(1000 * 1000);
}
+*/
+\ No newline at end of file
diff --git a/ex3/proc.s b/ex3/proc.s
@@ -51,3 +51,25 @@ print_sr:
mrs r0, ipsr
bl printh
pop {pc}
+
+ .global isr_alarm
+isr_alarm:
+ push {r4, r5, r6, lr}
+ bl get_sp
+ mov r4, r0
+ mov r5, sp
+ add r5, #16
+ mov r6, r5
+ add r6, #32 // 8 words
+isr_alarm_loop:
+ ldr r0, [r5, #0]
+ bl printh
+ mov r0, #'\n'
+ bl putbyte
+ add r5, r5, #4
+ cmp r5, r6
+ blt isr_alarm_loop
+ bl scheduler
+ ldr r0, =(1000 * 1000)
+ bl set_alarm
+ pop {r4, r5, r6, pc}
+\ No newline at end of file
diff --git a/ex3/start.s b/ex3/start.s
@@ -252,6 +252,7 @@ memcpy_loop:
// void putbyte(char b);
// Putbyte writes b to uart0.
+ .global putbyte
putbyte:
ldr r3, uart0_base
mov r1, #1