Mercurial > ecos
diff packages/hal/arm/arch/current/src/vectors.S @ 38:e7ba79f6d3a8 ecos-sw-1999-09-23
Merge from eCos master repository on 1999-09-23-20:10:25-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 Sep 1999 19:52:27 +0000 |
| parents | e97d78785e2d |
| children | a3cc6665b684 |
line wrap: on
line diff
--- a/packages/hal/arm/arch/current/src/vectors.S +++ b/packages/hal/arm/arch/current/src/vectors.S @@ -480,7 +480,12 @@ call_exception_handler: mrs r0,cpsr // move back to IRQ mode bic r0,r0,#CPSR_MODE_BITS - orr r0,r0,#CPSR_IRQ_MODE + orr r0,r0,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE + msr cpsr,r0 + nop + nop + + orr r0,r0,#CPSR_IRQ_MODE msr cpsr,r0 mov sp,ip @@ -578,6 +583,10 @@ 10: #endif mov r0,v1 // vector # +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS + cmp r0,#0 // ignore spurious interrupts + beq spurious_IRQ +#endif // CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS ldr r1,.hal_interrupt_data ldr r1,[r1,v1,lsl #2] // handler data ldr r2,.hal_interrupt_handlers @@ -588,6 +597,10 @@ 10: mov lr,pc // invoke handler (call indirect mov pc,v3 // thru v3) +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS +spurious_IRQ: +#endif // CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS + #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK // If we are returning from the last nested interrupt, move back // to the thread stack. interrupt_end() must be called on the @@ -620,6 +633,11 @@ 10: ldr sp,[sp,#armreg_sp] mrs r0,cpsr // move back to IRQ mode + orr r0,r0,#CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE + msr cpsr,r0 + nop + nop + bic r0,r0,#CPSR_MODE_BITS orr r0,r0,#CPSR_IRQ_MODE msr cpsr,r0
