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


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

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

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

Как правило, этот второй ISR принадлежит драйверу для периферийного устройства, который утверждал прерывание на контакте GPIO. Сведения о том, как драйвер периферийного устройства логически подключает свой ISR к контакту прерывания GPIO, см. в разделе Ресурсы прерываний на основе GPIO.