Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Normalmente, os clientes de um controlador GPIO são drivers para dispositivos periféricos que se conectam a pinos GPIO. Esses drivers usam pinos GPIO como canais de dados de baixa largura de banda, saídas de seleção de dispositivo e entradas de solicitação de interrupção. Os drivers de dispositivo periférico abrem conexões lógicas para pinos GPIO configurados como entradas ou saídas de dados. Eles usam essas conexões para enviar solicitações de E/S para esses pinos. Além disso, os drivers de dispositivo periférico podem conectar logicamente suas rotinas de serviço de interrupção a pinos GPIO configurados como entradas de solicitação de interrupção.
Os pinos de GPIO são recursos de hardware gerenciados pelo sistema. Antes que um driver de dispositivo periférico inicie seu dispositivo, o gerenciador do Plug and Play (PnP) atribui a esse driver uma lista de recursos de hardware. Esta lista de recursos de hardware pode incluir o seguinte:
- Um recurso de E/S do GPIO. Esse recurso é um conjunto de um ou mais pinos GPIO configurados como entradas de dados ou saídas de dados. Os recursos de E/S do GPIO são um novo tipo de recurso do Windows começando com o Windows 8.
- Uma interrupção. Esse recurso de interrupção pode ser implementado como um pin GPIO configurado como uma entrada de interrupção, mas pode ser implementado por um controlador de interrupção programável ou como um pino de interrupção dedicado em um pacote de processador. A camada de abstração de hardware (HAL) para interrupções oculta esses detalhes de implementação, que os drivers do cliente podem ignorar com segurança.
Antes que um driver de dispositivo periférico possa usar um conjunto de pinos GPIO como entradas ou saídas de dados, o driver deve abrir uma conexão lógica com esses pinos. Por exemplo, um driver KMDF ( interface de driver no modo kernel ) obtém um identificador WDFIOTARGET para identificar a conexão. O driver usa esse identificador para enviar solicitações de E/S para os pinos. Especificamente, os drivers cliente enviam IOCTL_GPIO_WRITE_PINS e IOCTL_GPIO_READ_PINS solicitações de controle de E/S para gravar dados em pinos de saída e ler dados de pinos de entrada. Para obter exemplos de código que mostram como se conectar a um conjunto de pinos de E/S do GPIO, consulte os seguintes tópicos:
conectar um driver KMDF a pinos de E/S gpio
Para usar um recurso de interrupção para receber interrupções, um driver de dispositivo periférico deve conectar logicamente uma rotina de serviço de interrupção (ISR) à interrupção. Por exemplo, um driver no modo kernel pode fazer essa conexão chamando o método WdfInterruptCreate ou a rotina IoConnectInterruptEx . Após ser conectado, o ISR do driver é executado quando o dispositivo periférico sinaliza uma solicitação de interrupção para o pino de GPIO ou entrada do controlador de interrupção. Para obter mais informações sobre interrupções, consulte Criando um objeto interruptor.
A extensão da estrutura GPIO (GpioClx) gerencia tanto as conexões de E/S quanto as conexões de interrupção para os drivers de dispositivos periféricos que são seus clientes. O gerenciador PnP pode atribuir diferentes grupos de pinos GPIO em um dispositivo controlador GPIO a drivers cliente diferentes. Alguns desses pinos são configurados como entradas ou saídas de dados e alguns são configurados como entradas de solicitação de interrupção.
Quando os drivers cliente recebem solicitações de interrupção ou enviam solicitações de E/S para pinos GPIO, o GpioClx chama funções de retorno de chamada de evento que são implementadas pelo driver do controlador GPIO. Esses retornos de chamada acessam os registros de hardware no dispositivo do controlador GPIO. Por meio dessas chamadas de função, o GpioClx lê entradas de dados, grava em saídas de dados e gerencia solicitações de interrupção (consultando, habilitando, mascarando, limpando e assim por diante, pinos GPIO configurados como entradas de interrupção).
O GpioClx realiza todo o processamento necessário para gerenciar as conexões de E/S e interrupção que são abertas pelos clientes. O driver do controlador GPIO, delegando o gerenciamento dessas conexões ao GpioClx, é responsável apenas pela tarefa relativamente simples de acessar os registros de hardware no dispositivo do controlador GPIO. O driver do controlador GPIO não precisa conhecer o driver cliente para o qual um acesso específico é feito.