Прерывания GPIO

Некоторые устройства контроллера ввода-вывода общего назначения (GPIO) могут настроить свои контакты GPIO для работы в качестве входных данных запроса прерывания. Эти входные данные запроса прерывания управляются периферийными устройствами, которые физически подключены к контактам GPIO. Драйверы для этих контроллеров GPIO могут включать, отключать, маски, демаск и очищать запросы прерываний для отдельных контактов GPIO.

Поддержка прерываний GPIO необязательна. Для расширения платформы GPIO (GpioClx) не требуются контроллеры GPIO для поддержки прерываний GPIO.

В этом разделе

Раздел Описание

Первичные и вторичные прерывания

Обработка прерываний GPIO по своей сути является двухэтапным процессом. Прерывание с контроллера ввода-вывода общего назначения (GPIO), которое вызывает выполнение подпрограммы обслуживания прерываний (ISR) расширения платформы GPIO (GpioClx), называется основным прерыванием. Этот ISR сопоставляет контакт прерывания GPIO с глобальным системным прерыванием (GSI) и передает этот GSI на уровень аппаратной абстракции (HAL). HAL создает дополнительное прерывание для запуска второго ISR, логически подключенного к контакту GPIO через этот GSI. Этот процесс показан на схеме в обзоре поддержки драйверов GPIO.

Ресурсы прерываний на основе GPIO

Драйверы для периферийных устройств, которые отправляют прерывания в контакты ввода-вывода общего назначения (GPIO), получают прерывания GPIO как абстрактные ресурсы прерываний Windows. Драйверы платформы драйверов в режиме ядра (KMDF) получают эти ресурсы с помощью функций обратного вызова событий EvtDevicePrepareHardware .

IsR пассивного уровня

Начиная с Windows 8, драйверы платформы драйверов в режиме ядра (KMDF) и платформы драйверов пользовательского режима (UMDF) могут, как вариант, регистрировать свои подпрограммы обслуживания прерываний (ISR) для запуска на пассивном уровне.

Обратные вызовы, связанные с прерыванием

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

Синхронизация прерываний для драйверов контроллера GPIO

Драйверы контроллера GPIO могут вызывать методы GPIO_CLX_AcquireInterruptLock и GPIO_CLX_ReleaseInterruptLock для получения и освобождения блокировок прерываний, которые реализуются внутренним расширением платформы GPIO (GpioClx). Код драйвера, который выполняется в IRQL = PASSIVE_LEVEL может вызывать эти методы для синхронизации с подпрограммой службы прерываний (ISR) в GpioClx. GpioClx выделяет отдельную блокировку прерываний для каждой банки контактов в контроллере GPIO.

Включение и отключение общих прерываний GPIO

В некоторых случаях строки запроса прерывания с двух или более периферийных устройств могут подключаться к одному и тому же физическому контакту ввода-вывода общего назначения (GPIO). Закрепление GPIO для общей строки прерывания обычно настраивается для прерываний с активацией уровня.

Маски прерываний GPIO

Контакты ввода-вывода общего назначения (GPIO), настроенные в качестве входных данных прерывания, могут маскироваться и демаскироваться в дополнение к включению и отключению.