recursos de interrupción de GPIO-Based
Los controladores para dispositivos periféricos que envían interrupciones a patillas de E/S de uso general (GPIO) adquieren interrupciones GPIO como recursos abstractos de interrupción de Windows. Los controladores del marco de controladores del modo kernel (KMDF) y los controladores del marco de controladores del modo de usuario (UMDF) reciben estos recursos a través de sus funciones de devolución de llamada de eventos EvtDevicePrepareHardware.
Los controladores de dispositivos periféricos que usan recursos de interrupción basados en GPIO pueden omitir los detalles de implementación de bajo nivel, como si una interrupción se genera mediante un pin GPIO en lugar de un controlador de interrupción o mediante una patilla de interrupción en un chip de procesador.
Una interrupción basada en GPIO es un recurso de tipo CmResourceTypeInterrupt. Los parámetros de configuración de esta interrupción se encuentran en el miembro u.Interrupt de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR que describe el recurso de interrupción. Para conectar una rutina de servicio de interrupción (ISR) a una interrupción, un controlador UMDF o KMDF proporciona las descripciones sin procesar y traducidas del recurso de interrupción a un método de creación de interrupciones.
El controlador KMDF o UMDF para un dispositivo periférico llama al método WdfInterruptCreate para conectar un ISR a la interrupción del dispositivo. Uno de los parámetros de entrada de este método es un puntero a una estructura de WDF_INTERRUPT_CONFIG que contiene información de configuración para la interrupción.
Si un controlador de dispositivo periférico usa más de un recurso de interrupción GPIO, este controlador debe tener en cuenta el orden en que estos recursos aparecen en las listas de recursos sin procesar y traducidas que se proporcionan como parámetros de entrada a la función EvtDevicePrepareHardware o al método OnPrepareHardware . Los recursos de estas listas aparecen en el orden en que se describen en el firmware de la plataforma, que debe coincidir con el orden esperado por el controlador.