diff options
Diffstat (limited to 'src/cpu/irq.c')
-rw-r--r-- | src/cpu/irq.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/cpu/irq.c b/src/cpu/irq.c index fb73b8a..c966935 100644 --- a/src/cpu/irq.c +++ b/src/cpu/irq.c @@ -1,9 +1,9 @@ #include <cpu/irq.h> #include <drivers/uart.h> +#include <globals.h> #include <graphics/drawer.h> #include <symbols.h> #include <sys/core.h> -#include <sys/kernel.h> #include <sys/schedule.h> #include <sys/timer.h> #include <util/mutex.h> @@ -67,7 +67,7 @@ void c_irq_handler(void) } else if (data == 0x61) { cmd[off] = (char) data; off += 1; - //_start(); // Trigger reset + _start(); // Trigger reset //heap_info_u(); // Else output } else { @@ -98,12 +98,18 @@ void c_irq_handler(void) write_string(&g_Drawer, cmd); return; } + } else if (*(unsigned long*)SYS_TIMER_CS == SYS_TIMER_SC_M0) { + volatile unsigned long* timer_cs = (unsigned long*)SYS_TIMER_CS; + volatile unsigned long* timer_chi = (unsigned long*)SYS_TIMER_CHI; + volatile unsigned long* nexttime = (unsigned long*)SYS_TIMER_C0; + *timer_cs = SYS_TIMER_SC_M0; + *nexttime = *timer_chi + 60000000; + } else { + uart_string("Pending?"); } } else if (source & (1 << 3)) { c_timer(); return; - } else { - uart_string("Unknown Interrupt Detected!"); } return; } @@ -194,12 +200,17 @@ void c_fiq_handler(void) write_string(&g_Drawer, cmd); return; } + } else if (*(unsigned long*)SYS_TIMER_CS == SYS_TIMER_SC_M0) { + volatile unsigned long* timer_cs = (unsigned long*)SYS_TIMER_CS; + volatile unsigned long* timer_chi = (unsigned long*)SYS_TIMER_CHI; + volatile unsigned long* nexttime = (unsigned long*)SYS_TIMER_C0; + *timer_cs = SYS_TIMER_SC_M0; + //*nexttime = *timer_chi + 60000000; + *nexttime = *timer_chi + 10000; } } else if (source & (1 << 3)) { c_timer(); return; - } else { - uart_string("Unknown Interrupt Detected!"); } return; } |