aboutsummaryrefslogtreecommitdiff
path: root/src/systick.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-12-04 00:20:36 -0700
committerJosh Rahm <joshuarahm@gmail.com>2024-12-04 00:20:36 -0700
commitd6d04862de9126d0930ae1f4b95ff6077c6eda63 (patch)
treee5266c4017d41b1e77be8bbefa8abafb90fa1504 /src/systick.c
parent47885d62b689bececb58b7bf9479a5c1ff1c9b5c (diff)
downloadch573-d6d04862de9126d0930ae1f4b95ff6077c6eda63.tar.gz
ch573-d6d04862de9126d0930ae1f4b95ff6077c6eda63.tar.bz2
ch573-d6d04862de9126d0930ae1f4b95ff6077c6eda63.zip
Basic interrupts are working.
Diffstat (limited to 'src/systick.c')
-rw-r--r--src/systick.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/systick.c b/src/systick.c
new file mode 100644
index 0000000..506f6df
--- /dev/null
+++ b/src/systick.c
@@ -0,0 +1,34 @@
+#include "systick.h"
+
+#include <stdio.h>
+
+#include "ch573/systick.h"
+#include "isr_vector.h"
+
+#define SYSTICK_I CH573_SYSTICK__SYSTICK_T_INTF
+#define SYSTICK ch573_systick__systick
+
+void set_systick(uint64_t systick)
+{
+ SYSTICK_I.reload.set(SYSTICK, systick);
+ SYSTICK_I.cfg.st_reload.set(SYSTICK, 1);
+ SYSTICK_I.cfg.interrupt_enable.set(SYSTICK, 1);
+
+ SYSTICK_I.cfg.enabled.set(SYSTICK, ENABLED);
+}
+
+uint64_t get_systick()
+{
+ return ((uint64_t)SYSTICK_I.count_high.get(SYSTICK) << 32) |
+ SYSTICK_I.count_low.get(SYSTICK);
+}
+
+int systick_interrupt()
+{
+ return SYSTICK_I.counter_interrupt_flag.get(SYSTICK);
+}
+
+IRQ(systick)
+{
+ SYSTICK_I.counter_interrupt_flag.set(SYSTICK, 0);
+}