Interrupções de GPIO
Alguns dispositivos de controlador gpio (E/S 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 controladas por dispositivos periféricos que estão fisicamente conectados aos pinos gpio. Os drivers para esses controladores GPIO podem habilitar, 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 dar suporte a interrupções gpio.
Nesta seção
Tópico | Descrição |
---|---|
O tratamento de interrupção do GPIO é inerentemente um processo de dois estágios. A interrupção do controlador de E/S de uso geral (GPIO), que faz com que a ISR (rotina de serviço de interrupção) da extensão da estrutura GPIO (GpioClx) seja executada, é chamada de interrupção primária. Esse ISR mapeia o pino gpio de interrupção para uma GSI (interrupção do sistema global) e passa 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 por meio desse GSI. Esse processo é mostrado no diagrama na Visão geral do suporte ao driver GPIO. |
|
Os drivers para dispositivos periféricos que enviam interrupções para pinos de GPIO (E/S de uso geral) adquirem interrupções gpio como recursos abstratos de interrupção do Windows. Os drivers KMDF (estrutura de driver do modo kernel) recebem esses recursos por meio de suas funções de retorno de chamada de evento EvtDevicePrepareHardware. |
|
Começando com Windows 8, os drivers KMDF (estrutura de driver do modo kernel) e UMDF (estrutura de driver de modo de usuário) podem, como opção, registrar suas ISRs (rotinas de serviço de interrupção) para serem executadas no nível passivo. |
|
Como opção, o driver para um controlador gpio (E/S de uso geral) pode fornecer suporte para interrupções gpio. Para dar suporte a interrupções gpio, um driver de controlador GPIO implementa um conjunto de funções de retorno de chamada para gerenciar essas interrupções. O driver inclui ponteiros para essas funções de retorno de chamada no pacote de registro fornecido pelo driver quando ele se registra como um cliente da gpioClx (extensão de estrutura gpio). |
|
Sincronização de interrupção para drivers de controlador GPIO |
Os drivers do controlador GPIO podem chamar os métodos GPIO_CLX_AcquireInterruptLock e GPIO_CLX_ReleaseInterruptLock para adquirir e liberar bloqueios de interrupção implementados internamente pela gpioClx (extensão de estrutura gpio). O código do driver executado em IRQL = PASSIVE_LEVEL pode chamar esses métodos para sincronizar com a ISR (rotina de serviço de interrupção) em GpioClx. GpioClx dedica um bloqueio de interrupção separado a cada banco de pinos no controlador GPIO. |
Em alguns casos, as linhas de solicitação de interrupção de dois ou mais dispositivos periféricos podem se conectar ao mesmo pino de GPIO (E/S de uso geral) físico. O pino gpio para uma linha de interrupção compartilhada normalmente é configurado para interrupções disparadas em nível. |
|
Os pinos de GPIO (E/S de uso geral) configurados como entradas de interrupção podem ser mascarados e desmascarados, além de serem habilitados e desabilitados. |