CONTROLLER_ATTRIBUTE_FLAGS union (gpioclx.h)

CONTROLLER_ATTRIBUTE_FLAGS 结构描述常规用途 I/O(GPIO) 控制器设备的硬件属性。

语法

typedef union _CONTROLLER_ATTRIBUTE_FLAGS {
  struct {
    ULONG MemoryMappedController : 1;
    ULONG ActiveInterruptsAutoClearOnRead : 1;
    ULONG FormatIoRequestsAsMasks : 1;
    ULONG DeviceIdlePowerMgmtSupported : 1;
    ULONG BankIdlePowerMgmtSupported : 1;
    ULONG EmulateDebouncing : 1;
    ULONG EmulateActiveBoth : 1;
    ULONG IndependentIoHwSupported : 1;
    ULONG Reserved : 24;
  };
  ULONG  AsULONG;
} CONTROLLER_ATTRIBUTE_FLAGS, *PCONTROLLER_ATTRIBUTE_FLAGS;

成员

MemoryMappedController

GPIO 控制器是否为内存映射。 如果设置了此标志,GPIO 控制器的硬件寄存器将映射到内存地址,并且可由在 DIRQL 上运行的 GPIO 控制器驱动程序例程直接访问。 否则,只能通过 I/O 请求(GPIO 控制器驱动程序在 IRQL = PASSIVE_LEVEL 发送)访问 GPIO 控制器的寄存器。 有关详细信息,请参阅“备注”。

ActiveInterruptsAutoClearOnRead

GPIO 控制器驱动程序读取活动中断时是否自动清除它们。 如果设置了此标志,GpioClx 假定中断在读取时自动清除,因此不会显式请求驱动程序在中断处理期间清除活动中断。 否则,GpioClx 显式请求清除活动中断。 有关详细信息,请参阅 GPIO_CLIENT_REGISTRATION_PACKETActiveInterruptsAutoClearOnRead 标志位的讨论。

FormatIoRequestsAsMasks

读取或写入 GPIO 引脚的回调函数是否应将读取和写入值指定为 64 位掩码。 如果设置了此标志,GpioClx 将使用将 GPIO 引脚值读入掩码的 CLIENT_ReadGpioPinsUsingMask 回调,并使用掩码来指定 GPIO 引脚进行设置和清除 CLIENT_WriteGpioPinsUsingMask 回调。 否则,GpioClx 使用 CLIENT_ReadGpioPinsCLIENT_WriteGpioPins 回调,这些回调使用引脚数数组来指定要访问的 GPIO 引脚。 有关详细信息,请参阅 GPIO_CLIENT_REGISTRATION_PACKETFormatIoRequestsAsMasks 标志位的讨论。

DeviceIdlePowerMgmtSupported

GPIO 控制器是否支持设备级电源管理。 如果设置了此标志,则当 GPIO 控制器处于空闲状态(即没有与控制器的活动连接时),GPIO 控制器可以处于低功率(D3)状态。 否则,每当控制器打开时,GPIO 控制器将保持完全打开(D0)电源状态。

BankIdlePowerMgmtSupported

GPIO 控制器是否支持组件级电源管理。 如果设置了此标志,则 GPIO 控制器中的一个或多个银行可以独立于 GPIO 控制器中的其他银行进入低功率状态。 否则,银行的权力状态不能单独控制。 只能为寄存器为内存映射的 GPIO 控制器设置此标志,如 MemoryMappedController 标志指示。 通常,只有作为 SoC 模块集成部分的 GPIO 控制器才进行内存映射。 SOC 模块外部的 GPIO 控制器通常不映射内存。

EmulateDebouncing

无论是通过软件还是硬件对 GPIO 引脚的输入信号取消启动。 如果设置了此标志,GPIO 控制器需要通过 GPIO 框架扩展 (GpioClx) 在软件中模拟取消启动。 否则,硬件将执行反转,并且不需要软件模拟的反转。

EmulateActiveBoth

GPIO 控制器驱动程序是否需要 GpioClx 模拟软件中的主动-两个中断。 如果设置了此标志,GpioClx 将模拟软件中的主动-两个中断。 否则,GpioClx 不会模拟主动-两个中断。 有关详细信息,请参阅“备注”。

IndependentIoHwSupported

Reserved

保留供系统使用。

AsULONG

言论

CLIENT_CONTROLLER_BASIC_INFORMATION 结构的 标志 成员是一种 CONTROLLER_ATTRIBUTE_FLAGS 结构。

GpioClx 实现中断服务例程(ISR),以从 GPIO 控制器服务中断。 如果设置了 MemoryMappedController 标志位,则此 ISR 将直接访问 GPIO 控制器的硬件寄存器。 否则,ISR 会计划一个工作线程来处理中断,而此工作线程在 IRQL = PASSIVE_LEVEL 上运行,则调用驱动程序的中断相关回调函数来处理中断。 这些函数使用 I/O 请求向 GPIO 控制器的寄存器传输数据和控制信息。 由于这些 I/O 请求是从被动级线程发送的,因此可以同步发送这些请求。

有关 MemoryMappedController 标志位的详细信息,请参阅 Interrupt-Related 回调

主动-两个中断都是边缘触发的中断,中断请求由中断线的低到高或高到低转换指示。 在低到高转换发出中断请求信号后,中断线将保持高,直到高到低转换发出下一个中断请求的信号。 同样,在高到低转换发出中断请求信号后,中断线将保持低,直到低到高转换发出下一个中断请求的信号。

一个按下按钮设备通常连接到主动-两个中断。 当用户按下按钮时会生成中断,释放该按钮时会生成另一个中断。 如果设备驱动程序的 ISR 连接到主动-两个中断,则会在信号线的上升和下降边缘上调用 ISR。

某些 GPIO 控制器在硬件中实现主动-两个中断输入。 但是,如果硬件不支持主动-两个中断,GPIO 控制器驱动程序将设置 EmulateActiveBoth 标志,以请求 GpioClx 在软件中模拟主动-两个中断。 设置此标志的驱动程序必须实现 CLIENT_ReconfigureInterrupt 回调函数。 为了模拟主动-两个中断引脚,GpioClx 调用此函数,以便为主动-高和主动-低级别模式中断配置 GPIO 引脚。

要求

要求 价值
最低支持的客户端 从 Windows 8 开始支持。
标头 gpioclx.h

另请参阅

CLIENT_CONTROLLER_BASIC_INFORMATION

CLIENT_QueryActiveInterrupts

CLIENT_ReadGpioPins

CLIENT_ReadGpioPinsUsingMask

CLIENT_ReconfigureInterrupt

CLIENT_WriteGpioPins

CLIENT_WriteGpioPinsUsingMask

GPIO_CLIENT_REGISTRATION_PACKET