Принцип обмена по прерываниям показан на рис. 1:
Рис. 1.  
Внешнее устройство по специальной линии посылает микропроцессору сигнал запроса на прерывание. Микропроцессор реагирует на него и переходит к подпрограмме обработки этого прерывания.
Предположим, что в системе имеется несколько устройств, использующих обмен по прерываниям. Логично, что в этом случае каждое их них будет посылать запрос на прерывание по своей отдельной линии, чтобы микропроцессор мог определить, какое же устройство запрашивает обмен. Однако такое решение имеет два серьезных недостатка:
  1. Количество выводов МП ограничено, следовательно, количество входов запросов на прерывание также будет ограничено, следовательно, у системы будет жесткое ограничение на количество устройств, могущих участвовать в обмене по прерываниям с МП.
  2. Если два или более устройства одновременно запросят обмен по прерываниям, возникает конфликтная ситуация, так как одновременно может быть выполнен только один запрос.
Для устранения указанных недостатков применяется программируемый контроллер прерываний, который включается в систему между МП и устройствами, запрашивающими прерывания так, как показано на рис. 2.
Рис. 2.  
Внешние устройства подключаются к контроллеру прерываний, а он в свою очередь — к микропроцессору. Контроллер прерываний решает три основные задачи:
  1. Передача в МП сигналов запросов на прерывание, поступивших от внешних устройств.
  2. Информирование МП о том, какое именно устройство запросило прерывание (МП должен это знать для перехода на выполнение соответствующей подпрограммы обработки прерывания, а сам он это определить не может, так как все запросы приходят к нему по одной линии INT).
  3. Разрешение конфликтных ситуаций, когда два или более устройства одновременно выдают запрос на прерывание. В этом случае контроллер должен выбрать из них какое-то одно в соответствии с теми приоритетами, которые назначены каждому устройству при настройке (программировании) контроллера. Первым будет обработан запрос от устройства, имеющего максимальный приоритет среди всех запросивших.
Обобщенная архитектура программируемого контроллера прерываний представлена на рис. 3.
Рис. 3.  
Буфер шины данных, обеспечивает подключение к контроллера прерываний к шине данных. Подключение к ШД необходимо для:
Блок управления управляет работой контроллера, обеспечивая обмен данными между ним и МП (на этапе программирования контроллера), формирование сигнала INT и передачу в МП номера устройства, запросившего обмен.
Регистр управления содержит информацию о режиме работы контроллера. Информация в него заносится микропроцессором на этапе программирования (настройки) контроллера. К программируемым (настраиваемым) параметрам относятся, в частности, номера устройств для каждой линии запроса, приоритеты, схемы изменения приоритетов, наличие контроллеров следующего уровня и т.п.
Регистр запросов фиксирует запросы, приходящие от внешних устройств. К линиям IRQ подключаются ВУ, по ним передаются запросы на прерывание.
Регистр маскирования предназначен для "маскирования" (запрещения обработки) запросов на прерывание для определенного входа (входов). Регистр маскирования содержит по одному биту на каждый вход запроса от внешнего устройства. Если значение бита равно "1", обработка прерывания по данному входу разрешена, если "0" — запрещена. Значение в регистр маскирования записывается МП на этапе программирования контроллера.
Контроллер прерываний в общем случае может поддерживать разные схемы приоритетов.
Схема жестких приоритетов. Каждому устройству (входу IRQ) назначается фиксированный приоритет, который не меняется во время работы контроллера. Недостаток такой схемы — если устройство с высоким приоритетом будет интенсивно выдавать запросы, запросы от устройств с более низким приоритетом подолгу не будут обрабатываться. Схема используется в том случае, если в системе явно присутствует устройство, которому необходимо обеспечить первоочередное обслуживание в обработке прерываний.
Схема циклически изменяющихся приоритетов. Приоритеты изменяются по следующей схеме: устройство, запрос от которого был обработан последним, получает наименьший приоритет. Таким образом, устройство, которое дольше всех не обслуживалось, имеет максимальный приоритет. При этой схеме, в среднем, каждое устройство имеет равные шансы быть обслуженным. Такая схема используется в случае, если все устройства являются равноправными.
Кроме передачи сигнала запроса, контроллер должен сообщить микропроцессору номер устройства. Номер выдается контроллером на шину данных после получения от МП сигнала подтверждения прерывания INTA (рис. 4).
Рис. 4.  
На рис. 4 приведена временная диаграмма работы контроллера прерываний по обслуживанию запроса от устройства. Устройство выдает запрос на обмен по прерыванию на линию IRQ. Контроллер "передает" запрос в МП по линии INT (перед этим решается, если необходимо, задача приоритетов, проверяется, не запрещена ли обработка прерывания через регистр маскирования). Спустя некоторое время (разрыв на временной диаграмме) микропроцессор активизирует сигнал INTA, сообщая таким образом, что он готов начать процедуру обмена по прерываниям. В ответ на это контроллер выдает на шину данных номер устройства, запросившего прерывание. Микропроцессор загружает этот номер с шины данных и переходит к выполнению соответствующей подпрограммы обработки прерывания. Адрес подпрограммы МП определяет по номеру устройства с помощью специальной таблицы (таблицы векторов прерываний), в которой каждому номеру устройства соответствует определенный адрес подпрограммы.
Некоторые контроллеры вместо номера устройства выдают в МП непосредственно адрес подпрограммы обработки прерывания.
Разрыв на временной диаграмме вызван тем, что после получения сигнала запроса, МП может не сразу перейти к обработке прерывания. Как минимум, он должен завершить выполнение текущей команды. Кроме того, обработка прерываний в МП может быть временно запрещена — в этом случае сигнал INTA будет активизирован после того, как обработка прерываний снова будет разрешена.
Количество входов для подключения внешних устройств в любом контроллере прерываний ограничено и может возникнуть ситуация, когда необходимо подключить большее количество устройств, чем имеется входов у контроллера. В этом случае используется каскадирование контроллеров прерываний. Второй контроллер подключается к первому как одно из внешних устройств — выход INT второго контроллера (контроллера второго уровня) подключается к одному из входов IRQ первого контроллера (контроллера первого уровня). При этом первому контроллеру на этапе программирования указывается, что к одному из его входов подключено не простое устройство, а другой КП.