функция GPIO_CLX_AcquireInterruptLock (gpioclx.h)

Метод GPIO_CLX_AcquireInterruptLock получает блокировку прерывания на банке контактов в контроллере ввода-вывода общего назначения (GPIO).

Синтаксис

void GPIO_CLX_AcquireInterruptLock(
  [in] PVOID   Context,
  [in] BANK_ID BankId
);

Параметры

[in] Context

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

[in] BankId

Идентификатор для этого банка контактов GPIO. Если N — количество банков в контроллере GPIO, BankId — это целое число в диапазоне от 0 до N–1.

Возвращаемое значение

None

Remarks

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

GpioClx ISR вызывает реализованные драйвером функции обратного вызова для доступа к состоянию прерывания и включения регистров в контроллере GPIO. В зависимости от возможностей контроллера GPIO ISR вызывается в DIRQL или в PASSIVE_LEVEL. Дополнительные сведения см. в разделе Обратные вызовы, связанные с прерыванием.

Если isR GpioClx обращается к этим регистрам прерываний в DIRQL, GPIO_CLX_AcquireInterruptLock вызывает IRQL вызывающего потока в DIRQL, в котором выполняется ISR. Если ISR выполняется на PASSIVE_LEVEL, этот метод не изменяет IRQL вызывающего потока.

Метод GPIO_CLX_ReleaseInterruptLock освобождает блокировку прерывания, полученную при предыдущем вызове GPIO_CLX_AcquireInterruptLock. Параметр BankId указывает банк, на который влияет блокировка. Чтобы освободить блокировку банка, параметр BankIdGPIO_CLX_ReleaseInterruptLock вызова должен совпадать с параметром BankIdGPIO_CLX_AcquireInterruptLock вызова, который приобрел блокировку. Если вызов GPIO_CLX_AcquireInterruptLock вызвал IRQL вызывающего потока, GPIO_CLX_ReleaseInterruptLock восстанавливает исходный IRQL этого потока.

Драйвер контроллера GPIO может независимо получать и освобождать блокировки прерываний на различных банках в контроллере GPIO. Тем не менее, это неустранимая ошибка для водителя, чтобы попытаться получить блокировку на определенном банке, если водитель уже держит блокировку на этом банке.

Если параметр Context имеет значение NULL или указывает на недопустимый контекст устройства GPIO, этот метод вызывает ошибку проверка в отладочных сборках GpioClx.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть gpioclx.h
Библиотека Msgpioclxstub.lib
IRQL DIRQL или PASSIVE_LEVEL. См. заметки.

См. также раздел

GPIO_CLX_ReleaseInterruptLock