Compartir a través de


Interfaces de E/S e interrupción de GpioClx

Normalmente, los clientes de un controlador GPIO son controladores para dispositivos periféricos que se conectan a patillas GPIO. Estos controladores usan patillas GPIO como canales de datos de ancho de banda bajo, salidas de selección de dispositivo e entradas de solicitud de interrupción. Los controladores de dispositivos periféricos abren conexiones lógicas a patillas GPIO configuradas como entradas o salidas de datos. Usan estas conexiones para enviar solicitudes de E/S a estas patillas. Además, los controladores de dispositivos periféricos pueden conectar lógicamente sus rutinas de servicio de interrupción a patillas GPIO configuradas como entradas de solicitud de interrupción.

Las patillas GPIO son recursos de hardware administrados por el sistema. Antes de que un controlador de dispositivo periférico inicie su dispositivo, el administrador de Plug and Play (PnP) asigna a este controlador una lista de recursos de hardware. Esta lista de recursos de hardware puede incluir lo siguiente:

  • Un recurso de E/S de GPIO. Este recurso es un conjunto de uno o varios patillas GPIO que se configuran como entradas de datos o salidas de datos. Los recursos de E/S de GPIO son un nuevo tipo de recurso de Windows a partir de Windows 8.
  • Una interrupción. Este recurso de interrupción se puede implementar como un pin GPIO configurado como entrada de interrupción, pero podría implementarse en su lugar mediante un controlador de interrupción programable o como una patilla de interrupción dedicada en un paquete de procesador. La abstracción de interrupción de capa de abstracción de hardware (HAL) oculta estos detalles de implementación, que los controladores de cliente pueden omitir de forma segura.

Antes de que un controlador de dispositivo periférico pueda usar un conjunto de patillas GPIO como entradas o salidas de datos, el controlador debe abrir una conexión lógica a estas patillas. Por ejemplo, un controlador de interfaz de controlador en modo kernel (KMDF) obtiene un identificador WDFIOTARGET para identificar la conexión. El controlador usa este identificador para enviar solicitudes de E/S a las patillas. En concreto, los controladores de cliente envían IOCTL_GPIO_WRITE_PINS y IOCTL_GPIO_READ_PINS solicitudes de control de E/S para escribir datos en patillas de salida y leer datos de patillas de entrada. Para obtener ejemplos de código que muestran cómo conectarse a un conjunto de patillas de E/S de GPIO, consulte los temas siguientes:

Conexión de un controlador KMDF a patillas de E/S de GPIO

Para usar un recurso de interrupción para recibir interrupciones, un controlador de dispositivo periférico debe conectar lógicamente una rutina de servicio de interrupción (ISR) a la interrupción. Por ejemplo, un controlador en modo kernel puede establecer esta conexión llamando al método WdfInterruptCreate o a la rutina IoConnectInterruptEx . Después de conectarse, el ISR del controlador se ejecuta cuando el dispositivo periférico señala una solicitud de interrupción a la entrada del controlador de interrupción o patilla GPIO. Para obtener más información sobre las interrupciones, vea Crear un objeto de interrupción.

La extensión de marco gpIO (GpioClx) administra las conexiones de E/S y las conexiones de interrupción para los controladores de dispositivos periféricos que son sus clientes. El administrador de PnP puede asignar diferentes grupos de patillas GPIO en un dispositivo de controlador GPIO a distintos controladores cliente. Algunas de estas patillas se configuran como entradas o salidas de datos, y algunas se configuran como entradas de solicitud de interrupción.

Cuando los controladores de cliente reciben solicitudes de interrupción o envían solicitudes de E/S a patillas GPIO, GpioClx llama a funciones de devolución de llamada de eventos implementadas por el controlador gpIO. Estas devoluciones de llamada acceden a los registros de hardware en el dispositivo del controlador GPIO. A través de estas llamadas de función, GpioClx lee entradas de datos, escribe en salidas de datos y administra solicitudes de interrupción (consultando, habilitando, enmascarando, borrando, etc., patillas GPIO configuradas como entradas de interrupción).

GpioClx realiza todo el procesamiento necesario para administrar las conexiones de E/S e interrupción abiertas por los clientes. El controlador del controlador GPIO, al delegar la administración de estas conexiones a GpioClx, solo es responsable de la tarea relativamente sencilla de acceder a los registros de hardware en el dispositivo de controlador GPIO. El controlador del controlador GPIO no necesita conocer el controlador cliente para el que se realiza un acceso determinado.