GPIO 中断

某些通用 I/O (GPIO)控制器设备可以将其 GPIO 引脚配置为中断请求输入。 这些中断请求输入由物理连接到 GPIO 引脚的外围设备驱动。 这些 GPIO 控制器的驱动程序可以在单个 GPIO 引脚上启用、禁用、屏蔽、取消屏蔽和清除中断请求。

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

本部分内容

主题 DESCRIPTION

主要中断和次要中断

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

GPIO-Based 中断资源

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

Passive-Level ISRs

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

Interrupt-Related 回调

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

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

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

启用和禁用共享 GPIO 中断

在某些情况下,来自两个或多个外围设备的中断请求行可能会连接到同一物理通用输入输出(GPIO)引脚。 共享中断线的 GPIO 引脚通常被配置为电平触发的中断。

GPIO 中断掩码

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