Network Card User Manual

Acknowledging Interrupts (Acking)
4-6
4.3 Acknowledging Interrupts (Acking)
The ThunderLAN controllers have been designed to minimize the code neces-
sary to acknowledge interrupts. This is accomplished by matching the
HOST_INT register’s bits to the corresponding bits in the HOST_CMD regis-
ter. Also, the HOST_INT’s two LSBs are set to 0 so that it forms a table-offset
vector, which can be used in a jump table. This allows for quick branching to
the appropriate interrupt service routine.
To acknowledge interrupts:
Disable all interrupts.
Create a jump vector from the value read in HOST_INT.
Use a jump table or a conditional branch structure to branch to the ISR.
Execute the appropriate commands for the particular interrupt.
Load the Ack_Count register with the number of interrupts to be acknowl-
edged. This is useful if several EOF interrupts are acknowledged at once.
Write to
HOST_CMD. You may assert the GO bit (Ack and GO com-
mands), if desired.
Interrupts can be disabled by writing to the HOST_INT register. One quick and
easy way of doing this is by writing the contents of HOST_INT back after read-
ing it at the start of the interrupt routine.
A jump table contains the starting address of the individual interrupt routines.
Offsets to this table can be easily created from the HOST_INT
vector read. It
may be necessary to shift the vector read in order to factor out bits 1 and 0
(They are read as 0 always). Using this table or a conditional branching struc-
ture, the appropriate jump to the interrupt routine is easy to find.
The interrupt routine that is branched to performs the commands for the inter-
rupt call. In some cases, this involves loading Ack_Count with a value greater
than 1. This is particularly true when acknowledging Tx EOF with the Ld_Thr
register loaded.
To acknowledge the interrupt, write the HOST_INT vector into HOST_CMD.
The bit values in HOST_INT have a one-to-one correspondence with
HOST_CMD. This simplifies the driver code and saves programming time. In-
terrupts should be reenabled when exiting the interrupt routine. Acknowledg-
ing interrupts to HOST_INT achieves this goal.