Freigeben über


Implementierungsprobleme für GPIO-Controllertreiber

Die GPIO-Frameworkerweiterung (GpioClx) bietet eine flexible Gerätetreiberschnittstelle (DDI). Mit diesem DDI können Entwickler zwischen alternativen Rückrufschnittstellen wählen. Ein Treiberentwickler sollte die Gruppe von Ereignisrückruffunktionen implementieren, die am besten für die Hardwarearchitektur des GPIO-Zielcontrollergeräts geeignet sind.

Wenn der GPIO-Controllertreiber beispielsweise das Lesen und Schreiben von GPIO-E/A-Pins unterstützt, kann der Entwickler eines der folgenden Rückruffunktionspaare implementieren:

CLIENT_ReadGpioPins und CLIENT_WriteGpioPinsCLIENT_ReadGpioPinsUsingMask und CLIENT_WriteGpioPinsUsingMask Die Funktionen CLIENT_ReadGpioPins und CLIENT_WriteGpioPins erhalten eine Banknummer, ein Array von GPIO-Pinnummern und einen Datenpuffer für die Bitwerte, die aus diesen Pins gelesen oder in diese geschrieben werden sollen. Wenn in einem Lese- oder Schreibvorgang in der Regel nur auf eine kleine Anzahl von GPIO-Pins zugegriffen wird, kann dieses Rückrufpaar die beste Implementierung liefern. Diese Implementierung wird in der Regel für GPIO-Controller verwendet, deren Hardwareregister nicht arbeitsspeicherseitig zugeordnet sind. Wenn jedoch während eines Lese- oder Schreibvorgangs wahrscheinlich auf mehrere GPIO-Pins zugegriffen wird oder die GPIO-Controllerhardware effizient parallel auf mehrere GPIO-Pins zugreifen kann, kann das andere Paar von Rückruffunktionen zu einer besseren Implementierung führen.

Die CLIENT_ReadGpioPinsUsingMask - und CLIENT_WriteGpioPinsUsingMask-Rückruffunktionen können eine Bank mit bis zu 64 Pins in einem Anruf lesen oder schreiben. Die funktion CLIENT_ReadGpioPinsUsingMask liest die GPIO-Pinwerte in eine 64-Bit-Maske. Die CLIENT_WriteGpioPinsUsingMask-Funktion verwendet zwei 64-Bit-Masken. Eine Maske gibt an, welche GPIO-Pins festgelegt werden sollen, und die andere Maske gibt an, welche GPIO-Pins gelöscht werden sollen. Diese Implementierung wird in der Regel für speicherabbildete GPIO-Controller verwendet.