Cтраница 3
Процедуры обработки прерываний могут вызываться обычным образом прямо из внешнего блока программы или из другой процедуры. Однако следует помнить о том, что всегда нужно снимать блокировку прерываний на выходе из процедуры обработки, даже если эта процедура была вызвана не внешним прерыванием. [31]
![]() |
Структурная схема К589ИКН.| Временная диаграм ма работы К589ИК14. [32] |
Допустим, по входу JR5 пришел запрос на прерывание. Он записывается в регистр запросов на прерывание, так как триггер блокировки прерывания сброшен. [33]
Большинство команд подпрограммы INCHR входит в критическую секцию. Команды SETI и CLRI осуществляют управление разрядом I маски прерываний для разрешения или блокировки прерываний в критической секции. [34]
После выполнения команд & 0 я k l выход в ячейку прерывания 0020 возможен за командой k 2 сразу после освобождения регистра вывода ТБПМ. Передача управления ячейке 0020 обеспечивает дальнейший выход на начало прерывающей программы 0077, а также блокировку прерывания по всем причинам. Первая команда прерывающей программы запоминает результат последней выполненной команды основной программы. Следующие команды обеспечивают запоминание содержимого индексной ячейки и запись в нее начального значения, необходимого для организации цикла печати в прерывающей программе. Далее команды изменяют содержимое ячейки прерывания и передают управление команде печати. [35]
После окончания реакции на прерывание управление должно быть передано на прерванную сигналом программу. Для этого необходимо восстановить состояние всех регистров, принимавших участие в реакции на прерывание, iB котором они находились до поступления сигнала, поэтому состояние этих регистров к моменту прихода сигнала прерываний должно быть помещено в память до их использования в реакции, а лучше всего в самом начале при условии блокировки остальных прерываний. [36]
При возникновении запроса прерывания программа обработки проверяет наличие сигнала блокировки прерывания. Организация системы блокировки особо важна в АСНИ в режимах реального времени, когда при определенных обстоятельствах нельзя нарушать управление экспериментом. Иногда блокировка прерываний реализуется аппаратно. [37]
Триггер неверных десятичных данных ( ТНДД) хранит информацию о правильности задания десятичных данных; он устанавливается в состояние 1 при неверной десятичной цифре на любом входе АЛБ. Триггер вводо-выводных и внешних запросов ( ТВВВ) устанавливается в состояние 1 при появлении запроса на внешние или вводо-выводные прерывания, а также на корректировку таймера. Триггер блокировки прерываний ( ТБП) используется для блокировки прерываний по защите, адресации и машинному контролю во время выполнения микропрограммы гашения системы. [38]
Триггер неверных десятичных данных ( ТНДД) хранит информацию о правильности задания десятичных данных; он устанавливается в состояние 1 при неверной десятичной цифре на любом входе АЛБ. Триггер вводо-выводных и внешних запросов ( ТВВВ) устанавливается в состояние 1 при появлении запроса на внешние или вводо-выводные прерывания, а также на корректировку таймера. Триггер блокировки прерываний ( ТБП) используется для блокировки прерываний по защите, адресации и машинному контролю во время выполнения микропрограммы гашения системы. [39]
Команды с кодами операций - Об и - 36 фактически вступают в силу после выполнения следующей за ними команды. Это значит, что после разрешения или снятия блокировки прерывание при наличии причины задержится на одну команду. Если же команда с операцией - 06 запрещает прерывание, то оно может все-таки произойти непосредственно после ее выполнения. Поэтому команда снятия блокировки прерывания должна передавать управление обязательно в ячейку обратной связи программы прерывания. Момент появления прерывания известен только для режима псевдокод. Результатом предыдущего действия при таком прерывании является сама команда с модифицированными адресами. [40]
Дополнительное управление событиями осуществляется с помощью операторов CONNECT, DISCONNECT и SIGNAL. Первый снимает блокировку с прерывания, возникающего в момент возникновения события. Это позволяет разбудить процесс или процессы, ждавшие указанного события. Оператор DISCONNECT включает блокировку прерываний от данного события. [41]
Наибольший интерес в этом примере представляет блок обработки прерываний - INTERIO. В тот момент, когда появляется сигнал прерывания от схем ввода-вывода и маска в PSW разрешает эти прерывания, происходит стандартная процедура обновления PSW. Текущее значение регистра PSW записывается в двойное слово с адресом 56, причем в его разрядах 16 - 23 ( байты 2 - 3 PSW) находится номер внешнего устройства, выдавшего сигнал прерывания. Затем в регистр PSW переписывается двойное слово с адресом 120, в котором мы заготовили переход на команду INTERIO с блокировкой прерываний. [42]
![]() |
Пример построения схемы для обработки более восьми прерываний.| Варианты применения микросхемы К589ИК14. [43] |
В нашем случае четвертый триггер регистра текущего со-гтояния обеспечивает лог. О на входе схемы ИЛИ, а схема сравнения приоритетов выдает на эту схему лог. Этим же сигналом по входу 5 триггер блокировки прерывания устанавливается в 1, тем самым запрещая прием новых запросов на прерывание в регистр запросов на прерывание и подготавливая триггер прерывания к сбросу в нулевое состояние. Вторым импульсом по входу CLK происходит сброс триггера прерывания в нуле-пое состояние, что означает окончание сигнала подтверждения прерывания. [44]