diff options
author | Revo <projectrevotpp@hotmail.com> | 2020-05-28 15:05:16 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-28 15:05:16 -0400 |
commit | 3543d7e3d66951e96f4d1bd34f54597f881983fc (patch) | |
tree | 350bb84779b932901dd0a27a540969ab17121b6f /arm9/lib | |
parent | d42cc73852cdb0cc0684bb87aaa6975d06cae02f (diff) | |
parent | 53dd5bc0de0fb2237c57520971a7854e0dde5902 (diff) |
Merge pull request #120 from red031000/master
OS_irqHandler
Diffstat (limited to 'arm9/lib')
-rw-r--r-- | arm9/lib/include/OS_init.h | 1 | ||||
-rw-r--r-- | arm9/lib/include/OS_irqHandler.h | 19 | ||||
-rw-r--r-- | arm9/lib/include/OS_system.h | 1 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 3 | ||||
-rw-r--r-- | arm9/lib/src/OS_interrupt.c | 4 | ||||
-rw-r--r-- | arm9/lib/src/OS_irqHandler.c | 24 | ||||
-rw-r--r-- | arm9/lib/src/OS_system.c | 1 |
7 files changed, 48 insertions, 5 deletions
diff --git a/arm9/lib/include/OS_init.h b/arm9/lib/include/OS_init.h index 40685513..88c696cd 100644 --- a/arm9/lib/include/OS_init.h +++ b/arm9/lib/include/OS_init.h @@ -22,6 +22,7 @@ #include "OS_alloc.h" #include "OS_system.h" #include "OS_terminate_proc.h" +#include "OS_irqHandler.h" #include "OS_interrupt.h" #include "OS_reset.h" #include "OS_spinLock.h" diff --git a/arm9/lib/include/OS_irqHandler.h b/arm9/lib/include/OS_irqHandler.h new file mode 100644 index 00000000..17bde1c9 --- /dev/null +++ b/arm9/lib/include/OS_irqHandler.h @@ -0,0 +1,19 @@ +#ifndef POKEDIAMOND_OS_IRQHANDLER_H +#define POKEDIAMOND_OS_IRQHANDLER_H + +#include "consts.h" +#include "OS_interrupt.h" + +static inline void OS_ClearIrqCheckFlag(OSIrqMask intr) +{ + *(vu32 *)HW_INTR_CHECK_BUF &= (u32)~intr; +} + +static inline OSIrqMask OS_GetIrqCheckFlag(void) +{ + return *(OSIrqMask *)HW_INTR_CHECK_BUF; +} + +void OS_WaitIrq(BOOL param1, u32 param2); + +#endif //POKEDIAMOND_OS_IRQHANDLER_H diff --git a/arm9/lib/include/OS_system.h b/arm9/lib/include/OS_system.h index f71c6f98..6e156f9d 100644 --- a/arm9/lib/include/OS_system.h +++ b/arm9/lib/include/OS_system.h @@ -35,6 +35,5 @@ OSIntrMode OS_GetCpsrIrq(void); OSProcMode OS_GetProcMode(void); void OS_SpinWait(void); void OS_WaitVBlankIntr(void); -void OS_WaitIrq(BOOL, u32); #endif //POKEDIAMOND_OS_SYSTEM_H diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index 65b93e1e..8eb3f623 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -22,6 +22,9 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_DTCM ((u32)SDK_AUTOLOAD_DTCM_START) #define HW_DTCM_SIZE 0x00004000 +#define HW_DTCM_SYSRV (HW_DTCM + 0x00003fc0) +#define HW_INTR_CHECK_BUF (HW_DTCM_SYSRV + 0x38) + #define HW_CARD_ROM_HEADER_SIZE 0x00000160 #define HW_DOWNLOAD_PARAMETER_SIZE 0x00000020 diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c index 4692fd54..c7c0704d 100644 --- a/arm9/lib/src/OS_interrupt.c +++ b/arm9/lib/src/OS_interrupt.c @@ -1,7 +1,3 @@ -// -// Created by red031000 on 2020-05-07. -// - #include "consts.h" #include "function_target.h" #include "OS_interrupt.h" diff --git a/arm9/lib/src/OS_irqHandler.c b/arm9/lib/src/OS_irqHandler.c new file mode 100644 index 00000000..31f4453e --- /dev/null +++ b/arm9/lib/src/OS_irqHandler.c @@ -0,0 +1,24 @@ +#include "function_target.h" +#include "OS_irqHandler.h" +#include "OS_system.h" +#include "OS_thread.h" +#include "sections.h" + +#pragma section DTCM begin +OSThreadQueue OSi_IrqThreadQueue = { NULL, NULL }; +#pragma section DTCM end + +ARM_FUNC void OS_WaitIrq(BOOL clear, OSIrqMask irqFlags) +{ + OSIntrMode lastIntrMode = OS_DisableInterrupts(); + if (clear) + { + OS_ClearIrqCheckFlag(irqFlags); + } + (void)OS_RestoreInterrupts(lastIntrMode); + + while (!(OS_GetIrqCheckFlag() & irqFlags)) + { + OS_SleepThread(&OSi_IrqThreadQueue); + } +} diff --git a/arm9/lib/src/OS_system.c b/arm9/lib/src/OS_system.c index 1d257679..b703fc38 100644 --- a/arm9/lib/src/OS_system.c +++ b/arm9/lib/src/OS_system.c @@ -3,6 +3,7 @@ // #include "OS_system.h" +#include "OS_irqHandler.h" #include "syscall.h" ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void) { |