Freigeben über


GpioClx-E/A- und Interruptschnittstellen

In der Regel sind die Clients eines GPIO-Controllers Treiber für Peripheriegeräte, die eine Verbindung mit GPIO-Pins herstellen. Diese Treiber verwenden GPIO-Pins als Datenkanäle mit geringer Bandbreite, Geräteauswahlausgaben und Interruptanforderungseingaben. Peripheriegerätetreiber öffnen logische Verbindungen mit GPIO-Pins, die als Dateneingaben oder -ausgaben konfiguriert sind. Sie verwenden diese Verbindungen, um E/A-Anforderungen an diese Pins zu senden. Darüber hinaus können Treiber von Peripheriegeräten ihre Interruptdienstroutinen logisch mit GPIO-Pins verbinden, die als Interruptanforderungseingaben konfiguriert sind.

GPIO-Pins sind vom System verwaltete Hardwareressourcen. Bevor ein Peripheriegerätetreiber sein Gerät startet, weist der Plug & Play-Manager (PnP) diesem Treiber eine Liste der Hardwareressourcen zu. Diese Liste der Hardwareressourcen kann Folgendes enthalten:

  • Eine GPIO-E/A-Ressource. Bei dieser Ressource handelt es sich um einen Satz von mindestens einem GPIO-Pin, die als Dateneingaben oder Datenausgaben konfiguriert sind. GPIO-E/A-Ressourcen sind ein neuer Windows-Ressourcentyp ab Windows 8.
  • Ein Interrupt. Diese Interruptressource kann als GPIO-Pin implementiert werden, der als Interrupteingabe konfiguriert ist, aber sie kann stattdessen von einem programmierbaren Interruptcontroller oder als dedizierter Interrupt-Pin in einem Prozessorpaket implementiert werden. Die Hal-Interrupt-Abstraktion (Hardware Abstraction Layer) blendet diese Implementierungsdetails aus, die Clienttreiber sicher ignorieren können.

Bevor ein Treiber eines Peripheriegeräts eine Reihe von GPIO-Pins als Datenein- oder -ausgänge verwenden kann, muss der Treiber eine logische Verbindung mit diesen Pins herstellen. Beispielsweise ruft ein KmDF-Treiber (Kernelmodustreiberschnittstelle ) ein WDFIOTARGET-Handle ab, um die Verbindung zu identifizieren. Der Treiber verwendet dieses Handle, um E/A-Anforderungen an die Pins zu senden. Insbesondere senden Clienttreiber IOCTL_GPIO_WRITE_PINS - und IOCTL_GPIO_READ_PINS E/A-Steuerelementanforderungen, um Daten an Ausgabepins zu schreiben und Daten von Eingabenadeln zu lesen. Codebeispiele zum Herstellen einer Verbindung mit einer Gruppe von GPIO-E/A-Pins finden Sie in den folgenden Themen:

Verbinden eines KMDF-Treibers mit GPIO-E/A-Pins

Um eine Interruptressource zum Empfangen von Interrupts zu verwenden, muss ein Peripheriegerätetreiber eine Interruptdienstroutine (ISR) logisch mit dem Interrupt verbinden. Beispielsweise kann ein Kernelmodustreiber diese Verbindung herstellen, indem er die WdfInterruptCreate-Methode oder die IoConnectInterruptEx-Routine aufruft . Nach der Verbindung wird der ISR des Treibers ausgeführt, wenn das Peripheriegerät eine Interruptanforderung an die GPIO-Pin- oder Interruptcontrollereingabe signalisiert. Weitere Informationen zu Interrupts finden Sie unter Erstellen eines Interruptobjekts.

Die GPIO-Frameworkerweiterung (GpioClx) verwaltet sowohl E/A-Verbindungen als auch Interruptverbindungen für die Peripheriegerätetreiber, die ihre Clients sind. Der PnP-Manager weist möglicherweise verschiedenen Gruppen von GPIO-Pins auf einem GPIO-Controllergerät verschiedenen Clienttreibern zu. Einige dieser Pins werden als Dateneingaben oder -ausgaben konfiguriert, einige als Interruptanforderungseingaben konfiguriert.

Wenn Clienttreiber Interruptanforderungen empfangen oder E/A-Anforderungen an GPIO-Pins senden, ruft GpioClx Ereignisrückruffunktionen auf, die vom GPIO-Controllertreiber implementiert werden. Diese Rückrufe greifen auf die Hardwareregister im GPIO-Controllergerät zu. Über diese Funktionsaufrufe liest GpioClx Dateneingaben, schreibt in Datenausgaben und verwaltet Unterbrechungsanforderungen (durch Abfragen, Aktivieren, Maskieren, Löschen usw., GPIO-Pins, die als Interrupteingaben konfiguriert sind).

GpioClx übernimmt die gesamte Verarbeitung, die zum Verwalten von E/A- und Unterbrechungsverbindungen erforderlich ist, die von Clients geöffnet werden. Der GPIO-Controllertreiber ist nur für den relativ einfachen Zugriff auf die Hardwareregister im GPIO-Controllergerät verantwortlich, indem er die Verwaltung dieser Verbindungen an GpioClx delegiert. Der GPIO-Controllertreiber muss den Clienttreiber nicht kennen, für den ein bestimmter Zugriff erfolgt.