summaryrefslogtreecommitdiff
path: root/trap.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2019-06-03 14:13:07 -0400
committerRobert Morris <[email protected]>2019-06-03 14:13:07 -0400
commita9c1a6f742886a9d45e5c625cf4f9b1b5c7a8cc4 (patch)
treeff50c8aa95dbdc5f35954e586933ad63676c69c4 /trap.c
parent50cbc7510250a64674d619d13f5912edf08b767d (diff)
downloadxv6-labs-a9c1a6f742886a9d45e5c625cf4f9b1b5c7a8cc4.tar.gz
xv6-labs-a9c1a6f742886a9d45e5c625cf4f9b1b5c7a8cc4.tar.bz2
xv6-labs-a9c1a6f742886a9d45e5c625cf4f9b1b5c7a8cc4.zip
takes one uart input interrupt, then panics
Diffstat (limited to 'trap.c')
-rw-r--r--trap.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/trap.c b/trap.c
index 74f3456..2b8fd41 100644
--- a/trap.c
+++ b/trap.c
@@ -42,6 +42,19 @@ usertrap(void)
// save user program counter.
p->tf->epc = r_sepc();
+
+ // PLIC setup
+ // qemu makes UART0 be interrupt number 10.
+ int irq = 10;
+ // set uart's priority to be non-zero (otherwise disabled).
+ *(uint*)(0x0c000000L + irq*4) = 1;
+ // set uart's enable bit for hart 0 s-mode.
+ *(uint*)0x0c002080 = (1 << irq);
+
+ // hart 0 S-mode priority threshold.
+ *(uint*)0x0c201000 = 0;
+
+ intr_on();
if(r_scause() == 8){
// system call