[ECOS] Problem with spurious interrupt on ARM
Morten Laursen
MLA@rtx.dk
Fri Aug 30 03:12:00 GMT 2002
According to the MCU (AT91M40800) data sheet a spurious interrupt can happen
when using edge trigged interupts. I use edge trigged interrupts, because I
want to know how long time the button was pressed.
So (as I understand it) the problem is not, that there is a spurious
interrupt, but that it is somehow handled incorrectly?
Venlig Hilsen / Regards
Morten
--
Morten Laursen, M.Sc.S.E.
RTX Telecom A/S - http://www.rtx.dk/
Direct phone: (+45) 96 32 24 03
> -----Original Message-----
> From: Andrew Lunn [ mailto:andrew.lunn@ascom.ch ]
> Sent: 30. august 2002 11:34
> To: Morten Laursen
> Cc: 'ecos-discuss@sources.redhat.com'
> Subject: Re: [ECOS] Problem with spurious interrupt on ARM
>
>
> Hi
>
> Two things to check:
>
> Hardware problem. Your interrupt controller has caused an interrupt,
> but when the SW reads the interrupt controller register to find out
> what caused the interrupt, the controller does not indicate a
> source. Do you have the correct type of interrupts, ie level vs edge
> triggered? Is the controller configured correctly for this sort of
> interrupt?
>
> Software problem: You have a race condition somewhere, which is
> causing the interrupt to be cleared between the Interrupt happening
> and the SW reading the interrupt controller registers. This could
> happen if rather than one interrupt, you get an interrupt storm.
>
> Do you have de-bounce logic on your switch?
>
> Andrew
>
> On Fri, Aug 30, 2002 at 11:03:20AM +0200, Morten Laursen wrote:
> > Hi,
> >
> > I sometimes receive a spurious interrupt (hal_IRQ_handler() returns
> > CYGNUM_HAL_INTERRUPT_NONE). After that happens my DSR is no
> longer called,
> > although it's dsr_count is 1.
> >
> > More specific what happens is:
> > * I press a button causing an interrupt
> > * the interrupt is reconfigured to happen when the button
> is released.
> > * I release the button
> > * When the button is released I receive a spurious
> interrupt before the
> > button's ISR is called.
> > * The button's ISR is called and returns CYG_ISR_CALL_DSR
> > * The DSR is NOT invoked
> >
> > eCos is configured to ignore spurious interrupts. I have
> tried using both
> > linked lists and fixed-size tables for the DSRs.
> >
> >
> > Any suggestions to solutions would be much appreciated!
> >
> > Venlig Hilsen / Regards
> > Morten
> >
> > --
> > Morten Laursen, M.Sc.S.E.
> > RTX Telecom A/S - http://www.rtx.dk/
> > Direct phone: (+45) 96 32 24 03
> >
> >
> > --
> > Before posting, please read the FAQ:
> http://sources.redhat.com/fom/ecos
> > and search the list archive:
> http://sources.redhat.com/ml/ecos-discuss
> >
>
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss
More information about the Ecos-discuss
mailing list