GPIO 中断

某些常规用途 I/O (GPIO) 控制器设备可以配置其 GPIO 引脚,使之充当中断请求输入。 这些中断请求输入由通过物理方式连接到 GPIO 引脚的外围设备驱动。 这些 GPIO 控制器的驱动程序可以启用、禁用、屏蔽、取消屏蔽以及清除单个 GPIO 引脚上的中断请求。

支持 GPIO 中断是可选的。 GPIO 框架扩展 (GpioClx) 不需要 GPIO 控制器支持 GPIO 中断。

在本节中

主题 说明

主要和次要中断

GPIO 中断处理本质上是一个两阶段过程。 来自常规用途 I/O (GPIO) 控制器的中断称为 主中断,该中断导致 GPIO 框架扩展 (gpioClx) 中断服务例程 (ISR) 运行。 此 ISR 将中断 GPIO 引脚映射到 GSI) (全局系统中断,并将此 GSI 传递到硬件抽象层 (HAL) 。 HAL 会生成 辅助中断 ,以运行通过此 GSI 在逻辑上连接到 GPIO 引脚的第二个 ISR。 此过程显示在 GPIO 驱动程序支持概述中的关系图中。

基于 GPIO 的中断资源

将中断发送到常规用途 I/O 的外围设备的驱动程序 (GPIO) 引脚获取 GPIO 中断作为抽象的 Windows 中断资源。 内核模式驱动程序框架 (KMDF) 驱动程序通过其 EvtDevicePrepareHardware 事件回调函数接收这些资源。

被动级别 ISR

从Windows 8开始,内核模式驱动程序框架 (KMDF) 和用户模式驱动程序框架 (UMDF) 驱动程序可以选择注册其中断服务例程, (ISR) 在被动级别运行。

与中断相关的回调

作为一个选项,常规用途 I/O (GPIO) 控制器的驱动程序可以提供对 GPIO 中断的支持。 为了支持 GPIO 中断,GPIO 控制器驱动程序实现一组回调函数来管理这些中断。 驱动程序在将自身注册为 gpioClx) gpioClx (GPIO 框架扩展的客户端时提供的注册数据包中包含指向这些回调函数的指针。

GPIO 控制器驱动程序的中断同步

GPIO 控制器驱动程序可以调用 GPIO_CLX_AcquireInterruptLockGPIO_CLX_ReleaseInterruptLock 方法来获取和释放 GPIO 框架扩展 (GpioClx) 内部实现的中断锁。 在 IRQL = PASSIVE_LEVEL 运行的驱动程序代码可以调用这些方法,以同步到 gpioClx 中 (ISR) 中断服务例程。 GpioClx 将单独的中断锁专用于 GPIO 控制器中的每个引脚组。

启用和禁用共享 GPIO 中断

在某些情况下,来自两个或多个外围设备的中断请求线路可能会连接到同一物理通用 I/O (GPIO) 引脚。 共享中断线的 GPIO 引脚通常配置为级别触发的中断。

GPIO 中断掩码

除了启用和禁用外,还可以屏蔽和取消屏蔽配置为中断输入的常规用途 I/O (GPIO) 引脚。