Прерывания


Главная / ЭКВМ / Техническая информация / Функции

13. Прерывания

 

13.1. Описание

В ЭВМ организован механизм прерываний, позволяющий автоматически реагировать на внешние и внутренние события такие как окончание счета таймеров, завершение последовательного и параллельного обмена, нажатие на кнопку клавиатуры. Функции прерывания выполняются только во время исполнения программы пользователя и не работают в режиме пошагового прохода. Настройка параметров прерываний возможна как из программы, так и в автоматическом режиме.

Прерывания имеют один уровень вложения. При возникновении прерывания выполнение основной программы откладывается, ЭВМ переходит на выполнение программы, обслуживающей событие, вызвавшее это прерывание. Если в это время происходят события, которые также необходимо обслужить по прерыванию, их обработка откладывается до завершения обработки текущего прерывания. Отложенные прерывания выстраиваются в очередь в порядке запрограммированных приоритетов. При выходе из текущего прерывания выполняется как минимум одна команда основной программы, затем выполняется прерывание, находящееся в заголовке очереди, вся очередь сдвигается, "хвост" очереди очищается. Очередь прерываний обрабатывается до тех пор, пока полностью не очистится. Если ЭВМ не успевает обработать все возникающие прерывания и очередь прерываний переполняется, программа останавливается, вырабатывается ошибка "Переполнение очереди". В ЭВМ реализована глубина очереди прерываний на 16 вложений.

Кроме автоматического вызова прерываний по событиям все прерывания можно вызвать программным способом, при этом оба способа равнозначны и вызванные ими прерывания обрабатываются одинаково.

Программа обработки прерывания оформляется в виде подпрограммы, в конце которой ставится команда РР В/О (PP RTN) - "Возврат из прерывания". Программа обработки прерывания загружается в память программ ЭВМ с адреса, которой запрограммирован для этого прерывания.

Обработка прерывания производится следующим образом. При возникновении прерывания ЭВМ заканчивает выполнение текущей команды основной программы, сохраняет в специальной памяти содержимое регистров X, Y, Z, T, X1 стека и содержимое первых 15-ти регистров памяти данных (от 0 до E). После этого ЭВМ сохраняет в стеке подпрограмм адрес возврата и загружает в программный счетчик адрес подпрограммы обработки прерывания. После выполнения программы обработки прерывания по команде "Возврат из прерывания" ЭВМ восстанавливает содержимое регистров стека и содержимое первых 15-ти регистров памяти данных, сбрасывает логику прерываний и загружает в программный счетчик адрес возврата в основную программу.

Если в программе обработки прерываний вместо команды "Возврат из прерывания" стоит команда возврата из подпрограммы "В/О", ЭВМ возвращается к выполнению основной программы, но считает, что прерывание не закончено, при этом регистры не восстанавливаются, логика прерываний не сбрасывается.

Если ЭВМ обращается к программе обработки прерывания не в прерывании, а напрямую, как к подпрограмме, то в этом случае команда "Возврат из прерывания" действует аналогично команде "В/О".

 

13.2. Регистры прерываний

 

13.2.1. Общее разрешение прерываний (R9130)

Доступ к регистру общего разрешения прерываний по записи и чтению обеспечивается при обращении к регистру памяти с адресом 9130. При записи числа 0, прерывания запрещены, при записи числа 1 - прерывания разрешены. Запись регистра возможна только при выполнении программы пользователя, при остановке программы разрешение прерываний автоматически сбрасывается. Одновременно с записью числа в регистр общего разрешения прерывания очищается очередь прерываний.

 

13.2.2. Регистры настройки прерываний (R9131 - R9146)

Всего ЭВМ поддерживает 16 прерываний с номерами от 1 до 16. Для каждого прерывания программируется два параметра - приоритет прерывания и адрес программы обработки прерывания в памяти программ ЭВМ (вектор прерывания). Доступ к параметрам обеспечивается при обращении к регистрам памяти с адресами от 9131 по 9146 соответственно, при этом приоритет прерывания заносится в регистр X стека, вектор - в регистр Y стека.

Приоритет может принимать целые значения от 0 до 255. При нулевом приоритете прерывание запрещено, при записи числа 1 и выше - прерывание разрешено и, чем больше число, - тем выше приоритет этого прерывания.

 

13.2.3. Регистры разрешения аппаратных прерываний (R9150 - R9158)

Каждое аппаратное прерывание имеет регистр разрешения. Доступ к регистрам обеспечивается при обращению к регистрам памяти ЭВМ, адреса которых соответствуют следующим событиям:

  • - 9150 окончание счета таймера 0;
  • - 9151 окончание счета таймера 1;
  • - 9152 окончание счета таймера 2 (окончание звукового сигнала);
  • - 9153 нажатие на кнопку клавиатуры;
  • - 9154 окончание передачи последовательного порта;
  • - 9155 окончание приема последовательного порта;
  • - 9156 переход сигнала BUSY параллельного порта из состояния лог. 1 в лог. 0;
  • - 9157 отпускание кнопки клавиатуры;
  • - 9158 окончание ожидания ответа последовательного порта.

Число, записанное в регистр разрешения, ставит в соответствие событию номер прерывания и может принимать целое значение от 0 до 16. При записи в регистр разрешения числа 0 - аппаратное прерывание запрещено, при записи другого числа - разрешено. Например, запись в регистр данных с адресом 9153 числа 1 разрешает прерывание по нажатию кнопки клавиатуры, при этом нажатие на кнопку вызывает прерывание номер 1 с параметрами (приоритетом и вектором), запрограммированными по адресу 9131 (см. 13.2.2).

 

13.3. Программный вызов прерываний (R9149)

Любое настроенное прерывание можно вызвать из программы пользователя путем записи в регистр с адресом 9149 числа, соответствующего номеру вызываемого прерывания (от 1 до 16). Если прерывание разрешено, оно вызывается в любом случае и не зависит от того свободен этот номер или используется для прерывания от внешнего события.

 

13.4. Сброс регистров прерываний (R9148)

Функция предназначена для удаления всех ранее записанных в регистры прерываний значений. Для выполнения сброса в регистр X стека записывается число 1. Операция производится при выполнении команды записи в регистр памяти с адресом 9148.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти по указанному адресу не изменяет стек ЭВМ.



НПП "СЕМИКО" (383) 271-01-25 (многоканальный)