Тема 9. Обработка прерываний в контроллере

В качестве сигналов прерывания, поступающих в контроллер прерывания, могут быть сигналы, формируемые модулями, входящими в контроллер (модуль таймера, последовательные и параллельные порты, АЦП и др.) и могут быть внешние сигналы, поступающие в контроллер из устройств, подключенных к нему. Первая группа сигналов называется – внутренними прерываниями, а вторая – внешними. Структурная схема контроллера прерываний приведена на рис.

IR0 – IRn-1 - сигналы запросов прерываний, IR0 – имеет высший приоритет;

· IRR – регистр запросов прерываний. В этом регистре фиксируются поступившие запросы.

После поступления в КП одного или более запросов IR, КП выделяет самый приоритетный из них. Для назначения приоритетных запросов в КП имеется регистр приоритетов (IP).

· IE – регистр разрешения запросов прерывания. Он позволяет временно запрещать поступление одного или более запросов IR. В некоторых контроллерах такие регистры обозначаются MR – маскирование.

После определения запроса с максимальным приоритетом контроллер прерывания формирует в ЦПУ сигнал прерывания INT. После получения сигнала прерывания INT ЦПУ завершает выполнение текущей команды, прерываемой программы и формирует сигнал подтверждения INTA. После получения INTA КП формирует команду вызова подпрограммы Call ADRi (i = 0… (n-1)). После этого она обрабатывается как обычная команда . Выполнение команды Call ADRi в ЦПУ обеспечит обращение соответствующему адресу памяти программ для вызова подпрограммы обработки запроса прерывания .

 

В базовом микроконтроллере MCS-51 имеется 5 входов запросов прерывания: два внешних ( INT0, INT1) поступают через линии порта Р3 и три внутренних прерывания: TF0, TF1(от таймеров/счетчиков) и TI/RI – прерывание от последовательного адаптера.

С точки зрения приоритетов все 5 прерываний могут быть распределены только по двум уровням приоритетов (0 – высший приоритет и 1 – низший приоритет).

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

Ранжирование приоритетов

Hi INT 0

TF 0

INT 1

TF 1

Low TI/RI

Распределение областей РПП под определенные запросы прерываний показано на рис.

В резидентной памяти программ выделено 5 областей для каждого из 5 прерываний, каждая область - 8 байт для вектора прерывания. Таким образом, первые 43 байта программ имеют специальное назначение.

ORG 30H – это 48 ячейка, программу рекомендуется начинать с этого адреса.

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

 

Рис. Распределение прерываний