This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Problem with spurious interrupt on ARM


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]