GpioClx I/O 和中断接口

通常情况下,GPIO 控制器的客户端是连接到 GPIO 引脚的外围设备的驱动程序。 这些驱动程序使用 GPIO 引脚作为低带宽数据通道、设备选择器输出和中断请求输入。 外围设备驱动程序打开到 GPIO 引脚的逻辑连接,这些引脚已配置为数据输入或输出。 它们使用这些连接将 I/O 请求发送到这些引脚。 另外,外围设备驱动程序可以通过逻辑方式将其中断服务例程连接到已配置为中断请求输入的 GPIO 引脚。

GPIO 引脚是系统管理的硬件资源。 在外围设备驱动程序启动其设备之前,即插即用 (PnP) 管理器会为此驱动程序分配硬件资源列表。 此硬件资源列表可能包括以下内容:

  • GPIO I/O 资源。 此资源是一组配置为数据输入或数据输出的一个或多个 GPIO 引脚。 GPIO I/O 资源是一种新的 Windows 资源类型,从Windows 8开始。
  • 中断。 此中断资源可以实现为配置为中断输入的 GPIO 引脚,但可以通过可编程中断控制器或处理器封装上的专用中断引脚实现。 (HAL) 中断抽象的硬件抽象层会隐藏这些实现详细信息,客户端驱动程序可以安全地忽略这些详细信息。

在外围设备驱动程序可以使用一组 GPIO 引脚作为数据输入或输出之前,驱动程序必须打开与这些引脚的逻辑连接。 例如, (KMDF) 驱动程序的内核模式驱动程序接口 获取 WDFIOTARGET 句柄来标识连接。 驱动程序使用此句柄将 I/O 请求发送到引脚。 具体而言,客户端驱动程序发送 IOCTL_GPIO_WRITE_PINSIOCTL_GPIO_READ_PINS I/O 控制请求,以将数据写入输出引脚并从输入引脚读取数据。 有关演示如何连接到一组 GPIO I/O 引脚的代码示例,请参阅以下主题:

将 KMDF 驱动程序连接到 GPIO I/O 管脚

若要使用中断资源接收中断,外围设备驱动程序必须以逻辑方式将中断服务例程 (ISR) 连接到中断。 例如,内核模式驱动程序可以通过调用 WdfInterruptCreate 方法或 IoConnectInterruptEx 例程建立此连接。 连接后,当外围设备向 GPIO 引脚或中断控制器输入发出中断请求信号时,驱动程序的 ISR 将运行。 有关中断的详细信息,请参阅 创建中断对象

GPIO 框架扩展 (GpioClx) 管理其客户端的外围设备驱动程序的 I/O 连接和中断连接。 PnP 管理器可能会将 GPIO 控制器设备上的不同组 GPIO 引脚分配给不同的客户端驱动程序。 其中一些引脚配置为数据输入或输出,有些引脚配置为中断请求输入。

当客户端驱动程序收到中断请求或将 I/O 请求发送到 GPIO 引脚时,GpioClx 会调用由 GPIO 控制器驱动程序实现的事件回调函数。 这些回调访问 GPIO 控制器设备中的硬件寄存器。 通过这些函数调用,GpioClx 读取数据输入、写入数据输出,并通过查询、启用、屏蔽、清除等方式管理 (中断请求,这些引脚配置为中断输入的 GPIO 引脚) 。

GpioClx 执行管理 I/O 和中断客户端打开的连接所需的所有处理。 GPIO 控制器驱动程序(通过将这些连接的管理委托给 GpioClx)仅负责访问 GPIO 控制器设备中的硬件寄存器的相对简单任务。 GPIO 控制器驱动程序不需要知道为其进行特定访问的客户端驱动程序。