hardwareinterrupt

This commit is contained in:
angie 2023-09-03 16:01:04 -03:00
parent ec1e7a0f5e
commit d3081239d3
4 changed files with 11 additions and 12 deletions

View File

@ -40,8 +40,8 @@ OSIntMask osSetIntMask(OSIntMask im);
// Internal
void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg);
void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg);
void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void), void* stackEnd);
void __osGetHWIntrRoutine(OSHWIntr interrupt, s32 (**handler)(void), void** stackEnd);
void __osSetGlobalIntMask(OSHWIntr mask);
void __osResetGlobalIntMask(OSHWIntr mask);

View File

@ -5,10 +5,9 @@
#include "os_message.h"
#include "os_pi.h"
typedef struct __osHwInt {
/* 0x00 */ OSMesgQueue* queue;
/* 0x04 */ OSMesg msg;
/* 0x00 */ s32 (*handler)(void);
/* 0x04 */ void* stackEnd;
} __osHwInt; // size = 0x08
#endif

View File

@ -1,7 +1,7 @@
#include "PR/os_internal.h"
#include "PR/osint.h"
void __osGetHWIntrRoutine(OSHWIntr interrupt, OSMesgQueue** outQueue, OSMesg* outMsg) {
*outQueue = __osHwIntTable[interrupt].queue;
*outMsg = __osHwIntTable[interrupt].msg;
void __osGetHWIntrRoutine(OSHWIntr interrupt, s32 (**handler)(void), void** stackEnd) {
*handler = __osHwIntTable[interrupt].handler;
*stackEnd = __osHwIntTable[interrupt].stackEnd;
}

View File

@ -1,11 +1,11 @@
#include "global.h"
#include "PR/os_internal.h"
#include "PR/osint.h"
void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg) {
void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void), void* stackEnd) {
register s32 prevInt = __osDisableInt();
__osHwIntTable[idx].queue = queue;
__osHwIntTable[idx].msg = msg;
__osHwIntTable[interrupt].handler = handler;
__osHwIntTable[interrupt].stackEnd = stackEnd;
__osRestoreInt(prevInt);
}