Line 73... |
Line 73... |
|
|
// capture all exceptions and give debug info via UART
|
// capture all exceptions and give debug info via UART
|
// this is not required, but keeps us safe
|
// this is not required, but keeps us safe
|
neorv32_rte_setup();
|
neorv32_rte_setup();
|
|
|
|
|
// init UART at default baud rate, no parity bits, no rx interrupt, no tx interrupt
|
// init UART at default baud rate, no parity bits, no rx interrupt, no tx interrupt
|
neorv32_uart_setup(BAUD_RATE, 0b00, 0, 0);
|
neorv32_uart_setup(BAUD_RATE, 0b00, 0, 0);
|
|
|
// check available hardware extensions and compare with compiler flags
|
// check available hardware extensions and compare with compiler flags
|
neorv32_rte_check_isa(0); // silent = 0 -> show message if isa mismatch
|
neorv32_rte_check_isa(0); // silent = 0 -> show message if isa mismatch
|
Line 88... |
Line 87... |
|
|
// show the cause of the last processor reset
|
// show the cause of the last processor reset
|
neorv32_uart_print("Cause of last processor reset: ");
|
neorv32_uart_print("Cause of last processor reset: ");
|
uint8_t wdt_cause = neorv32_wdt_get_cause();
|
uint8_t wdt_cause = neorv32_wdt_get_cause();
|
|
|
if (wdt_cause == 1) {
|
if (wdt_cause == 0) {
|
neorv32_uart_print("External reset\n");
|
neorv32_uart_print("External reset\n");
|
}
|
}
|
else if (wdt_cause == 2) {
|
else if (wdt_cause == 1) {
|
neorv32_uart_print("Watchdog timeout\n");
|
neorv32_uart_print("Watchdog\n");
|
}
|
|
else if (wdt_cause == 3) {
|
|
neorv32_uart_print("Watchdog access fault\n");
|
|
}
|
}
|
else {
|
else {
|
neorv32_uart_print("Undefined\n");
|
neorv32_uart_print("Undefined\n");
|
}
|
}
|
|
|
|
|
// the watchod has a 20-bit counter, which trigger either an interrupt or a system reset
|
// the watchod has a 20-bit counter, which triggers either an interrupt or a system reset
|
// when overflowing
|
// when overflowing
|
|
|
// init watchdog (watchdog timer increment = cpu_clock/64, trigger reset on overflow)
|
// init watchdog (watchdog timer increment = cpu_clock/64, trigger reset on overflow, lock
|
neorv32_wdt_setup(CLK_PRSC_64, 1);
|
// access so nobody can alter the configuration until next reset)
|
|
neorv32_wdt_setup(CLK_PRSC_64, 1, 1);
|
|
|
|
|
|
|
neorv32_uart_print("\n\nWill reset WDT 64 times.\n"
|
neorv32_uart_print("\n\nWill reset WDT 64 times.\n"
|
"A system reset will be executed in the following time out.\n"
|
"A system reset will be executed in the following time out.\n"
|