Freigeben über


Implementierungsprobleme für GPIO-Controllertreiber

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

Wenn der GPIO-Controllertreiber z. B. das Lesen und Schreiben in GPIO-E/A-Pins unterstützt, kann der Entwickler auswählen, eines der folgenden Paare von Rückruffunktionen zu 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, aus dem die Bitwerte gelesen oder in diese Pins geschrieben werden sollen. Wenn in der Regel nur auf eine kleine Anzahl von GPIO-Pins in einem Lese- oder Schreibvorgang zugegriffen wird, kann dieses Rückrufpaar die beste Implementierung erzielen. Diese Implementierung wird in der Regel für GPIO-Controller verwendet, deren Hardwareregister nicht im Arbeitsspeicher zugeordnet sind. Wenn jedoch wahrscheinlich während eines Lese- oder Schreibvorgangs auf mehrere GPIO-Pins zugegriffen wird, oder wenn die GPIO-Controllerhardware effizient parallel auf mehrere GPIO-Pins zugreifen kann, kann das andere Paar von Rückruffunktionen eine bessere Implementierung erzeugen.

Die CLIENT_ReadGpioPinsUsingMask- und CLIENT_WriteGpioPinsUsingMask-Rückruffunktionen können eine Bank mit bis zu 64 Pins in einem Aufruf lesen oder schreiben. Die CLIENT_ReadGpioPinsUsingMask-Funktion liest die GPIO-Pinwerte in einer 64-Bit-Maske vor. 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 speicherzugeordnete GPIO-Controller verwendet.