PCI uses level sensitive interrupts, which must be acknowledged and cleared in
the kernel immediately when they are received. Therefore, WinDriver requires
you to define an interrupt status register, which should be read/written in
order to clear the interrupt. This is a precautionary measurement, because a
level sensitive interrupt that is not acknowledged can hang your PC.
To listen to PCI interrupts with the DriverWizard, follow these steps:
- Define the interrupt status register:
From the DriverWizard's 'Registers' tab, select 'New' and define
a new register. You should specify the register's name, location (i.e.,
offset into one of the BARs), size and access mode (read/write).
The interrupt acknowledgment information is hardware specific. You
should therefore review your hardware's specification for the relevant
data to set for your specific device.
- Assign the interrupt status register to your card's interrupt:
After defining the interrupt status register, go back to the
'Interrupts' tab and assign the interrupt that you have defined
to the card's interrupt:
Select your interrupt and click on the 'Edit' button to display the
'Interrupt Information' dialog box. Select the register you have
defined from the drop-down list in the 'Access Register' box and
fill-in the additional information required for acknowledging the
interrupt — i.e., read/write mode and the data (if any) to be
written to the status register in order to acknowledge and clear the
interrupt. Beginning with version 5.2.0 of WinDriver, you can define
several commands for execution upon an interrupt, by simply clicking
the 'More' button in the 'Interrupt Information' window.
You should also verify that the interrupt is defined as "Leve Sensitive" and that
the "Shared" box is checked (since PCI interrupts should generally be shared).
(This issue is also explained when clicking the Help button in the
Interrupt Information dialog box.)
You can now try to listen to the interrupts on your card with the DriverWizard,
by clicking the 'Listen to Interrupts' button in the 'Interrupts' tab
and then generating interrupts in the hardware. The interrupts that will be
received will be logged in the "Log" window. To stop listening to the
interrupts, click the 'Stop Listen to Interrupts' button in the 'Interrupts'
tab.
For a detailed explanation regarding handling PCI interrupts with WinDriver,
please refer to the
WinDriver User's Manual.
|