Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория микропроцессорных систем АТ_Методическое...docx
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
3.72 Mб
Скачать

Управление приоритетами запросов прерываний

При работе МК возможная ситуация, когда одновременно поступают запросы на прерывание от разных источников. Для избежания конфликтов в МК51 реализована двухуровневая аппаратно-программная шкала приоритетов, соответственно которой устройство управления выбирает источник прерывания, который может быть обслуженным раньше. В соответствии с аппаратной шкалой приоритетность обслуживания запросов следующая: INT0 – TF0 – INT1 – TF1 – TI/RI.

Для любого из пяти источников (TF1, TF0, INT1, INT0, TI или RI) может быть установлен один из двух уровней приоритета - "высокий" или "низкий" - программным способом. В случае совпадения уровней приоритетов нескольких источников выбор высшего приоритета устройство управления проводит соответственно аппаратной (неизменной) шкале (см. также рис.16.2 или рис.29 в комплекте).

Например, если высокий приоритет выбран программистом для INT0 и TF1, то в случае одновременного запроса от этих источников сначала будет обслуженный запрос INT0, а потом TF1 и только после этого - остальные запросы в порядке TF0-INT1-(TI/RI).

Уровень приоритета каждого источника устанавливают через биты регистра приоритетов прерываний IP (рис.16.4):

Таблица 9.2.

Назначение битов РПП – регистра IP

Имя бита

Позиция

Назначение

-

PS

PT1

PX1

PT0

PX0

IP.7-IP.5

IP.4

IP.3

IP.2

IP.1

IP.0

Не используются

Бит приоритета УАПП (запрос TI-RI)

Бит приоритета таймера 1 (запрос TF1)

Бит приоритета внешнего запроса INT1

Бит приоритета таймера 0 (запрос TF0)

Бит приоритета внешнего запроса INT0

Примечания: 1. Установка бита в "1" - назначение высокого приоритета.

Сброс бита в "0" - назначение низкого приоритета.

2. Регистр IP является ячейкой РПД с битовой адресацией.

3. Биты устанавливают и сбрасывают только программно.

Работа системы обслуживания прерываний

Флаги прерываний опрашиваются в момент S5P2 каждого МЦ. Ранжирование прерываний по уровню приоритета выполняется на протяжении следующего МЦ, и выбирается прерывание, которое необходимо обслужить в данный момент.

Система прерываний формирует аппаратно команду вызова LCALL и загружает ее в регистр команд IR. Один из адресов векторов перехода на процедуру обработки прерывания используется как адрес вызова (рис.16.2 или рис.29 в комплекте). Вектора перехода образуют участки по восемь байт в памяти программ. На этих участках могут находиться:

-         команда JMP перехода на соответствующую процедуру обработки прерывания или команды условных переходов на несколько процедур (например, для УАПП - по TI или RI);

- короткая (до восьми байтов) процедура обслуживания прерывания.

Например: пусть зафиксирован запрос прерывания от TF1. Логика передачи управления показана схемой на рис.16.5 или рис.30 в комплекте.

Процедура обработки прерывания обычно начинается командами PUSH для сохранения в стеке важной информации из регистров (PSW, ACC, DPRT и т.д.), а завершается восстановлением из стека их содержимого (команды POP) в обратном порядке. Последней является команда RETI, по которой в (РС) загружается сохраненная точка возврата в основную программу и снимается блокировка прерывания только что обслуженного уровня. Таким образом, внутри процедуры обработки прерывания не может обслуживаться прерывание, которое вызвало данную процедуру (разумеется, в случае его появления).

В случае, если необходимо обрабатывать сигналы внешних прерываний от нескольких источников (больше двух), можно воспользоваться простой схемой (рис.16.6). В соответствии с ней, при возникновении запроса на прерывание от любого устройства (даже от нескольких одновременно!) будет сформирован единый запрос на входе #INT1. Процедура обработки этого общего запроса должна программным путем провести опрос всех входов Р1.0...Р1.3, определить устройство (или устройства), которое сделало вызов, выбрать источник с высшим приоритетом и провести соответствующую обработку события, которое вызвало прерывание основной программы.

Таким образом, подобная схема требует реализации протокола обработки прерывания с программным поиском источника. (Студентам предлагается самостоятельно разработать программный фрагмент реализации такого протокола).