diff options
author | Cleverking2003 <30466983+Cleverking2003@users.noreply.github.com> | 2020-06-12 18:25:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-12 18:25:19 +0300 |
commit | e672765bfe4b9272e91309872b01730dc3b6d3f7 (patch) | |
tree | c89b2718080dcc86486a9b042030a0ca2d9f7c5f /arm9/lib/src/OS_irqTable.c | |
parent | e2d7f9f796889087a3da50f7eeb2383731ca3262 (diff) | |
parent | 9d8999e6ddb6e930419de6aca71983dea7fc8f75 (diff) |
Merge pull request #159 from red031000/master
arm9 OS_irqTable
Diffstat (limited to 'arm9/lib/src/OS_irqTable.c')
-rw-r--r-- | arm9/lib/src/OS_irqTable.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/arm9/lib/src/OS_irqTable.c b/arm9/lib/src/OS_irqTable.c new file mode 100644 index 00000000..cc2a3a55 --- /dev/null +++ b/arm9/lib/src/OS_irqTable.c @@ -0,0 +1,110 @@ +#include "function_target.h" +#include "sections.h" +#include "OS_irqTable.h" + +#pragma section DTCM begin +OSIrqFunction OS_IRQTable[22] = { + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OSi_IrqTimer0, + OSi_IrqTimer1, + OSi_IrqTimer2, + OSi_IrqTimer3, + OS_IrqDummy, + OSi_IrqDma0, + OSi_IrqDma1, + OSi_IrqDma2, + OSi_IrqDma3, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy, + OS_IrqDummy +}; +#pragma section DTCM end + +OSIrqCallbackInfo OSi_IrqCallbackInfo[8] = { + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, + {NULL, 0, 0}, +}; + +static u16 OSi_IrqCallbackInfoIndex[8] = { + 8, 9, 10, 11, 3, 4, 5, 6 +}; + +ARM_FUNC void OS_IrqDummy(void) +{ + //noop +} + +ARM_FUNC void OSi_IrqCallback(s32 index) +{ + OSIrqMask mask = (1UL << OSi_IrqCallbackInfoIndex[index]); + void (*callback)(void *) = OSi_IrqCallbackInfo[index].func; + + OSi_IrqCallbackInfo[index].func = NULL; + + if (callback) + { + (callback)(OSi_IrqCallbackInfo[index].arg); + } + + OS_SetIrqCheckFlag(mask); + + if (!OSi_IrqCallbackInfo[index].enable) + { + (void)OS_DisableIrqMask(mask); + } +} + +ARM_FUNC void OSi_IrqDma0(void) +{ + OSi_IrqCallback(0); +} + +ARM_FUNC void OSi_IrqDma1(void) +{ + OSi_IrqCallback(1); +} + +ARM_FUNC void OSi_IrqDma2(void) +{ + OSi_IrqCallback(2); +} + +ARM_FUNC void OSi_IrqDma3(void) +{ + OSi_IrqCallback(3); +} + +ARM_FUNC void OSi_IrqTimer0(void) +{ + OSi_IrqCallback(4); +} + +ARM_FUNC void OSi_IrqTimer1(void) +{ + OSi_IrqCallback(5); +} + +ARM_FUNC void OSi_IrqTimer2(void) +{ + OSi_IrqCallback(6); +} + +ARM_FUNC void OSi_IrqTimer3(void) +{ + OSi_IrqCallback(7); +} |