aboutsummaryrefslogtreecommitdiff
path: root/src/systick.c
diff options
context:
space:
mode:
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);
+}