Technical Document #105

Technical Document #105
Listening to PCI interrupts with the DriverWizard

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.