diff --git a/trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c b/trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c index 28f4eea..4eb2ee0 100644 --- a/trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c +++ b/trunk/bootrom/build/libraries/os/ARM11/os_interrupt.c @@ -74,6 +74,8 @@ void osInitInterrupt( void ) reg_OS_CPUI_PRIO = 15 << REG_OS_CPUI_PRIO_THLD_SHIFT; reg_OS_CPUI_BP = HW_CPUIBP_CMP_PRIO_ALL_BITS; reg_OS_CPUI_CNT = REG_OS_CPUI_CNT_E_MASK; + + (void)osEnableInterrupts(); } } diff --git a/trunk/bootrom/build/libraries/os/ARM11/os_irqHandler.c b/trunk/bootrom/build/libraries/os/ARM11/os_irqHandler.c index 8d46bb6..4ebfa21 100644 --- a/trunk/bootrom/build/libraries/os/ARM11/os_irqHandler.c +++ b/trunk/bootrom/build/libraries/os/ARM11/os_irqHandler.c @@ -40,8 +40,8 @@ asm void osIrqHandler( void ) INASM_EXTERN( osIntrTable ) sub lr, lr, #4 // 復帰アドレス調整 - stmfd sp!, { r0-r3,r12,lr } - stmfd sp!, { lr } // save LR + stmfd sp!, { r0-r4,r12,lr } +// stmfd sp!, { lr } // save LR // 割り込み要因の判定. @@ -55,12 +55,10 @@ asm void osIrqHandler( void ) // get jump vector ldr r1, =osIntrTable - ldr r0, [ r1, r0, LSL #2 ] + ldr r0, [ r1, r4, LSL #2 ] - adr lr, irq_return - bx r0 // set return address for thread rescheduling + blx r0 // set return address for thread rescheduling -irq_return // End of Interrupt Register ldr lr, =REG_CPUI_EOI_ADDR str r4, [lr] @@ -70,8 +68,10 @@ irq_return #endif // BROM_ENABLE_THREAD my_undefined_interrupt_1 - ldmfd sp!, { lr } - ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address +// ldmfd sp!, { lr } + ldmfd sp!, { r0-r4,r12,lr } // return to interrupted address + movs pc, lr +// subs pc, lr, #4 } #ifdef BROM_ENABLE_THREAD @@ -171,8 +171,9 @@ _dont_switched_ mov r3, #HW_PSR_IRQ_MODE|HW_PSR_IRQ_DISABLE|HW_PSR_ARM_STATE msr cpsr_c, r3 - ldmfd sp!, { lr } - ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address + bx lr +// ldmfd sp!, { lr } +// ldmfd sp!, { r0-r3,r12,pc } // return to interrupted address // not reach here diff --git a/trunk/bootrom/build/libraries/os/common/os_tick.c b/trunk/bootrom/build/libraries/os/common/os_tick.c index 7d37200..24c3fe7 100644 --- a/trunk/bootrom/build/libraries/os/common/os_tick.c +++ b/trunk/bootrom/build/libraries/os/common/os_tick.c @@ -94,7 +94,7 @@ void osInitTick(void) osEnableInterruptID(OSi_TICK_IE_TIMER_ID); //---- need to reset - i_osNeedResetTimer = FALSE; + i_osNeedResetTimer = TRUE; } }