mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
割り込み修正。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@102 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
01ca849543
commit
44d00544fa
@ -74,6 +74,8 @@ void osInitInterrupt( void )
|
|||||||
reg_OS_CPUI_PRIO = 15 << REG_OS_CPUI_PRIO_THLD_SHIFT;
|
reg_OS_CPUI_PRIO = 15 << REG_OS_CPUI_PRIO_THLD_SHIFT;
|
||||||
reg_OS_CPUI_BP = HW_CPUIBP_CMP_PRIO_ALL_BITS;
|
reg_OS_CPUI_BP = HW_CPUIBP_CMP_PRIO_ALL_BITS;
|
||||||
reg_OS_CPUI_CNT = REG_OS_CPUI_CNT_E_MASK;
|
reg_OS_CPUI_CNT = REG_OS_CPUI_CNT_E_MASK;
|
||||||
|
|
||||||
|
(void)osEnableInterrupts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -40,8 +40,8 @@ asm void osIrqHandler( void )
|
|||||||
INASM_EXTERN( osIntrTable )
|
INASM_EXTERN( osIntrTable )
|
||||||
|
|
||||||
sub lr, lr, #4 // 復帰アドレス調整
|
sub lr, lr, #4 // 復帰アドレス調整
|
||||||
stmfd sp!, { r0-r3,r12,lr }
|
stmfd sp!, { r0-r4,r12,lr }
|
||||||
stmfd sp!, { lr } // save LR
|
// stmfd sp!, { lr } // save LR
|
||||||
|
|
||||||
// 割り込み要因の判定.
|
// 割り込み要因の判定.
|
||||||
|
|
||||||
@ -55,12 +55,10 @@ asm void osIrqHandler( void )
|
|||||||
|
|
||||||
// get jump vector
|
// get jump vector
|
||||||
ldr r1, =osIntrTable
|
ldr r1, =osIntrTable
|
||||||
ldr r0, [ r1, r0, LSL #2 ]
|
ldr r0, [ r1, r4, LSL #2 ]
|
||||||
|
|
||||||
adr lr, irq_return
|
blx r0 // set return address for thread rescheduling
|
||||||
bx r0 // set return address for thread rescheduling
|
|
||||||
|
|
||||||
irq_return
|
|
||||||
// End of Interrupt Register
|
// End of Interrupt Register
|
||||||
ldr lr, =REG_CPUI_EOI_ADDR
|
ldr lr, =REG_CPUI_EOI_ADDR
|
||||||
str r4, [lr]
|
str r4, [lr]
|
||||||
@ -70,8 +68,10 @@ irq_return
|
|||||||
#endif // BROM_ENABLE_THREAD
|
#endif // BROM_ENABLE_THREAD
|
||||||
|
|
||||||
my_undefined_interrupt_1
|
my_undefined_interrupt_1
|
||||||
ldmfd sp!, { lr }
|
// ldmfd sp!, { lr }
|
||||||
ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address
|
ldmfd sp!, { r0-r4,r12,lr } // return to interrupted address
|
||||||
|
movs pc, lr
|
||||||
|
// subs pc, lr, #4
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BROM_ENABLE_THREAD
|
#ifdef BROM_ENABLE_THREAD
|
||||||
@ -171,8 +171,9 @@ _dont_switched_
|
|||||||
mov r3, #HW_PSR_IRQ_MODE|HW_PSR_IRQ_DISABLE|HW_PSR_ARM_STATE
|
mov r3, #HW_PSR_IRQ_MODE|HW_PSR_IRQ_DISABLE|HW_PSR_ARM_STATE
|
||||||
msr cpsr_c, r3
|
msr cpsr_c, r3
|
||||||
|
|
||||||
ldmfd sp!, { lr }
|
bx lr
|
||||||
ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address
|
// ldmfd sp!, { lr }
|
||||||
|
// ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address
|
||||||
// not reach here
|
// not reach here
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ void osInitTick(void)
|
|||||||
osEnableInterruptID(OSi_TICK_IE_TIMER_ID);
|
osEnableInterruptID(OSi_TICK_IE_TIMER_ID);
|
||||||
|
|
||||||
//---- need to reset
|
//---- need to reset
|
||||||
i_osNeedResetTimer = FALSE;
|
i_osNeedResetTimer = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user