Compartilhar via


GPIO-Based Recursos de Interrupção

Drivers para dispositivos periféricos que enviam interrupções para pinos de E/S de uso geral (GPIO) adquirem interrupções de GPIO como recursos abstratos de interrupção do Windows. Drivers da estrutura de driver do modo núcleo (KMDF) e drivers da estrutura de driver do modo usuário (UMDF) recebem esses recursos por meio de suas funções de callback de evento EvtDevicePrepareHardware.

Drivers de dispositivo periférico que usam recursos de interrupção baseados em GPIO podem ignorar detalhes de implementação de baixo nível, como se uma interrupção é gerada por um pino GPIO em vez de por um controlador de interrupção ou por um pino de interrupção em um chip de processador.

Uma interrupção baseada em GPIO é um recurso do tipo CmResourceTypeInterrupt. Os parâmetros de configuração para essa interrupção estão contidos no membro u.Interrupt da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR que descreve o recurso de interrupção. Para conectar uma rotina de serviço de interrupção (ISR) a uma interrupção, um driver UMDF ou KMDF fornece as descrições brutas e traduzidas do recurso de interrupção para um método de criação de interrupção.

O driver KMDF ou UMDF para um dispositivo periférico chama o método WdfInterruptCreate para conectar um ISR à interrupção proveniente do dispositivo. Um dos parâmetros de entrada para esse método é um ponteiro para uma estrutura de WDF_INTERRUPT_CONFIG que contém informações de configuração para a interrupção.

Se um driver de dispositivo periférico usa mais de um recurso de interrupção gpio, esse driver deve estar ciente da ordem na qual esses recursos aparecem nas listas de recursos brutos e traduzidos que são fornecidos como parâmetros de entrada para a função EvtDevicePrepareHardware ou o método OnPrepareHardware . Os recursos nessas listas aparecem na ordem em que são descritos no firmware da plataforma, que deve corresponder à ordem esperada pelo driver.