commit 9b0c7c0acbd703df14bd4ecd0a94a88da9c60eef
parent da7c10f1af1e710db3abf8e85dab3bcd0e74ea0a
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 12 Mar 2024 07:51:29 +0900
add hardfault handler, thought it just reports the fault for now
Diffstat:
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/ex3/main.c b/ex3/main.c
@@ -30,7 +30,7 @@ proc_tab *ptab;
int
main(void) {
init();
-
+ puts("reset");
proc *p0 = (proc *) 0x20041000, *p1 = (proc *) 0x20041100; // sram5
memcpy((void *)0x20000000, (void *)&proc0_start, (long) &proc0_size);
@@ -53,6 +53,12 @@ scheduler(void) {
}
void
+isr_hard_fault(void) {
+ puts("hard fault");
+ halt();
+}
+
+void
isr_svcall(void) {
puts("svcall");
}
diff --git a/ex3/proc.s b/ex3/proc.s
@@ -6,7 +6,7 @@ proc0:
bl puts
b proc0
- .align 2
+ .align 4
.global msg0
msg0:
.asciz "proc0"
diff --git a/ex3/start.s b/ex3/start.s
@@ -7,8 +7,8 @@
vectors:
.word 0x20040000 // 0 initial SP
.word reset+1 // 1 entry point
- .word reset+1 // 2
- .word reset+1 // 3
+ .word reset+1 // 2 NMI
+ .word isr_hard_fault+1 // 3 hard fault
.word reset+1 // 4
.word reset+1 // 5
.word reset+1 // 6
@@ -279,6 +279,11 @@ rxfe:
and r0, r0, r1
bx lr
+ .global halt
+halt:
+ wfe
+ b halt
+
// The following functions make no side effects and
// can be used anywhare without pushing and popping
// registers.