#include #include "ch573/gpio.h" #include "isr_vector.h" #include "panic.h" #include "risc-v.h" #define GPIO_PORT_A ch573_gpio__gpio_port_a #define GPIO_PORT CH573_GPIO__GPIO_PORT_T_INTF void delay(); struct exc_info { uint32_t mtval; uint32_t mepc; uint32_t mcause; }; static inline void get_exc_info(struct exc_info* out) { out->mtval = MTVAL; out->mepc = MEPC; out->mcause = MCAUSE; } IRQ(exc) { struct exc_info ei; get_exc_info(&ei); printf("Hardware Exception Caught:\n"); printf(" mcause: 0x%08x\n", ei.mcause); printf(" mepc: 0x%08x\n", ei.mepc); printf(" mtval: 0x%08x\n", ei.mtval); panic(ei.mcause); } IRQ(nmi) { struct exc_info ei; get_exc_info(&ei); printf("Unhandled NMI Caught:\n"); printf(" mcause: 0x%08x\n", ei.mcause); printf(" mepc: 0x%08x\n", ei.mepc); printf(" mtval: 0x%08x\n", ei.mtval); panic(ei.mcause); }