Узел прерываний. Управление прерываниями
Система прерываний предусматривает пять источников прерываний: внешние (от входов , ) и внутренние (от флагов переполнения TF0, TF1 таймеров/счётчиков и от флага RI или TI последовательного порта). Внешние запросы прерываний , независимо друг от друга могут быть запрограммированы на срабатывание либо по переходу из 1 в 0, либо по низкому уровню входного сигнала запроса прерывания (регистр TCON).
Для каждого из пяти источников прерываний может быть запрограммирован один из двух уровней приоритета (0 – низкий приоритет, 1 – высокий приоритет).
Управление приоритетом прерываний осуществляется через 8-разрядный управляющий регистр IP (адрес B8).
Определение управляющих битов регистраIP
Имя регистра | IP | |||||||
Адрес регистра | B8 | |||||||
Бит регистра | IP.7 | IP.6 | IP.5 | IP.4 | IP.3 | IP.2 | IP.1 | IP.0 |
Имя бита управления | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
Адрес бита управления | BF | BE | BD | BC | BB | BA | B9 | B8 |
Описание управляющих битов в составе регистра IP:
PS – | бит приоритета последовательного порта; устанавливается и сбрасывается из программы. |
PT1 – | бит приоритета Т/С1 (TF1); устанавливается и сбрасывается из программы. |
PX1 – | бит приоритета внешнего прерывания от входа ; устанавливается и сбрасывается из про- граммы. |
PT0 – | бит приоритета Т/С0 (TF0); устанавливается и сбрасывается из программы. |
PX0 – | бит приоритета внешнего прерывания от входа ; устанавливается и сбрасывается из программы. |
IP.i = 0 – IP.i = 1 – | низкий уровень приоритета. |
высокий уровень приоритета. |
Обработка прерывания низкого уровня может быть прервана запросом высокого уровня. Если одновременно появляются несколько запросов одного уровня, используется схема арбитража, основанная на порядке последовательного опроса разрядов регистра IP и устанавливающая предпочтения между всеми источниками запросов.
Очерёдность обслуживания | |||||
Обслуживаемый источник прерывания при совпадении запросов от нескольких источников | Вход (IE0) | Таймер/ счётчик Т/С0 (TF0) | Вход (IE1) | Таймер/ счётчик Т/С1 (TF1) | Последовательный порт (RI или TI) |
Запрет или разрешение прерываний осуществляются через 8-разрядный управляющий регистр IE (адрес A8).
Определение управляющих битов регистраIE
Имя регистра | IE | |||||||
Адрес регистра | A8 | |||||||
Бит регистра | IE.7 | IE.6 | IE.5 | IE.4 | IE.3 | IE.2 | IE.1 | IE.0 |
Имя бита управления | EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
Адрес бита управления | AF | AE | AD | AC | AB | AA | A9 | A8 |
Описание управляющих битов в составе регистра IE:
EA – | бит блокировки всех прерываний; EA = 0 – все прерывания запрещены; EA = 1 – прерывания мо- гут быть разрешены управляющими битами ES, ET1, EX1, ET0, EX0; устанавливается и сбрасыва- ется из программы. |
ES – | бит разрешения прерывания от последовательного порта (по признаку RI окончания работы приём- ника или по признаку TI окончания работы пере- датчика); устанавливается и сбрасывается из про- граммы. |
ET1 – | бит разрешения прерывания от Т/С1 (TF1); устанавливается и сбрасывается из программы. |
EX1 – | бит разрешения внешнего прерывания от входа ; устанавливается и сбрасывается из про- граммы. |
ET0 – | бит разрешения прерывания от Т/С0 (TF0); устанавливается и сбрасывается из программы. |
EX0 – | бит разрешения внешнего прерывания от входа ; устанавливается и сбрасывается из программы. |
IE.i = 0 – IE.i = 1 – | прерывания от соответствующего источника запрещены (замаскированы). |
прерывания от соответствующего источника разрешены. |
Установка соответствующего флага при наличии запроса прерывания происходит в конце текущего машинного цикла, а опрос флагов – в следующем цикле. И только после выполнения последнего цикла текущей команды производится аппаратный вызов соответствующей подпрограммы обслуживания, эквивалентный команде LCALL vect, обеспечивающей переход к стартовому адресу (vect) соответствующей подпрограммы обслуживания. С каждым источником прерывания связан свой стартовый адрес (вектор прерывания).
Источник прерывания | Вход (IE0) | Таймер/ счётчик Т/С0 (TF0) | Вход (IE1) | Таймер/ счётчик Т/С1 (TF1) | Последовательный порт (RI или TI) |
Стартовый адрес (вектор прерывания) | 000B | 001B |
Переход к выполнению подпрограммы обслуживания прерывания задерживается при наличии следующих условий:
1) производится обработка прерывания с таким же или с высшим уровнем приоритета;
2) текущий машинный цикл не является последним циклом команды;
3) выполняется команда RETI текущей подпрограммы или любая команда обращения к регистрам IE, IP.
Подпрограмма обслуживания прерывания продолжается до исполнения команды RETI, по которой восстанавливается состояние программного счётчика из двух верхних ячеек стека. Если же использована команда RET для возврата из подпрограммы обработки прерывания, состояние программного счётчика также восстанавливается, но считается, что обслуживание прерывания продолжается и новые прерывания становятся невозможными.