diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/system.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/firmware/system.c b/firmware/system.c index 3f75e020c1..1d5bb21ff6 100644 --- a/firmware/system.c +++ b/firmware/system.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include "font.h" | 23 | #include "font.h" |
24 | #include "led.h" | 24 | #include "led.h" |
25 | #include "system.h" | 25 | #include "system.h" |
26 | #include "rolo.h" | ||
26 | 27 | ||
27 | #define default_interrupt(name,number) \ | 28 | #define default_interrupt(name,number) \ |
28 | extern __attribute__((weak,alias("UIE" #number))) void name (void); void UIE##number (void) | 29 | extern __attribute__((weak,alias("UIE" #number))) void name (void); void UIE##number (void) |
@@ -323,7 +324,7 @@ void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */ | |||
323 | char str[32]; | 324 | char str[32]; |
324 | 325 | ||
325 | asm volatile ("sts\tpr,%0" : "=r"(n)); | 326 | asm volatile ("sts\tpr,%0" : "=r"(n)); |
326 | 327 | ||
327 | /* clear screen */ | 328 | /* clear screen */ |
328 | lcd_clear_display (); | 329 | lcd_clear_display (); |
329 | #ifdef HAVE_LCD_BITMAP | 330 | #ifdef HAVE_LCD_BITMAP |
@@ -347,6 +348,15 @@ void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */ | |||
347 | state = state?false:true; | 348 | state = state?false:true; |
348 | 349 | ||
349 | for (i = 0; i < 240000; ++i); | 350 | for (i = 0; i < 240000; ++i); |
351 | |||
352 | /* try to restart firmware if ON is pressed */ | ||
353 | #ifdef HAVE_LCD_CHARCELLS | ||
354 | if (!(PADR & 0x20)) | ||
355 | rolo_load("/archos.mod"); | ||
356 | #else | ||
357 | if (!(PBDR & PBDR_BTN_ON)) | ||
358 | rolo_load("/ajbrec.ajz"); | ||
359 | #endif | ||
350 | } | 360 | } |
351 | } | 361 | } |
352 | 362 | ||