Freigeben über


GPIO-Unterbrechungen

Einige allgemeine I/O-Controllergeräte (GPIO) können ihre GPIO-Pins so konfigurieren, dass sie als Interrupt-Anforderungseingaben 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 Unterbrechungsanforderungen für einzelne GPIO-Pins aktivieren, deaktivieren, maskieren, entsperren und löschen.

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

In diesem Abschnitt

Thema BESCHREIBUNG

Primäre und sekundäre Unterbrechungen

GPIO-Unterbrechungsbehandlung ist inhärent ein zweistufiger Prozess. Der Interrupt des General-Purpose-IO-Controllers (GPIO), der bewirkt, dass die GPIO-Framework-Erweiterung (GpioClx) die Interrupt-Serviceroutine (ISR) ausführt, wird als primärer Interrupt bezeichnet. Dieser ISR ordnet den unterbrechenden GPIO-Pin einem globalen Systeminterrupt (GSI) zu und übergibt diesen GSI an die Hardware-Abstraktionsebene (HAL). Die HAL generiert einen sekundären Interrupt , um einen zweiten ISR auszuführen, der logisch mit dem GPIO-Pin über diese GSI verbunden ist. Dieser Prozess wird im Diagramm in der GPIO-Treiberunterstützungsübersicht angezeigt.

GPIO-Based Unterbrechen von Ressourcen

Treiber für Peripheriegeräte, die Unterbrechungen an allgemeine I/O-GPIO-Pins senden, erwerben GPIO-Interrupts als abstrakte Interrupt-Ressourcen von Windows. Kernelmodustreiberframework (KMDF)- Treiber erhalten diese Ressourcen über ihre EvtDevicePrepareHardware-Ereignisrückruffunktionen .

Passive-Level ISRs

Ab Windows 8 können Kernelmodustreiber-Framework (Kernel-Mode Driver Framework, KMDF) und Benutzermodustreiber-Framework (User-Mode Driver Framework, UMDF) als Option ihre Interruptdienstroutinen (Interrupt Service Routines, ISRs) registrieren, um auf passiver Stufe ausgeführt zu werden.

Interrupt-Related Rückrufe

Als Option kann der Treiber für einen allgemeinen I/O-Controller (GPIO) Unterstützung für GPIO-Unterbrechungen bereitstellen. Zur Unterstützung von GPIO-Unterbrechungen implementiert ein GPIO-Controllertreiber eine Reihe von Rückruffunktionen, um diese Unterbrechungen zu verwalten. Der Treiber enthält Zeiger auf diese Rückruffunktionen im Registrierungspaket, das der Treiber bereitstellt, wenn er sich als Client der GPIO-Framework-Erweiterung (GpioClx) registriert.

Unterbrechen der Synchronisierung für GPIO-Controllertreiber

GPIO-Controllertreiber können die GPIO_CLX_AcquireInterruptLock - und GPIO_CLX_ReleaseInterruptLock Methoden aufrufen, um Sperrungen abzurufen und freizugeben, die intern durch die GPIO-Frameworkerweiterung (GpioClx) implementiert werden. Treiber-Code, der unter IRQL = PASSIVE_LEVEL ausgeführt wird, kann diese Methoden aufrufen, um mit der Interrupt-Dienstroutine (ISR) in GpioClx zu synchronisieren. GpioClx widmet eine separate Interrupt-Sperre jeder Bank von Pins im GPIO-Controller.

Aktivieren und Deaktivieren freigegebener GPIO-Unterbrechungen

In einigen Fällen können Interrupt-Anforderungsleitungen von zwei oder mehr Peripheriegeräten an dasselbe physische Universal-I/O-Pin (GPIO) angeschlossen werden. Der GPIO-Pin für eine gemeinsame Interrupt-Leitung ist in der Regel für pegelausgelöste Interrupts konfiguriert.

GPIO Interrupt Masken

Allgemeine I/O(GPIO)-Pins, die als Interrupteingaben konfiguriert sind, können zusätzlich zur Aktivierung und Deaktivierung maskiert und entmasket werden.