On 1/27/00 2:07 PM David Schleef <[EMAIL PROTECTED]> wrote:


>On Thu, Jan 27, 2000 at 11:56:32AM +0100, [EMAIL PROTECTED] wrote:
>> I have a home made intelligent, Z80 based intelligent I/O card.
>> In the test configuration Z80 asks an interrupt
>> from the main 486DX4 in every 5 ms. In the PC a short
>> interrupt routine increments a counter only and sends
>> an acknowledge to the Z80.
>> Z80 maintains some statistical counters as number of IT
>> requests and number of acks.
>> A periodic task on the PC reads these counters in every
>> second and display them.
>> 
>> I can see, that a lot of interrups remains undetected by 486.
>> I lost 0-20 IRQs within a 10 s interval. The actual number
>> depends on the rate of IT requests, the IRQ pulse length
>> (tipically 3+ microsec) and the IRQ number.
>
>
>This is the problem.  ISA IRQs are level-triggered, so if the
>IRQ disappears before the processor/interrupt controller decide
>that it's going to get handled, it gets lost.  There's also
>a race condition in the 8259A that causes the controller to
>"forget" which interrupt happened, if the IRQ line changes at
>the right time during CPU handshaking.
>
>Basically, you need to find an ISA spec.  ISA IRQs need to be
>activated, and kept activated until the interrupt routine
>acknowledges them.
>

I am not sure if this is relavant but the Intel/Microsoft PC99 spec states that
ISA devices sharing IRQs must meet the following requirements:

    IRQ pulled high by system board
    IRQ never driven high by device
    To signal an interrupt, devices must pull the IRQ line low for a minimum    
 of 100 nanoseconds and then release it. The interrupt is signaled by the    
rising edge that occurs as a result of the pull-up on the IRQ line.

I have just written a driver for a Computer Boards Int-32 counter/timer card. I
have it programmed to generate an interrupt at 60Hz which it does by using the
count down pulse (one clock tick wide: 400 nanoseconds) to drive the IRQ low for
400ns. I am experiencing an occasional lost interrupt on a basically idle system
.

--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/

Reply via email to