From 022dfd0f42962da6c60fbeb5604e1455a07eaaa6 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Thu, 20 Jan 2022 16:28:18 -0700 Subject: Added System Timer Hook --- src/cpu/irq.c | 4 ++++ src/sys/core.c | 1 + src/util/status.c | 9 +++++++++ src/util/time.c | 14 ++++++++++++++ 4 files changed, 28 insertions(+) (limited to 'src') diff --git a/src/cpu/irq.c b/src/cpu/irq.c index f1d8fb6..fb73b8a 100644 --- a/src/cpu/irq.c +++ b/src/cpu/irq.c @@ -102,6 +102,8 @@ void c_irq_handler(void) } else if (source & (1 << 3)) { c_timer(); return; + } else { + uart_string("Unknown Interrupt Detected!"); } return; } @@ -196,6 +198,8 @@ void c_fiq_handler(void) } else if (source & (1 << 3)) { c_timer(); return; + } else { + uart_string("Unknown Interrupt Detected!"); } return; } diff --git a/src/sys/core.c b/src/sys/core.c index 0b4b91a..d658d90 100644 --- a/src/sys/core.c +++ b/src/sys/core.c @@ -33,6 +33,7 @@ void sysinit(void) cmdidx = 0; for(int i = 0; i < 2048; i++) cmd[i] = 0; + *(unsigned long*) SYS_TIMER_C0 = 60000000; // 60 second trigger ///... // Route GPU interrupts to Core 0 diff --git a/src/util/status.c b/src/util/status.c index dd2b899..7abf931 100644 --- a/src/util/status.c +++ b/src/util/status.c @@ -162,6 +162,15 @@ void status(void) "and %0, %0, #3" : "=r"(coren) :: "cc"); write_string(&g_Drawer, "Status Updated by Core #"); write_10(&g_Drawer, coren); + write_string(&g_Drawer, "\nSys Timer Status: "); + coren = *(unsigned long*)SYS_TIMER_CS; + write_10(&g_Drawer, coren); + write_string(&g_Drawer, " : "); + unsigned long long tval = get_time(); + write_hex32(&g_Drawer, (tval >> 32)); + write_hex32(&g_Drawer, tval); + write_char(&g_Drawer, '\n'); + write_10(&g_Drawer, ((unsigned long)tval)/1000000); g_Drawer.x = x; g_Drawer.y = y; diff --git a/src/util/time.c b/src/util/time.c index a0c539b..e9e5716 100644 --- a/src/util/time.c +++ b/src/util/time.c @@ -51,3 +51,17 @@ unsigned long read_cntfrq(void) asm volatile ("mrc p15, 0, %0, c14, c0, 0" : "=r"(val) ); return val; } + +unsigned long long get_time(void) +{ + union { + unsigned long long tval; + struct { + unsigned long high; + unsigned long low; + } tvalb; + } t; + t.tvalb.low = *(unsigned long*)SYS_TIMER_CLO; + t.tvalb.high = *(unsigned long*)SYS_TIMER_CHI; + return t.tval; +} -- cgit v1.2.1