объединение CONTROLLER_ATTRIBUTE_FLAGS (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). В противном случае дебоuncing выполняется аппаратным оборудованием, а программное обеспечение, эмулированное дебоунирование не требуется.
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, вызывает функции обратного вызова, связанные с прерыванием драйвера, для обработки прерывания. Эти функции используют запросы ввода-вывода для передачи данных и управления данными из регистров контроллера GPIO. Так как эти запросы ввода-вывода отправляются из потока пассивного уровня, их можно отправлять синхронно.
Дополнительные сведения о бите флага MemoryMappedController см. в разделе Interrupt-Related обратных вызовов.
Активное прерывание — это прерывание, инициируемое краем, для которого запрос прерывания указывается на низком или низком переходе на линию прерывания. После перехода с низким уровнем до высокого уровня сигнализирует о запросе прерывания, линия прерывания остается высокой до тех пор, пока переход с высоким к низким уровням сигнализирует следующему запросу прерывания. Аналогичным образом, после перехода с высоким уровнем до низкого уровня сигнализирует о запросе прерывания, линия прерывания остается низкой до тех пор, пока переход с низкой до высокой нагрузки сигнализирует о следующем запросе прерывания.
Устройство push-button обычно подключено к активному прерыванию. Прерывание создается, когда пользователь нажимает кнопку, а при освобождении кнопки создается еще одно прерывание. Если ISR драйвера устройства подключен к активному прерыванию, isR вызывается как на росте, так и на падающих краях линии сигнала.
Некоторые контроллеры GPIO реализуют входные данные с активными прерываниями в оборудовании. Однако если оборудование не поддерживает активные прерывания, драйвер контроллера GPIO задает флаг EmulateActiveBoth, чтобы запросить, что GpioClx эмулирует активные прерывания в программном обеспечении. Драйвер, задающий этот флаг, должен реализовать функцию обратного вызова CLIENT_ReconfigureInterrupt. Чтобы эмулировать пин-код прерывания active-both, GpioClx вызывает эту функцию, чтобы также настроить пин-код GPIO для прерываний с высоким и активным низким уровнем.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Поддерживается начиная с Windows 8. |
заголовка | gpioclx.h |