All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] Problems with level triggered Interrupts on ARM
@ 2008-07-07 11:06 Stephan Adler
  2008-07-07 12:14 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 2+ messages in thread
From: Stephan Adler @ 2008-07-07 11:06 UTC (permalink / raw)
  To: xenomai

Dear list!

I have a problem in understanding how Xenomai handles level triggered 
Interrupts.

I am using an ARM AT91RM9200 with the native Xenomai (2.4.2) skin.

I try to implement the handling of a network protocol on that platform. 
Therefore a network controller is used which is directly connected to 
the Arm.
This network controller has one level-trigerred interrupt line. The line 
is used to signal when a packet has arrived in the controller. There are 
two types of messages - a control-type and a data-type. The interrupt is 
shared for both packet types.

When a packet arrives the interrupt line is pulled to a low-level until 
the Arm reads a certain register depending on the packet-type. A problem 
occurs when - while handling a data-message - a control-message is 
received by the controller. The interrupt line will stay down after the 
data-packet is handled until I handle the control-message also.

Well - as I am using a level triggered interrupt I'd expect Xenomai to 
jump over the rt_intr_wait() instruction until the level of the 
interrupt rises again. But that actually doesn't happen. Indeed Xenomai 
just counts the interrupt whenever an new edge of the interrupt signal 
occurs.

I searched this list for an explanation of that behavior and found these 
two messages:

https://mail.gna.org/public/xenomai-help/2006-06/msg00078.html
https://mail.gna.org/public/xenomai-help/2008-05/msg00263.html

When I understand both posts correctly, I assume the following behavior 
of the Arm vs. Xenomai:

- the ARM sends an hardware interrupt to Xenomai each an etch occurs in 
the signal. This should be interpreted as an "interrupt start" and 
"interrupt end" event for a level triggered interrupt.

- Xenomai does not interpret both events this way, but just counts each 
event as single interrupt event. - When the "interrupt end" event does 
not occur an the level stays low, Xenomai will step over rt_intr_wait() 
for one time - and not again - although the level triggered interrupt is 
still active.

My question is now wether I understood this behavior correctly - or 
wether I am doing something wrong. I could work around that problem by 
myself by just counting the interrupts - but that would not be very 
satisfying.

I also read that there might be some way to work around that issue by 
using rt_intr_enable() - if this is the case - how to do so?

Thanks a lot
Stephan Adler

-- 
Stephan Adler

imc Meßsysteme GmbH


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-07-07 12:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-07 11:06 [Xenomai-help] Problems with level triggered Interrupts on ARM Stephan Adler
2008-07-07 12:14 ` Gilles Chanteperdrix

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.