Прерывания

Микропроцессорные системы могут обмениваться информацией с большим количеством и разнообразным набором периферийных устройств. К ним относятся дисплеи на электронно-лучевых трубках для графического отображения данных, печатающие устройства, панели ключевого управления, цифровые индикаторы, накопители на магнитных лентах, дисках, барабанах, релейные переключатели, шаговые двигатели, цифро-аналоговые (для вывода) и аналого-цифровые (для ввода) преобразователи и пр.

Для связи с этими устройствами работу МП системы необходимо прервать на время, необходимое для обмена, и организовать ее по программе, обеспечивающей такой обмен, после чего вновь приступить к выполнению рабочей программы с того места, где она была прервана. Кроме обеспечения связи с периферийными устройствами прерывания служат для останова МП в конце программы или по сигналу оператора, а также при выполнении ошибочной команды, при переполнении внутренних регистров или ОЗУ.

Прерывается программа работы по сигналу запроса на прерывание, который вырабатывается либо внешним устройством непосредственно, если оно подготовилось ко вводу информации в МП систему, либо в ответ на сигнал опроса, посылаемый из МП системы, если в ходе выполнения программы необходим ввод или вывод информации. Подпрограмма обслуживания или организации прерываний (так называют программу ввода/вывода) хранится в ПЗУ и может быть не одна. Количество таких подпрограмм определяет разнообразие устройств и способов обмена информацией с ними. В этом случае говорят о векторном прерывании, т. е. о прерывании, выбранном из некоторого множества возможных с указанием обслуживаемого устройства.

В ходе выполнения подпрограммы обслуживания прерывания может возникнуть необходимость прервать и ее для обмена информацией с другим периферийным устройством, имеющим старший приоритет, после чего вернуться к предыдущему прерыванию, а затем к рабочей программе. Количество приоритетов или уровней, а также наличие векторных прерываний характеризуют «коммуникабельность» МП. Обслуживание прерываний может осуществляться с помощью стека.

Некоторые, особенно первые модели МП не имели готовых подпрограмм обслуживания прерываний, «зашитых» в ПЗУ, что заставляло программиста каждый раз, когда в этом появлялась необходимость, организовывать в рабочей программе останов и обмен информацией с устройствами ввода/вывода.

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

На рис. 8 показаны временная диаграмма выполнения трех прерываний с различными приоритетами и изменение содержания стековых регистров при их обслуживании.

Снимок

В интервале Т0—Т1 выполняется основная программа, и к моменту T1, соответствующему сигналу прерывания с некоторым приоритетом, верхний регистр стека оказывается заполненным командным словом, к которому программа должна была бы перейти, если бы не произошло прерывание в этот момент.

Первое прерывание обслуживается до прихода сигнала на второе прерывание, имеющее старший приоритет, при этом к моменту Т2 верхний регистр стека заполняется командным словом из программы обслуживания первого, к которому надо будет перейти, чтобы продолжить эту программу. По окончании программы второго прерывания в момент Т3 это командное слово выбирается из стека (пришло последним, а вышло первым — в чем и «хитрость» стека!) и продолжает программу первого прерывания до прихода в момент Т4 следующего прерывания, также имеющего старший приоритет. По окончании обслуживания этого прерывания в момент Т5 опять продолжается исполнение первого, после чего в момент Т6 происходит переход к выполнению основной программы, начиная с командного слова, записанного в стек первым. Стек при этом полностью очищается.

Таким образом, наиболее длительное первое прерывание, имеющее младший приоритет, выполнялось «по кускам» в интервалах Т1—Т2, Т3—Т4, Т5—Т6,