Tomas Kalibera wrote: > Hi, > > I am having problems with lost serial interrupts. Could you please > explain to me why this happens ? I am probably missing something > regarding scheduling in Xenomai... > I prepared a program that triggers the problem, at least on my system. > > Thanks, > > Tomas > > The program works on my system as follows: > > 1. I run the program, it prints > > In interrupt, LStatus: 96 > In interrupt, read char, LStatus: 96 > > [which means that it received a serial interrupt, because the > transmitter receiver is empty] > > 2. I send a single character to the program over serial line > > 3. the program wakes up (10 seconds after (1)) > > 4. the program prints > > I-NFO irq=4 hits=1 > PIC-ISR:0 PIC-IRR:0 PIC-IMR:128 UART-IIR:4 UART-LSR:97 UART-MSR:176 > > [which means the interrupt at Xenomai level hit only once, although it > should have twice, second time because of the received character > these too lines that repeat indefinitely, the interrupt not coming. > although interrupts are enabled at PIC level] > > I use the "XT-PIC-XT" (8259A) interrupt controller. As far as I know, > Linux sets up the controller to "edge triggering", but uses > "handle_level_irq" for it. When received by Xenomai, the interrupt is > masked and acked at PIC level ( "ack" means EOI at 8259A). When the > interrupt handling in the program finishes, it unmasks the interrupt. I > verified that my 8259A has a latch that can detect the UART interrupt > even if masked, so that when unmasked again, it can be delivered.
Try to pass I_EDGE to rt_intr_create. The UART IRQs are edge-triggered, so you have to enable the appropriate handling at kernel IRQ handler level. Jan
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
