GPIO-Interrupts

Einige GPIO-Controllergeräte (General Purpose E/O) können ihre GPIO-Pins so konfigurieren, dass sie als Interruptanforderungseingaben funktionieren. Diese Interruptanforderungseingaben werden von Peripheriegeräten gesteuert, die physisch mit den GPIO-Pins verbunden sind. Die Treiber für diese GPIO-Controller können Interruptanforderungen für einzelne GPIO-Pins aktivieren, deaktivieren, maskieren, die Maskierung aufheben und löschen.

Die Unterstützung für GPIO-Interrupts ist optional. Die GPIO-Frameworkerweiterung (GpioClx) erfordert keine GPIO-Controller, um GPIO-Interrupts zu unterstützen.

In diesem Abschnitt

Thema BESCHREIBUNG

Primäre und sekundäre Interrupts

Die GPIO-Interruptbehandlung ist grundsätzlich ein zweistufiger Prozess. Der Interrupt des GPIO-Controllers (General Purpose E/O), der dazu führt, dass die GPIO-Frameworkerweiterung (GpioClx) interrupt service routine (ISR) ausgeführt wird, wird als primärer Interrupt bezeichnet. Diese ISR ordnet den unterbrechenden GPIO-Pin einem globalen System interrupt (GSI) zu und übergibt diesen GSI an die Hardware abstraction Layer (HAL). Die HAL generiert einen sekundären Interrupt , um eine zweite ISR auszuführen, die über diese GSI logisch mit dem GPIO-Pin verbunden ist. Dieser Vorgang wird im Diagramm in der Übersicht über die GPIO-Treiberunterstützung veranschaulicht.

GPIO-basierte Interruptressourcen

Treiber für Peripheriegeräte, die Interrupts an GPIO-Pins (Universelle E/A) senden, beziehen GPIO-Interrupts als abstrakte Windows-Interruptressourcen. Treiber des Kernelmodustreiberframeworks (KMDF) erhalten diese Ressourcen über ihre EvtDevicePrepareHardware-Ereignisrückruffunktionen .

ISRs auf passiver Ebene

Ab Windows 8 können Treiber des Kernelmodustreiberframeworks (KMDF) und des Benutzermodustreiberframeworks (UMDF) optional ihre Interrupt-Dienstroutinen (ISRs) registrieren, um sie auf passiver Ebene auszuführen.

Interruptbezogene Rückrufe

Optional kann der Treiber für einen GPIO-Controller (General Purpose E/O) Unterstützung für GPIO-Interrupts bereitstellen. Zur Unterstützung von GPIO-Interrupts implementiert ein GPIO-Controllertreiber eine Reihe von Rückruffunktionen, um diese Interrupts zu verwalten. Der Treiber enthält Zeiger auf diese Rückruffunktionen im Registrierungspaket, das der Treiber bereitstellt, wenn er sich als Client der GPIO-Frameworkerweiterung (GpioClx) registriert.

Unterbrechen der Synchronisierung für GPIO-Controllertreiber

GPIO-Controllertreiber können die methoden GPIO_CLX_AcquireInterruptLock und GPIO_CLX_ReleaseInterruptLock aufrufen, um Interruptsperren abzurufen und freizugeben, die intern von der GPIO-Frameworkerweiterung (GpioClx) implementiert werden. Treibercode, der unter IRQL = PASSIVE_LEVEL ausgeführt wird, kann diese Methoden aufrufen, um mit der Interruptdienstroutine (ISR) in GpioClx zu synchronisieren. GpioClx widme jeder Pinbank im GPIO-Controller eine separate Interruptsperre.

Aktivieren und Deaktivieren freigegebener GPIO-Interrupts

In einigen Fällen können Unterbrechungsanforderungsleitungen von zwei oder mehr Peripheriegeräten mit demselben GPIO-Pin (General Purpose E/O) verbunden werden. Der GPIO-Pin für eine freigegebene Interruptzeile wird in der Regel für unterbrechungsbedingte Unterbrechungen konfiguriert.

GPIO-Interruptmasken

GPIO-Pins (Universelle E/A), die als Interrupteingaben konfiguriert sind, können maskiert und entlarvt werden, zusätzlich zur Aktivierung und Deaktivierung.