Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This Application Note explaines, how the Interrupt Number is assigned by the System and how to search for a free interrupt number in case of shared IRQ.

Interrupt and CIFX Device Driver (INtime)

Erkennt der Treiber eine CIFX-Karte, so wird diese in die interne Verwaltungsstruktur auf genommen und dann am Ende der Initialisierung wird nach den Settings aus der Registry gefragt.

Damit der Interrupt auch eingeschaltet werden kann, muß die Hardware auch einen Interrupt zugeordnet bekommen haben.

Hierbei gilt:

...

MSI gibt es nur bei PCIe Hardware und unsere Karten unterstützen dies leider nicht.

Durch die Konfiguration unserer Karte und den Information aus den INF-Dateien zum Installieren der Harware, bekommt das Betriebssystem mitgeteilt das die Hardware kein MSI unterstützt und somit auch keine MSI Interrupt-Nummer erhält.

Also sind hier nur 0 oder Interrupt-Nummer von 1 bis 19 von Bedeutung.
 

Zu den Informationen von der Hardware liest der Treiber auch noch die User-Settings zu jeder Karte aus der Registry aus, um zu entscheiden ob der Interrupt eingeschaltet werden soll oder nicht.

Activate Interrupt mode

Für das interne Handling von Interrupten ist dann noch ein sog. Interrupt-Thread erforderlich und der Interrupt muss am System angemeldet werden.

Sollte hier ein Fehler auftreten dann wird, obwohl der Interrupt in der Registry "endabled" wurde, das interne Interrupt-Flag gelöscht und damit das Interrupt-Handling "disabled".

Das Ergebnis sieht man dann in der "BOARD_INFORMATION" Struktur,in der das Element "bIrqEnabled" auf 0 sitzt.

Eigentlich besitzt unser Treiber eine TRACE-Ausgabe und diese sollte bei einem internen Fehler eine entsprechende Fehlerausgabe generieren.

Physical Interrupt Number

...

Aber es kann dann auch passieren, das beim nächsten Start, das System einen anderes Gerät so umkonfiguriert das es dann wieder ein Interrupt-sharing gibt.

Interrupt and CIFX Device Driver (INtime)

If the driver identifies a CIFX Card, the CIFX Card will be integrated to its administrative structure.

At the end of the initialisation, the settings from the registry are requested.


The Registry Entry with the requested settings is saved in the following path:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cifXDrv\DeviceConfig\(Article_Number)\(Serial_Number)

or: Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cifXDrv\DeviceConfig\Slot\(Slot_Number)

Image Added

Activate Interrupt Mode

For the interrupt to be enabled, there must be an Interrupt assigned to the Hardware.

the following applies here:

  • Interrupt Number 0 = no Interrupt
  • Interrupt Number > 0 => Phsical Interrupt Number (Legacy Interrupt : 1 - 19)
  • Interrupt Number < 0 => Message based Interrupt Number (MSI)

MSI is not supported by Hilscher CIFX Cards.

Due to the configuration and the information from the INF files for installing the hardware, the operating system is informed that the hardware does not support MSI and therefore does not receive an MSI interrupt number.

Therefore only 0 or interrupt numbers from 1 to 19 are important here.

 

Zu den Informationen von der Hardware liest der Treiber auch noch die User-Settings zu jeder Karte aus der Registry aus, um zu entscheiden ob der Interrupt eingeschaltet werden soll oder nicht.


For the Handling of the Interrupt, a so called Interrupt Thread is needed and the Interrupt needs to be registered to the system.

If an error occurs during this process, although the interrupt was "endabled" in the registry, the internal interrupt flag is deleted and the interrupt handling is "disabled".

The result can be seen in the "Board information" structure, in which "bIrqEnabled" is set to 0.

For more informations about the "Board information" structure, please see page 18 of the following manual: cifX API (Revision 9)