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 控制器驱动程序例程直接访问。 否则,GPIO 控制器的寄存器只能通过 I/O 请求访问,GPIO 控制器驱动程序在 IRQL = PASSIVE_LEVEL 发送这些请求。 有关详细信息,请参阅“备注”。

ActiveInterruptsAutoClearOnRead

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

FormatIoRequestsAsMasks

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

DeviceIdlePowerMgmtSupported

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 结构的 Flags 成员是CONTROLLER_ATTRIBUTE_FLAGS结构。

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

有关 MemoryMappedController 标志位的详细信息,请参阅 与中断相关的回调

双主动中断是边缘触发的中断,其中断请求由中断线路上的低到高或高到低转换指示。 在从低到高转换向中断请求发出信号后,中断线将保持高位,直到高到低转换发出下一个中断请求的信号。 同样,在高到低转换发出中断请求信号后,中断线将保持低位,直到从低到高转换发出下一个中断请求的信号。

一键式设备通常连接到主动中断。 当用户按下按钮时会生成中断,释放按钮时会生成另一个中断。 如果设备驱动程序的 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