Поделиться через


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

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

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

Маскирование прерывания не очищает и не отключает прерывание. Если прерывание GPIO включено, активно и замаскировано, это прерывание приводит к тому, что устройство контроллера GPIO сигнализирует процессору о запросе прерывания.

Бит маски прерывания GPIO не действует, пока прерывание GPIO отключено. Функция обратного вызова CLIENT_EnableInterrupt задает бит маски для прерывания равным нулю; то есть прерывание изначально отменяется после включения.

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

Некоторые контроллеры GPIO реализуют в оборудовании регистры маски прерываний, которые отделены и отличаются от регистров включения прерываний.

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