Partager via


Problèmes d’implémentation pour les pilotes de contrôleur GPIO

L’extension d’infrastructure GPIO (GpioClx) fournit une interface de pilote de périphérique (DDI) flexible. Cette DDI permet aux développeurs de choisir parmi d’autres interfaces de rappel. Un développeur de pilotes doit implémenter l’ensemble de fonctions de rappel d’événements qui convient le mieux à l’architecture matérielle du périphérique de contrôleur GPIO cible.

Par exemple, si le pilote du contrôleur GPIO prend en charge la lecture et l’écriture dans des broches d’E/S GPIO, le développeur peut choisir d’implémenter l’une des paires suivantes de fonctions de rappel :

CLIENT_ReadGpioPins et CLIENT_WriteGpioPinsCLIENT_ReadGpioPinsUsingMask et CLIENT_WriteGpioPinsUsingMask Les fonctions CLIENT_ReadGpioPins et CLIENT_WriteGpioPins reçoivent un numéro bancaire, un tableau de numéros de code PIN GPIO et une mémoire tampon de données pour les valeurs de bits à lire ou écrire dans ces broches. Si seul un petit nombre de broches GPIO est généralement accessible dans le cadre d’une opération de lecture ou d’écriture, cette paire de rappels peut produire la meilleure implémentation. Cette implémentation est généralement utilisée pour les contrôleurs GPIO dont les registres matériels ne sont pas mappés en mémoire. Toutefois, si plusieurs broches GPIO sont susceptibles d’être accessibles pendant une opération de lecture ou d’écriture, ou si le matériel du contrôleur GPIO peut accéder efficacement à plusieurs broches GPIO en parallèle, l’autre paire de fonctions de rappel peut produire une meilleure implémentation.

Les fonctions de rappel CLIENT_ReadGpioPinsUsingMask et CLIENT_WriteGpioPinsUsingMask peuvent lire ou écrire jusqu’à 64 broches en un seul appel. La fonction CLIENT_ReadGpioPinsUsingMask lit les valeurs de broche GPIO dans un masque 64 bits. La fonction CLIENT_WriteGpioPinsUsingMask utilise deux masques 64 bits. Un masque indique les broches GPIO à définir, et l’autre masque indique les broches GPIO à effacer. Cette implémentation est généralement utilisée pour les contrôleurs GPIO mappés en mémoire.