diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 55 |
1 files changed, 11 insertions, 44 deletions
@@ -6,6 +6,7 @@ #include "ch573/pwr.h" #include "ch573/uart.h" #include "isr_vector.h" +#include "panic.h" #define GPIO_PORT_A ch573_gpio__gpio_port_a #define GPIO_PORT CH573_GPIO__GPIO_PORT_T_INTF @@ -49,8 +50,6 @@ FILE _uart1_FILE = (FILE){ FILE* const stdout = &_uart1_FILE; -int my_puts(const char* str); - // FILE* const stdout = &_uart1_FILE; /* @@ -127,6 +126,8 @@ int main(void) char buf[32] = { 0 }; volatile uint32_t i = 0xdeadbeef; + panic(0xdeadbeef); + stack_dump(&i); print_hex(i); @@ -134,7 +135,6 @@ int main(void) stdout->put('a', NULL); stdout->put('\n', NULL); fputs("bulitin fputs\n", stdout); - my_puts("my_puts\n"); puts("bulitin puts\n"); while (1) { @@ -186,56 +186,23 @@ void print_hex(uint32_t x) } } -void stack_dump(uint32_t* sp) -{ - fputs("\n\nstack_dump:\n\n", &_uart1_FILE); - while ((uint32_t) sp < 0x20008000) { - fputs(" 0x", &_uart1_FILE); - print_hex((uint32_t)sp); - fputs(" -> 0x", &_uart1_FILE); - print_hex(*sp); - fputs("\n", &_uart1_FILE); - sp += 1; - } -} 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)); - fputs("NMI Detected:\n", &_uart1_FILE); - fputs(" mcause: 0b", &_uart1_FILE); - print_binary(mcause); - fputs("\n mepc: 0b", &_uart1_FILE); - print_binary(mepc); - fputs("\n 0x", &_uart1_FILE); - print_hex(mepc); - fputs("\n mtval: 0b", &_uart1_FILE); - print_binary(mtval); - fputs("\n deadbeef: 0b", &_uart1_FILE); - print_binary(0xdeadbeef); - fputs("\n", &_uart1_FILE); - - stack_dump(__builtin_return_address(0)); + printf("Hardware Exception Caught:\n"); + printf(" mcause: 0x%80x\n", mcause); + printf(" mepc: 0x%80x\n", mepc); + printf(" mtval: 0x%80x\n", mtval); - while (1) { - GPIO_PORT.out.set(GPIO_PORT_A, ON, 8); - delay(); - delay(); - delay(); - delay(); - delay(); - delay(); - delay(); - delay(); - GPIO_PORT.out.set(GPIO_PORT_A, OFF, 8); - delay(); - delay(); - delay(); - } + panic(mcause); + + while (1); } IRQ(nmi) |