# HG changeset patch # User nickg # Date 1067364547 0 # Node ID 564441705fa6eb2c536738d89523086460f5741c # Parent 8758da1a02786db7288bcfea8905c1a2821b7823 2003-10-23 Thomas Koeller * src/at91_misc.c: Fixed recognition of spurious interrupts. diff --git a/packages/hal/arm/at91/var/current/ChangeLog b/packages/hal/arm/at91/var/current/ChangeLog --- a/packages/hal/arm/at91/var/current/ChangeLog +++ b/packages/hal/arm/at91/var/current/ChangeLog @@ -1,3 +1,8 @@ +2003-10-23 Thomas Koeller + + * src/at91_misc.c: Fixed recognition of spurious + interrupts. + 2003-08-21 Thomas Koeller * include/var_io.h: diff --git a/packages/hal/arm/at91/var/current/src/at91_misc.c b/packages/hal/arm/at91/var/current/src/at91_misc.c --- a/packages/hal/arm/at91/var/current/src/at91_misc.c +++ b/packages/hal/arm/at91/var/current/src/at91_misc.c @@ -184,6 +184,10 @@ int hal_IRQ_handler(void) HAL_READ_UINT32(AT91_AIC+AT91_AIC_IVR, ivr); HAL_READ_UINT32(AT91_AIC+AT91_AIC_ISR, irq_num); + + // No valid interrrupt source, treat as spurious interrupt + if (irq_num < CYGNUM_HAL_ISR_MIN || irq_num > CYGNUM_HAL_ISR_MAX) + irq_num = CYGNUM_HAL_INTERRUPT_NONE; return irq_num; } @@ -210,9 +214,8 @@ void hal_interrupt_unmask(int vector) void hal_interrupt_acknowledge(int vector) { - CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && - vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); - + // No check for valid vector here! Spurious interrupts + // must be acknowledged, too. HAL_WRITE_UINT32(AT91_AIC+AT91_AIC_EOI, 0xFFFFFFFF); }