diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-11-16 14:37:24 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-11-16 14:41:04 -0700 |
commit | 7b1008111baa95b4a8c3195f9f5a94bfdbe8d7d2 (patch) | |
tree | 75801992d44c8f96a2c09285ea3b5a869f70d90f /include/exc.c | |
parent | 6bac8ebe38197babcc1d410e3f5f48792e83e400 (diff) | |
download | ch573-7b1008111baa95b4a8c3195f9f5a94bfdbe8d7d2.tar.gz ch573-7b1008111baa95b4a8c3195f9f5a94bfdbe8d7d2.tar.bz2 ch573-7b1008111baa95b4a8c3195f9f5a94bfdbe8d7d2.zip |
Move exc and nmi handlers to their own files.
Diffstat (limited to 'include/exc.c')
-rw-r--r-- | include/exc.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/include/exc.c b/include/exc.c new file mode 100644 index 0000000..707d3b0 --- /dev/null +++ b/include/exc.c @@ -0,0 +1,43 @@ +#include <stdio.h> + +#include "isr_vector.h" +#include "panic.h" + +#include "ch573/gpio.h" + +#define GPIO_PORT_A ch573_gpio__gpio_port_a +#define GPIO_PORT CH573_GPIO__GPIO_PORT_T_INTF + +void delay(); + +IRQ(exc) +{ + uint32_t mcause, mepc, mtval, *sp; + + asm volatile("csrr %0, mcause" : "=r"(mcause)); + asm volatile("csrr %0, mepc" : "=r"(mepc)); + asm volatile("csrr %0, mtval" : "=r"(mtval)); + + printf("Hardware Exception Caught:\n"); + printf(" mcause: 0x%80x\n", mcause); + printf(" mepc: 0x%80x\n", mepc); + printf(" mtval: 0x%80x\n", mtval); + + panic(mcause); +} + +IRQ(nmi) +{ + uint32_t mcause, mepc, mtval, *sp; + + asm volatile("csrr %0, mcause" : "=r"(mcause)); + asm volatile("csrr %0, mepc" : "=r"(mepc)); + asm volatile("csrr %0, mtval" : "=r"(mtval)); + + printf("Unhandled NMI Caught:\n"); + printf(" mcause: 0x%80x\n", mcause); + printf(" mepc: 0x%80x\n", mepc); + printf(" mtval: 0x%80x\n", mtval); + + panic(mcause); +} |