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 that will 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: In 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 Level Sensitive and that the Shared box is checked (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, refer to the WinDriver PCI User's Manual.