diff options
author | red031000 <rubenru09@aol.com> | 2020-05-08 01:12:38 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-05-08 01:12:38 +0100 |
commit | 4d444cabe0a241afd7d12e565c6a32f866b260bd (patch) | |
tree | d3a3270ca2c2f3895378d1681350bc7636ed0c10 | |
parent | dc5e4e927b1f87f69246af218e462bc09c87dda6 (diff) |
match OSi_EnterDmaCallback
-rw-r--r-- | arm9/asm/OS_interrupt_asm.s | 23 | ||||
-rw-r--r-- | arm9/lib/include/OS_interrupt.h | 1 | ||||
-rw-r--r-- | arm9/lib/src/OS_interrupt.c | 10 |
3 files changed, 11 insertions, 23 deletions
diff --git a/arm9/asm/OS_interrupt_asm.s b/arm9/asm/OS_interrupt_asm.s index d60f0175..ea17cf8d 100644 --- a/arm9/asm/OS_interrupt_asm.s +++ b/arm9/asm/OS_interrupt_asm.s @@ -116,26 +116,3 @@ OSi_EnterTimerCallback: ; 0x020C9EC8 _020C9F08: .word OSi_IrqCallbackInfo+0x30 _020C9F0C: .word OSi_IrqCallbackInfo+0x38 _020C9F10: .word OSi_IrqCallbackInfo+0x34 - - arm_func_start OSi_EnterDmaCallback -OSi_EnterDmaCallback: ; 0x020C9F14 - stmdb sp!, {r4-r6,lr} - mov r3, #0xc - mul r6, r0, r3 - ldr ip, _020C9F54 ; =OSi_IrqCallbackInfo - add r4, r0, #0x8 - mov r5, #0x1 - mov r0, r5, lsl r4 - ldr r3, _020C9F58 ; =0x021D3424 - str r1, [r12, r6] - str r2, [r3, r6] - bl OS_EnableIrqMask - and r1, r0, r5, lsl r4 - ldr r0, _020C9F5C ; =0x021D3420 - str r1, [r0, r6] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9F54: .word OSi_IrqCallbackInfo -_020C9F58: .word OSi_IrqCallbackInfo + 8 -_020C9F5C: .word OSi_IrqCallbackInfo + 4 diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index acac12aa..b8425b4e 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -24,5 +24,6 @@ extern OSIrqCallbackInfo OSi_IrqCallbackInfo[7+1]; void OS_InitIrqTable(); void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function); OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit); +void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg); #endif //POKEDIAMOND_OS_INTERRUPT_H diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c index d45f46cf..f7a6d005 100644 --- a/arm9/lib/src/OS_interrupt.c +++ b/arm9/lib/src/OS_interrupt.c @@ -10,6 +10,7 @@ #pragma optimize_for_size on extern OSThreadQueue OSi_IrqThreadQueue; +extern OSIrqMask OS_EnableIrqMask(OSIrqMask intr); ARM_FUNC void OS_InitIrqTable() { OS_InitThreadQueue(&OSi_IrqThreadQueue); @@ -67,3 +68,12 @@ ARM_FUNC OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit) { } while (i < 0x16); return 0; } + +ARM_FUNC void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg) +{ + OSIrqMask mask = 1UL << (dmaNo + 8); + OSi_IrqCallbackInfo[dmaNo].func = callback; + OSi_IrqCallbackInfo[dmaNo].arg = arg; + + OSi_IrqCallbackInfo[dmaNo].enable = OS_EnableIrqMask(mask) & mask; +} |