summaryrefslogtreecommitdiff
path: root/firmware/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/system.c')
-rw-r--r--firmware/system.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/firmware/system.c b/firmware/system.c
index da15ee1..81e6957 100644
--- a/firmware/system.c
+++ b/firmware/system.c
@@ -1119,6 +1119,34 @@ void irq(void)
}
#endif
+static const char* const uiename[] = {
+ "Undefined instruction", "Prefetch abort", "Data abort"
+};
+
+/* Unexpected Interrupt or Exception handler. Currently only deals with
+ exceptions, but will deal with interrupts later.
+ */
+void UIE(unsigned int pc, unsigned int num)
+{
+ char str[32];
+
+ lcd_clear_display();
+#ifdef HAVE_LCD_BITMAP
+ lcd_setfont(FONT_SYSFIXED);
+#endif
+ lcd_puts(0, 0, uiename[num]);
+ snprintf(str, sizeof(str), "at %08x", pc);
+ lcd_puts(0, 1, str);
+ lcd_update();
+
+ while (1)
+ {
+ /* TODO: perhaps add button handling in here when we get a polling
+ driver some day.
+ */
+ }
+}
+
/* TODO: The following two function have been lifted straight from IPL, and
hence have a lot of numeric addresses used straight. I'd like to use
#defines for these, but don't know what most of them are for or even what