aboutsummaryrefslogtreecommitdiffstats
path: root/src/hc32f460/interrupts.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hc32f460/interrupts.c')
-rw-r--r--src/hc32f460/interrupts.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/hc32f460/interrupts.c b/src/hc32f460/interrupts.c
new file mode 100644
index 00000000..fb93648f
--- /dev/null
+++ b/src/hc32f460/interrupts.c
@@ -0,0 +1,29 @@
+// Interrupt support for HC32F460
+// The library interrupt support is huge and redefines systick
+//
+// Copyright (C) 2022 Steven Gotthardt <gotthardt@gmail.com>
+//
+// This file may be distributed under the terms of the GNU GPLv3 license.
+
+#include "hc32f460.h"
+
+#define IRQ_PRIORITY_DEFAULT 15u
+
+/* the interrupts on the hc32f460 can be 're-assigned'
+ The author can choose the irqType (IRQ000_Handler, etc...)
+ that the source (irqSrc) triggers
+ */
+
+void IrqRegistration(en_int_src_t irqSrc, IRQn_Type irqType)
+{
+ stc_intc_sel_field_t *stcIntSel = (stc_intc_sel_field_t *)
+ ((uint32_t)(&M4_INTC->SEL0) + (4u * irqType));
+
+ // what is the source of the selected interrupt? (USART, etc...)
+ stcIntSel->INTSEL = irqSrc;
+
+ // set priority and enable
+ NVIC_SetPriority(irqType, IRQ_PRIORITY_DEFAULT);
+ NVIC_ClearPendingIRQ(irqType);
+ NVIC_EnableIRQ(irqType);
+}