CONTROLLER_ATTRIBUTE_FLAGS union (gpioclx.h)

Структура CONTROLLER_ATTRIBUTE_FLAGS описывает аппаратные атрибуты устройства контроллера ввода-вывода общего назначения (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 сопоставляются с адресами памяти и могут напрямую обращаться с помощью подпрограммы драйвера контроллера GPIO, работающей в DIRQL. В противном случае доступ к регистрам контроллера GPIO можно получить только с помощью запросов ввода-вывода, которые драйвер контроллера GPIO отправляет в IRQL = PASSIVE_LEVEL. Дополнительные сведения см. в подразделе "Примечания".

ActiveInterruptsAutoClearOnRead

Указывает, очищаются ли автоматически активные прерывания, когда драйвер контроллера GPIO считывает их. Если этот флаг установлен, GpioClx предполагает, что прерывания автоматически очищаются при их чтении, и, следовательно, не запрашивает явным образом очистку активных прерываний драйвера во время обработки прерываний. В противном случае GpioClx явно запрашивает очистку активных прерываний. Дополнительные сведения см. в описании бита флага ActiveInterruptsAutoClearOnRead в GPIO_CLIENT_REGISTRATION_PACKET.

FormatIoRequestsAsMasks

Должны ли функции обратного вызова, которые считывают или записывают в контакты GPIO, указывать значения чтения и записи в виде 64-разрядных масок. Если этот флаг установлен, GpioClx использует CLIENT_ReadGpioPinsUsingMask обратных вызовов, которые считывают значения закрепления GPIO в маски, и CLIENT_WriteGpioPinsUsingMask обратные вызовы, использующие маски для назначения контактов GPIO для задания и очистки. В противном случае GpioClx использует CLIENT_ReadGpioPins и CLIENT_WriteGpioPins обратные вызовы, использующие массивы номеров контактов, чтобы указать, к каким контактам GPIO следует получить доступ. Дополнительные сведения см. в описании бита флага FormatIoRequestsAsMasks в GPIO_CLIENT_REGISTRATION_PACKET.

DeviceIdlePowerMgmtSupported

Поддерживает ли контроллер GPIO управление питанием на уровне устройства. Если этот флаг установлен, контроллер GPIO может быть переведен в состояние с низким энергопотреблением (D3) при бездействии (т. е. при отсутствии активных подключений к контроллеру). В противном случае контроллер GPIO остается в состоянии полного включения питания (D0) при включении контроллера.

BankIdlePowerMgmtSupported

Поддерживает ли контроллер GPIO управление питанием на уровне компонентов. Если этот флаг установлен, один или несколько банков в контроллере GPIO могут быть переведены в маломощное состояние независимо от других банков в контроллере GPIO. В противном случае состояние власти банков не может контролироваться по отдельности. Этот флаг можно задать только для контроллера GPIO, регистры которого сопоставлены с памятью, как указано в флаге MemoryMappedController . Как правило, в памяти сопоставляется только контроллер GPIO, который является интегрированной частью модуля SoC. Контроллер GPIO, который является внешним модулем SoC, обычно не сопоставляется с памятью.

EmulateDebouncing

Выполняется ли разбиение входных сигналов к контактам GPIO программным обеспечением или оборудованием. Если этот флаг установлен, контроллер GPIO должен эмулироваться в программном обеспечении с помощью расширения платформы GPIO (GpioClx). В противном случае разбиение выполняется оборудованием, а программное эмулирование не требуется.

EmulateActiveBoth

Указывает, требуется ли драйвер контроллера GPIO для эмуляции прерываний gpioClx в программном обеспечении. Если этот флаг установлен, GpioClx эмулирует активные прерывания в программном обеспечении. В противном случае GpioClx не эмулирует активные прерывания. Дополнительные сведения см. в подразделе "Примечания".

IndependentIoHwSupported

Reserved

Зарезервировано для системного использования.

AsULONG

Комментарии

Элемент Flags структуры CLIENT_CONTROLLER_BASIC_INFORMATION является CONTROLLER_ATTRIBUTE_FLAGS структурой.

GpioClx реализует подпрограмму обслуживания прерываний (ISR) для прерываний службы из контроллера GPIO. Если установлен бит флага MemoryMappedController , этот ISR напрямую обращается к аппаратным регистрам контроллера GPIO. В противном случае ISR запланирует рабочий поток для обработки прерывания, а этот рабочий поток, который выполняется в IRQL = PASSIVE_LEVEL, вызывает функции обратного вызова драйвера, связанные с прерыванием, для обработки прерывания. Эти функции используют запросы ввода-вывода для передачи данных и управления сведениями в регистры контроллера GPIO и из них. Так как эти запросы ввода-вывода отправляются из потока пассивного уровня, их можно отправлять синхронно.

Дополнительные сведения о бите флага MemoryMappedController см. в разделе Обратные вызовы, связанные с прерываниями.

Прерывание обоих активных данных — это прерывание, активировавшееся по краю, для которого запрос прерывания обозначается переходом от низкого к высокому или с высокой на низкий в строке прерывания. После перехода от низкого к высокому сигналу о запросе прерывания строка прерывания остается высокой до тех пор, пока переход с высокой на низкий не подает сигнал следующего запроса прерывания. Аналогичным образом, когда переход с высокой на низкий сигнализирует о запросе прерывания, строка прерывания остается низкой, пока переход от низкого к высокому не подает сигнал следующего запроса прерывания.

Устройство с push-кнопкой обычно подключается к прерыванию с активной стороны. Прерывание создается, когда пользователь нажимает кнопку, и другое прерывание, когда кнопка отпускается. Если 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