From d6d04862de9126d0930ae1f4b95ff6077c6eda63 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 4 Dec 2024 00:20:36 -0700 Subject: Basic interrupts are working. --- include/isr_vector.h | 16 ++++++++++++++++ include/systick.h | 9 +++++++++ 2 files changed, 25 insertions(+) create mode 100644 include/systick.h (limited to 'include') diff --git a/include/isr_vector.h b/include/isr_vector.h index 6059875..3d4070a 100644 --- a/include/isr_vector.h +++ b/include/isr_vector.h @@ -51,3 +51,19 @@ void irq_on_wdog_bat(void); _real__irq_on_##name(); \ } \ static void __attribute__((noinline)) _real__irq_on_##name(void) + +inline static void enable_interrupts() +{ + int mstatus; + asm volatile ("csrr %0, mstatus" : "=r"(mstatus)); + mstatus |= 0x88; + asm volatile ("csrw mstatus, %0" : : "r"(mstatus)); +} + +inline static void disable_interrupts() +{ + int mstatus; + asm volatile ("csrr %0, mstatus" : "=r"(mstatus)); + mstatus &= ~0x88; + asm volatile ("csrw mstatus, %0" : : "r"(mstatus)); +} diff --git a/include/systick.h b/include/systick.h new file mode 100644 index 0000000..8933a31 --- /dev/null +++ b/include/systick.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +void set_systick(uint64_t systick_value); + +uint64_t get_systick(); + +int systick_interrupt(); -- cgit