diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-12-04 00:20:36 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-12-04 00:20:36 -0700 |
commit | d6d04862de9126d0930ae1f4b95ff6077c6eda63 (patch) | |
tree | e5266c4017d41b1e77be8bbefa8abafb90fa1504 /src/systick.c | |
parent | 47885d62b689bececb58b7bf9479a5c1ff1c9b5c (diff) | |
download | ch573-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.c | 34 |
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); +} |