Partilhar via


Interrupções GPIO

Alguns dispositivos de controlador de E/S (GPIO) de uso geral podem configurar seus pinos GPIO para funcionar como entradas de solicitação de interrupção. Essas entradas de solicitação de interrupção são acionadas por dispositivos periféricos que estão fisicamente conectados aos pinos GPIO. Os drivers para esses controladores GPIO podem ativar, desabilitar, mascarar, desmascarar e limpar solicitações de interrupção em pinos GPIO individuais.

O suporte para interrupções GPIO é opcional. A extensão de estrutura GPIO (GpioClx) não requer controladores GPIO para suportar interrupções GPIO.

Nesta secção

Tópico Descrição

Interrupções primárias e secundárias

O tratamento de interrupção GPIO é inerentemente um processo de dois estágios. A interrupção do controlador de E/S (GPIO) de uso geral, que faz com que a rotina de serviço de interrupção (ISR) da extensão de estrutura GPIO (GpioClx) seja executada, é chamada de interrupção primária. Este ISR associa o pino GPIO que gera a interrupção a uma interrupção global do sistema (GSI) e transmite esse GSI para a camada de abstração de hardware (HAL). O HAL gera uma interrupção secundária para executar um segundo ISR que está logicamente conectado ao pino GPIO através deste GSI. Esse processo é mostrado no diagrama em GPIO Driver Support Overview.

GPIO-Based Recursos de Interrupção

Os controladores para dispositivos periféricos que enviam interrupções para os pinos de E/S (GPIO) de uso geral adquirem interrupções GPIO como recursos de interrupção abstratos do Windows. Os drivers KMDF (kernel-mode driver framework) recebem esses recursos por meio de suas funções de retorno de chamada de evento EvtDevicePrepareHardware.

Passive-Level ISRs

A partir do Windows 8, os drivers KMDF (kernel-mode driver framework) e UMDF (user-mode driver framework) podem, como opção, registrar suas rotinas de serviço de interrupção (ISRs) para serem executadas em nível passivo.

Interrupt-Related Callbacks

Como opção, o driver para um controlador de E/S (GPIO) de uso geral pode fornecer suporte para interrupções GPIO. Para dar suporte a interrupções GPIO, um driver de controlador de GPIO implementa um conjunto de funções de callback para gerenciar essas interrupções. O driver inclui ponteiros para essas funções de retorno de chamada no pacote de registro que o driver fornece quando se registra como um cliente da extensão de estrutura GPIO (GpioClx).

Sincronização de interrupção para drivers de controlador GPIO

Os drivers de controlador GPIO podem chamar os métodos GPIO_CLX_AcquireInterruptLock e GPIO_CLX_ReleaseInterruptLock para adquirir e liberar bloqueios de interrupção que são implementados internamente pela extensão de estrutura GPIO (GpioClx). O código do driver que é executado em IRQL = PASSIVE_LEVEL pode chamar esses métodos para sincronizar com a rotina de serviço de interrupção (ISR) no GpioClx. O GpioClx dedica um bloqueio de interrupção separado para cada banco de pinos no controlador GPIO.

Ativando e desativando interrupções GPIO compartilhadas

Em alguns casos, as linhas de solicitação de interrupção de dois ou mais dispositivos periféricos podem se conectar ao mesmo pino físico de E/S de uso geral (GPIO). O pino GPIO para uma linha de interrupção compartilhada é normalmente configurado para interrupções acionadas por nível.

Máscaras de interrupção GPIO

Os pinos de E/S de uso geral (GPIO) configurados como entradas de interrupção podem ser mascarados e desmascarados, além de serem habilitados e desativados.