ВВ ПО ПРЕРЫВАНИЯМ
Для сокращения непроизводительных потерь времени процессора за счет циклов ожидания при программном обмене, т.е. когда процессор не может заниматься ничем, кроме программы ВВ, используют обмен по прерыванию.
При готовности к обмену ПУ посылает в процессор запрос на обслуживание – сигнал INT (запрос прерывания). Этот сигнал появляется в произвольные моменты времени, а следовательно, и в произвольной точке текущей программы. Поскольку заранее неизвестно, в какой точке программы и какие ПУ инициируют прерывания, непосредственно в программе команды ВВ использовать нельзя.
Общие вопросы организации системы прерываний в ЭВМ рассмотрены ранее
в гл. 6. Некоторые вопросы, связанные с обслуживанием прерываний, рассмотрены при изучении команд RST и RET. Между тем использование конкретного процессора вносит свои особенности в последовательность операций по обслуживанию прерывания. Для микроЭВМ, построенной на базе МП комплекта КР580, эта последовательность выглядит следующим образом:
1. Контроллер ПУ или адаптер промежуточного интерфейса генерирует сигнал запроса прерывания, который подается на вход INT процессора непосредственно (если ПУ одно) или через контроллер прерываний (если ПУ много) в виде общего сигнала прерывания.
2. При наличии нескольких ПУ в контроллере прерывания осуществляется идентификация прерывающего устройства (т.е. выясняется, откуда поступил сигнал INT, и его приоритет).
3. Процессор завершает текущую команду и, если прерывание разрешено, формирует сигнал INTA (подтверждение прерывания), который выдается во внешнюю цепь (в частности, в системный контроллер), а также сбрасывает внутренний триггер разрешения прерываний, состояние которого идентифицируется сигналом INTE.
4. Содержимое PC (счетчик команд) автоматически запоминается в стеке.
5. Происходит переход к подпрограмме обслуживания данного ПУ (обработчику), при этом выполняются следующие операции:
- запоминание состояния прерванной программы, которое должно быть предусмотрено пользователем, т.е.
составителем подпрограммы ( это слово состояния процессора PSW º (A) (РгП), а также содержимое РОН, используемых в подпрограмме обслуживания прерывания); обычно для запоминания используют стек. В ряде современных процессоров PSW автоматически сохраняется в стеке, как и содержимое счетчика PC;
- выполнение собственно программы обслуживания процесса ВВ;
- восстановление состояния прерванной программы (т.е. извлечение и загрузка в соответствующие регистры PSW и содержимого РОН из стека).
6. Возобновляется выполнение прерванной программы по команде RET, являющейся обязательной последней командой обработчика.
Следует отметить, что реакция процессора на прерывание очень похожа на вызов подпрограммы, несмотря на то, что обращение к подпрограмме происходит в фиксированных точках программы, а прерывания возникают в случайных точках программы. Однако внешняя аналогия реакции на прерывание и вызов подпрограммы позволяют считать прерывание аппаратным вызовом подпрограммы (с помощью сигнала INT).
Поскольку сигнал на вход INT может поступить в произвольной точке программы, процессору необходимо проверять наличие сигнала запроса прерывания до перехода к следующей команде. В МП КР580 анализ входа INT осуществляется в такте Т2 последнего машинного цикла каждой команды.
Действия процессора по обслуживанию запросов прерывания можно пояснить следующим упрощенным алгоритмом, представленным на рис. 8.2.
Следует отметить, что внутренний триггер разрешения прерываний INTE называется также маской прерывания. Состояние этого триггера идентифицирует сигнал с такой же мнемоникой. Если INTE = 0, то прерывания запрещены (замаскированы) и процессор не реагирует на сигнал INT = 1. Этот триггер управляется программно с помощью команд EI (разрешение прерывания) и DI (запрещение прерывания).
Идентификация прерывающего устройства осуществляется с учетом приоритетов либо программными, либо аппаратными методами, рассмотренными ранее
в гл. 6.
В МП - комплекте КР580 аппаратный полинг реализуется специальной БИС программируемого контроллера прерываний КР580BH59, обеспечивающей прием и обработку восьми сигналов прерывания. Возможно совместное использование восьми БИС, что увеличивает число сигналов до 64. С каждым входом сигнала прерывания ассоциируется адрес памяти, который выдается на шину данных в ответ на сигнал после выдачи кода операции CALL (вызов подпрограммы). Следует иметь в виду, что для формирования адреса вектора прерывания в BH59 используется трехбайтовая команда CALL. Все три байта команды CALL передаются по ШД последовательно в процессор в ответ на сигнал системного контроллера . Адреса, соответствующие всем входам запросов прерываний, расположены равномерно через 4 или 8 байт и обычно содержат команды переходов JMP к соответствующим подпрограммам. Интервалы 4 или 8 байт задаются командой инициализации контроллера. Для каждого контроллера 32- или 64-байтные области памяти могут находиться в любом месте ОП, начиная с четной границы. Старшие биты A15-A6
адреса загружаются в регистр контроллера командой инициализации, а младшие биты A4-A0 формируются в контроллере. Разряд A5
программирует интервал в 4 или 8 байт для каждого вектора прерывания.
Контроллер КР580BH59 является законченным устройством, позволяющим реализовывать достаточно сложные многоуровневые системы прерывания. При этом его программирование, т.е. формирование приказов инициализации и рабочих приказов, представляет определенные трудности.
Однако во многих случаях от контроллера прерываний не требуется такой многофункциональности. Простой контроллер прерываний можно построить на обычных логических схемах или с использованием специальной БИС приоритетных прерываний К589ИК14 и многорежимного буферного регистра К589ИР12. В этом случае для формирования адреса вектора прерывания используется 1-байтовая команда RST (ее исполнение уже рассматривалось). Адреса, соответствующие всем входам запросов прерываний, располагаются равномерно через 8 байт от 0000H до 0038H, т.е.под векторы прерываний зарезервированы первые 64 ячейки ОП.