Hi!
We have seen the following interesting behaviour on a machine that we
are integrating with 4.25. We have a timer that goes off every 20
microseconds. (Yes, micro-, not milli-). It generates an interrupt
that comes in on IRQ 4. We have a scope on the interrupt line and
another on a chip select that we can toggle programatically. We also
have a scope probe on a line that is asserted when the interrupt
routine takes the sample (this causes the IRQ to go low.)
The hardware is from Octagon Systems and has an A/D card and also a
133Mhz Pentium. We have checked that the IRQ coming out of the A/D
matches the IRQ going into the CPU (thus, not a bus contention type of
problem).
Here’s the ineteresting thing… We watch this on the scope. IRQ 4
goes high. About five microseconds later, the interrupt routine reads
the A/D and IRQ 4 goes low. Hm… that’s about in line with QNX’s
“typical interrupt latency” specification for a chip like
this. But… Every now and then, IRQ 4 goes high, and nothing
happens. 20 microseconds goes buy, the timer goes off again, and we
get hozed, having missed a sample from the A/D. Is there hidden
meaning to the word “typically” in the QNX literature?
We have added the appropriate flags to proc32 so that IRQ 4 is the
highest priority interrupt, and we have added the flag to disallow
interrupt nesting; no effect. We have turned off every other device
driver in the system and raised the priority of the process to 29. No
effect. We have changed the timer from 20 microseconds to 30, 40, 50,
… and all this does is make the problem less frequent.
This reminds me of a posting that I read in this group oh, say, six
months ago, where someone had noted that the QNX kernel was
occasionally “going away for a long period of time with interrupts
apparently disabled”. Anyone care to comment on that? Or remember the
posting? Anyone know the “real” (as opposed to typical) maximum
latency?
Thanks
Bill Mahoney
Technical Support, Inc.
Omaha, Nebraska