Система прерываний

 

Исходная система прерываний в архитектуре MCS-51 включает пять источ­ников - два внешних и три внутренних. Система развивается, с появлени­ем микроконтроллеров типа 8052 число источников прерываний в архитек­туре семейства постоянно увеличивается и достигло в микроконтроллерах типа 8XC51GP пятнадцати. Некоторые усовершенствования претерпел механизм приоритетов прерываний.

Из пяти источников прерываний внешними являются входы INT0# и INT1#, а внутренними - два счетчика/таймера и последовательный порт. Активные сигналы на входах INT0#, INT1# устанавливают флаги IE0, IE1 регистра TCON. Таймер 0 и Таймер 1 используют для выработки запросов прерываний флаги переполнения TF0, TF1 в регистре управления TCON, а последовательный порт использует для этого два флага - приемника RI и передатчика TI в регистре управления SCON. Каждый из флагов после­довательного порта может вызвать прерывание, а конкретный источник определяет процедура обслуживания посредством опроса.

Реакция на любой запрос, разрешенный к обслуживанию, заключается в передаче управления от текущей программы специальной процедуре об­служивания прерывания данного типа. Осуществляется эта передача по­средством команды LCALL, код которой не выбирается из памяти, а фор­мируется внутри микроконтроллера. Адрес перехода в архитектуре MCS-51 соответствует вектору прерывания и фиксирован для каждого источника:

 

 

Векторы системы прерываний

Источник прерывания Вектор прерывания
Внешнее прерывание INT0 0003h
Таймер/счетчик Т/С0 000Вh
Внешнее прерывание INT1 0013h
Таймер/счетчик Т/С1 001Вh
Последовательный порт 0023h

 

Из таблицы видно, что интервал между адресами составляет всего 8 ячеек памяти программ, поэтому по первым четырем адресам может располагать­ся либо очень короткая процедура, либо команда JMP перехода на область памяти, где находится более длинная процедура обслуживания. По адресу последовательного порта места больше. Если по адресам векторов прерыва­ний находятся команды JMP, то имеет место так называемая таблица переходов системы прерываний.

Когда запрос прерывания принят на обслуживание, выполняется следую­щая последовательность действий. Текущая команда выполняется до кон­ца. Затем внутренне формируемая команда LCALL сохраняет текущее зна­чение счетчика команд PC (адрес следующей команды) в стеке. Это позволяет после завершения процедуры обслуживания прерывания вер­нуться в прерванную программу. Далее эта команда загружает в PC адрес-вектор. Сохранение в стеке других регистров микроконтроллера, кроме PC, осуществляется программистом командами PUSH в начале процедуры об­служивания. В конце процедуры должны стоять соответствующие коман­ды выгрузки POP. Этот процесс отдан на усмотрение разработчика, по­скольку от объема сохраняемой информации сильно зависит время реакции на прерывание. Процедура обслуживания прерывания заверша­ется командой RETI, которая выгружает из стека адрес возврата и поме­щает его в PC.

Каждый из источников прерываний может быть разрешен или запрещен с использованием соответствующего бита регистра IE. Кроме того, в этом регистре есть бит общего запрета всех прерываний.

 

EA - - ES ET1 EX1 ET0 EX0

IE

 

Имя бита Номер бита Функция
ЕА IЕ.7 Запрещение запросов от всех источников, имеет место при ЕА=0
- IE.6 Зарезервирован
- IE.5 Зарезервирован
ES IE.4 Запрещение запроса от последовательного порта, имеет место при ES=0
ЕТ1 IE.3 Запрещение запроса от Таймера 1, имеет место при ЕТ1=0
ЕХ1 IE.2 Запрещение запроса по входу INT1#, имеет место при ЕХ1=0
ЕТ0 IE.1 Запрещение запроса от Таймера 0, имеет место при ЕТ0=0
ЕХ0 IE.0 Запрещение запроса по входу INT0#, имеет место при ЕХ0=0

 

При появлении запросов от нескольких источников очередность их обслу­живания определяется с помощью механизма приоритетов прерываний. В архитектуре MCS-51 имеет место двухступенчатый механизм определения приоритетов. В исходной системе прерываний микроконтроллеров 8051 АН приоритеты на первой ступени имеют два уровня: «высокий» и «низкий», и определяются значениями битов регистра IP.

 

- - - PS PT1 PX1 PT0 PX0

IP

 

Имя бита Номер бита Функция
- IP.7 Зарезервирован
- IP.6 Зарезервирован
- IP.5 Зарезервирован
PS IP.4 Определяет приоритет последовательного порта
РТ1 IP.3 Определяет приоритет Таймера 1
РХ1 IP.2 Определяет приоритет входа INT1#
РТ0 IP.1 Определяет приоритет Таймера 0
РХ0 IP.0 Определяет приоритет входа INT0#

 

При «1» в определенном разряде регистра IP приоритет соответствующего источника прерывания высокий, а при «0» - низкий. При одновременном появлении нескольких запросов одного уровня очередность обслуживания определяется с помощью внутренней процедуры поллинга (последователь­ного опроса), который производится в порядке фиксированного старшинства источников внутри одного уровня приоритета. Этот порядок следующий:

 

Приоритеты прерываний при поллинге

Источник Приоритет внутри уровня
Вход INT0# Высший
Таймер 0  
Вход INT1#  
Таймер 1  
Последовательный порт Низший

 

Действие механизма приоритетов прерываний заключается в выборе для об­служивания одного из источников при одновременном приходе нескольких запросов, а также в принятии решения о прерывании текущей процедуры обслуживания вновь поступившим запросом. Все источники прерываний проверяются на наличие запроса во время S5P2 каждого машинного цикла (рис.3.9). В течение следующего машинного цикла анализируются биты при­оритетов регистра IP и выполняется внутренняя процедура поллинга.

 

Рис.3.9 - Вызов процедуры обслуживания прерывания

 

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

Из рис. 3.9 видно, что между запросом и началом процедуры обслуживания проходит не менее трех машинных циклов.

Запрос прерывания не принимается на обслуживание и откладывается на более позднее время при следующих обстоятельствах:

• выполняется процедура обслуживания прерывания с более высоким приоритетом;

• текущий машинный цикл не является последним в цикле команды;

• выполняется команда RETI, команды обращения к регистрам IE, IP или следующие за ними.

В текст процедуры обслуживания любого источника прерывания рекомен­дуется включить команду сброса флага данного источника.

Особенности запросов внешних прерываний. По входам INT0#, INT1# мо­гут приниматься сигналы запросов, активными значениями которых явля­ется либо низкий уровень входного сигнала, либо перепад «1»-«0». Тип ак­тивного значения определяется битами IT0, IT1 регистра TCON. При IТх = 0 запрос фиксируется по низкому уровню сигнала на соответствующем входе INTx#, а при ITx - 1 по перепаду.

Если запрос прерывания формируется перепадом сигнала на входе INTx#, высокий и низкий уровни сигнала должны удерживаться не менее одного машинного цикла каждый.

При запросе в виде низкого уровня сигнала активное значение должно удер­живаться на входе до начала обработки данного запроса. Далее сигнал дол­жен стать пассивным до завершения процедуры обслуживания.