Interruptions GPIO

Certains périphériques de contrôleur d’E/S à usage général (GPIO) peuvent configurer leurs broches GPIO pour qu’elles fonctionnent en tant qu’entrées de demande d’interruption. Ces entrées de demande d’interruption sont pilotées par des périphériques qui sont physiquement connectés aux broches GPIO. Les pilotes de ces contrôleurs GPIO peuvent activer, désactiver, masquer, démasquer et effacer les demandes d’interruption sur des broches GPIO individuelles.

La prise en charge des interruptions GPIO est facultative. L’extension d’infrastructure GPIO (GpioClx) ne nécessite pas de contrôleurs GPIO pour prendre en charge les interruptions GPIO.

Contenu de cette section

Rubrique Description

Interruptions principales et secondaires

La gestion des interruptions GPIO est par nature un processus en deux étapes. L’interruption du contrôleur d’E/S à usage général (GPIO), qui provoque l’exécution de la routine de service d’interruption (ISR) de l’extension d’infrastructure GPIO (GpioClx), est appelée interruption principale. Cet ISR mappe la broche GPIO d’interruption à une interruption du système global (GSI) et transmet cette GSI à la couche d’abstraction matérielle (HAL). Le HAL génère une interruption secondaire pour exécuter un deuxième ISR qui est logiquement connecté à la broche GPIO via cette GSI. Ce processus est illustré dans le diagramme dans Vue d’ensemble de la prise en charge des pilotes GPIO.

Ressources d’interruption basées sur GPIO

Les pilotes pour les périphériques qui envoient des interruptions à des broches d’E/S à usage général (GPIO) acquièrent les interruptions GPIO en tant que ressources d’interruption Windows abstraites. Les pilotes KMDF (Kernel-Mode Driver Framework) reçoivent ces ressources via leurs fonctions de rappel d’événements EvtDevicePrepareHardware.

ISR de niveau passif

À compter de Windows 8, les pilotes KMDF (Kernel-Mode Driver Framework) et UMDF (User-Mode Driver Framework) peuvent, en option, inscrire leurs routines de service d’interruption (ISR) pour s’exécuter au niveau passif.

Rappels liés aux interruptions

En option, le pilote d’un contrôleur d’E/S à usage général (GPIO) peut prendre en charge les interruptions GPIO. Pour prendre en charge les interruptions GPIO, un pilote de contrôleur GPIO implémente un ensemble de fonctions de rappel pour gérer ces interruptions. Le pilote inclut des pointeurs vers ces fonctions de rappel dans le paquet d’inscription que le pilote fournit lorsqu’il s’inscrit en tant que client de l’extension d’infrastructure GPIO (GpioClx).

Interruption de synchronisation pour les pilotes de contrôleur GPIO

Les pilotes de contrôleur GPIO peuvent appeler les méthodes GPIO_CLX_AcquireInterruptLock et GPIO_CLX_ReleaseInterruptLock pour acquérir et libérer des verrous d’interruption implémentés en interne par l’extension d’infrastructure GPIO (GpioClx). Code de pilote qui s’exécute à IRQL = PASSIVE_LEVEL pouvez appeler ces méthodes pour se synchroniser avec la routine de service d’interruption (ISR) dans GpioClx. GpioClx dédie un verrou d’interruption distinct à chaque banque de broches dans le contrôleur GPIO.

Activation et désactivation des interruptions GPIO partagées

Dans certains cas, les lignes de requête d’interruption de deux ou plusieurs périphériques peuvent se connecter à la même broche d’E/S à usage général (GPIO) physique. La broche GPIO d’une ligne d’interruption partagée est généralement configurée pour les interruptions déclenchées par un niveau.

Masques d’interruption GPIO

Les broches d’E/S à usage général (GPIO) configurées en tant qu’entrées d’interruption peuvent être masquées et démasqués en plus d’être activées et désactivées.