GPIO-Based Unterbrechen von Ressourcen
Treiber für Peripheriegeräte, die Interrupts an GPIO-Pins (Universelle E/A) senden, beziehen GPIO-Interrupts als abstrakte Windows-Interruptressourcen. Kernelmodustreiberframeworktreiber (KMDF) und UMDF-Treiber (User-Mode Driver Framework ) empfangen diese Ressourcen über ihre EvtDevicePrepareHardware-Ereignisrückruffunktionen .
Treiber von Peripheriegeräten, die GPIO-basierte Interruptressourcen verwenden, können Implementierungsdetails auf niedriger Ebene ignorieren, z. B. ob ein Interrupt von einem GPIO-Pin statt von einem Interruptcontroller oder von einem Interrupt-Pin auf einem Prozessorchip generiert wird.
Ein GPIO-basierter Interrupt ist eine Ressource vom Typ CmResourceTypeInterrupt. Die Konfigurationsparameter für diesen Interrupt sind im u.Interrupt-Member der CM_PARTIAL_RESOURCE_DESCRIPTOR-Struktur enthalten, die die Interruptressource beschreibt. Um eine Interruptdienstroutine (ISR) mit einem Interrupt zu verbinden, stellt ein UMDF- oder KMDF-Treiber sowohl die rohen als auch die übersetzten Beschreibungen der Interruptressource in eine Interrupterstellungsmethode bereit.
Der KMDF- oder UMDF-Treiber für ein Peripheriegerät ruft die WdfInterruptCreate-Methode auf, um eine ISR mit dem Interrupt des Geräts zu verbinden. Einer der Eingabeparameter für diese Methode ist ein Zeiger auf eine WDF_INTERRUPT_CONFIG-Struktur , die Konfigurationsinformationen für den Interrupt enthält.
Wenn ein Peripheriegerätetreiber mehr als eine GPIO-Interruptressource verwendet, muss dieser Treiber die Reihenfolge kennen, in der diese Ressourcen in den rohen und übersetzten Ressourcenlisten angezeigt werden, die als Eingabeparameter für die EvtDevicePrepareHardware-Funktion oder die OnPrepareHardware-Methode bereitgestellt werden. Die Ressourcen in diesen Listen werden in der Reihenfolge angezeigt, in der sie in der Plattformfirmware beschrieben sind, die der vom Treiber erwarteten Reihenfolge entsprechen muss.