Mail Archives: djgpp/2002/10/10/18:31:28
> We can have multiple identical PCI boards plugged into our
> system, and they may have to share interrupts with other
> hardware (or each other), so chaining seems to be the easiest
> solution. We can work around this if need be, but I think we
> have worked out most of our problems (read on).
As long as it works, and you don't miss interrupts or overrun
stacks, fine. If you need to run at higher frequencies or on
lower end hardware, consider only chaining if the interrupt
isn't one you handled.
> > Ouch. Try removing the enable (and the disable).
> > The enable would let a
> > second interrupt hit the wrapper before the first one was clear.
> Bingo! This appears to be the biggest source of our problems. We
> removed these lines from the handler, and things improved
> dramatically, although I'm not completely sure I understand why.
> Doesn't the interrupt controller prevent "simultaneous" interrupts
> anyway?
This happens after you send the EOI to the controller. There are
several dozen instructions that need to be executed before you get
out of your routine (and the wrapper) after the STI happens. If a
second interrupt is pending then it would immediately trigger.
> Thanks once more,
Glad to help. We still aren't exactly sure what the Int 0x22 is
and how it happens, but avoiding it is much better anyway.
It may be some subtle bug in the wrappers, or in CWSDPMI if bad
things happen on the interrupt stack.
- Raw text -