Partager via


Interfaces d’E/S et d’interruption GpioClx

En règle générale, les clients d’un contrôleur GPIO sont des pilotes pour les périphériques qui se connectent à des broches GPIO. Ces pilotes utilisent des broches GPIO comme canaux de données à faible bande passante, des sorties de sélection de périphérique et des entrées de demande d’interruption. Les pilotes de périphériques ouvrent des connexions logiques aux broches GPIO qui sont configurées en tant qu’entrées ou sorties de données. Ils utilisent ces connexions pour envoyer des demandes d’E/S à ces broches. En outre, les pilotes de périphériques peuvent connecter logiquement leurs routines de service d’interruption à des broches GPIO configurées en tant qu’entrées de demande d’interruption.

Les broches GPIO sont des ressources matérielles gérées par le système. Avant qu’un pilote de périphérique démarre son périphérique, le gestionnaire de Plug-and-Play (PnP) attribue à ce pilote une liste de ressources matérielles. Cette liste de ressources matérielles peut inclure les éléments suivants :

  • Une ressource d’E/S GPIO. Cette ressource est un ensemble d’une ou plusieurs broches GPIO configurées en tant qu’entrées de données ou sorties de données. Les ressources d’E/S GPIO sont un nouveau type de ressource Windows commençant par Windows 8.
  • Une interruption. Cette ressource d’interruption peut être implémentée en tant que broche GPIO configurée en tant qu’entrée d’interruption, mais elle peut être implémentée à la place par un contrôleur d’interruption programmable ou en tant que broche d’interruption dédiée sur un package de processeur. L’abstraction d’interruption de la couche d’abstraction matérielle (HAL) masque ces détails d’implémentation, que les pilotes clients peuvent ignorer en toute sécurité.

Avant qu’un pilote de périphérique puisse utiliser un ensemble de broches GPIO comme entrées ou sorties de données, le pilote doit ouvrir une connexion logique à ces broches. Par exemple, un pilote KMDF ( kernel-mode driver interface ) obtient un handle WDFIOTARGET pour identifier la connexion. Le pilote utilise ce handle pour envoyer des demandes d’E/S aux broches. Plus précisément, les pilotes clients envoient IOCTL_GPIO_WRITE_PINS et IOCTL_GPIO_READ_PINS demandes de contrôle d’E/S pour écrire des données dans des broches de sortie et lire des données à partir des broches d’entrée. Pour obtenir des exemples de code qui montrent comment se connecter à un ensemble de broches d’E/S GPIO, consultez les rubriques suivantes :

Connexion d’un pilote KMDF à des broches d’E/S GPIO

Pour utiliser une ressource d’interruption pour recevoir des interruptions, un pilote de périphérique doit connecter logiquement une routine de service d’interruption (ISR) à l’interruption. Par exemple, un pilote en mode noyau peut établir cette connexion en appelant la méthode WdfInterruptCreate ou la routine IoConnectInterruptEx . Une fois connecté, l’ISR du pilote s’exécute lorsque le périphérique signale une demande d’interruption à l’entrée de la broche GPIO ou du contrôleur d’interruption. Pour plus d’informations sur les interruptions, consultez Création d’un objet d’interruption.

L’extension d’infrastructure GPIO (GpioClx) gère à la fois les connexions d’E/S et les connexions d’interruption pour les pilotes de périphériques qui sont ses clients. Le gestionnaire PnP peut affecter différents groupes de broches GPIO sur un périphérique de contrôleur GPIO à différents pilotes clients. Certaines de ces broches sont configurées en tant qu’entrées de données ou sorties, tandis que d’autres sont configurées en tant qu’entrées de demande d’interruption.

Lorsque les pilotes clients reçoivent des demandes d’interruption ou envoient des demandes d’E/S aux broches GPIO, GpioClx appelle les fonctions de rappel d’événements implémentées par le pilote du contrôleur GPIO. Ces rappels accèdent aux registres matériels dans l’appareil du contrôleur GPIO. Grâce à ces appels de fonction, GpioClx lit les entrées de données, écrit dans les sorties de données et gère les demandes d’interruption (en interrogeant, en activant, en masquant, en effaçant, etc., les broches GPIO configurées en tant qu’entrées d’interruption).

GpioClx effectue tout le traitement nécessaire pour gérer les connexions d’E/S et d’interruption qui sont ouvertes par les clients. Le pilote du contrôleur GPIO, en déléguant la gestion de ces connexions à GpioClx, n’est responsable que de la tâche relativement simple d’accès aux registres matériels dans le périphérique du contrôleur GPIO. Le pilote du contrôleur GPIO n’a pas besoin de connaître le pilote client pour lequel un accès particulier est effectué.