Прерывание — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его. На прерывания в микроконтроллерах нужно реагировать быстро – в реальном режиме времени.
Общая структура системы прерываний МК-51 ®на рис.
Микроконтроллеры семейства МК-51 обеспечивают поддержку пяти источников прерываний: 1)двух внешних прерываний, поступающих по входам INT0 и INT1 (линии порта Р3: Р3.2 и Р3.3 соответственно); 2)двух прерываний от таймеров/счетчиков Т/С0 и Т/С1; 3)прерывание от последовательного порта.
№ | бит | Функция |
0 | IT0 | Настройка вида прерывания INT0 |
1 | IE0 | Флаг запроса прерывания INT0 |
2 | IT1 | Настройка вида прерывания INT1 |
3 | IE1 | Флаг запроса прерывания INT1 |
4 | TR0 | Включение в работу таймера/счетчика 0 |
5 | TF0 | Флаг переполнения (запрос прерывания)таймера/счетчика 0 |
6 | TR1 | Включение в работу таймера/счетчика 1 |
7 | TF1 | Флаг переполнения (запрос прерывания)таймера/счетчика 1 |
|
|
Запросы на прерывание фиксируются в р-рах специальных функций МК: флаги IE0, IE1, TF0, TF1 запросов на прерывание от INT0, INT1, T/C0 и T/C1 содержатся в регистре управления TCON (табл.1), а флаги RI и TI запросов на прерывание от последовательного порта - в регистре SCON управления последовательным портом.
Флаги TF0 и TF1 устанавливаются аппаратно при переполнении соответствующего таймера/счетчика (точнее, при переходе T/Cx из состояния "все единицы" в состояние "все нули").
Флаги IE0 и IE1 устанавливаются аппаратно от внешних прерываний IT0 и IT1 соответственно. Внешний запрос может вызвать установку флага либо при низком уровне сигнала на соответствующем входе, либо при переключении этого сигнала с высокого уровня на низкий (с частотой, не превышающей половины частоты внешней синхронизации МК).
Настройка на тип запроса осуществляется программной установкой бит IT0 и IT1 в регистре управления TCON. Установка ITx = 0 настраивает систему прерывания на запрос по низкому уровню сигнала, ITx = 1 - запрос на прерывание по спаду сигнала.
Флаги TI и RI устанавливаются аппаратно схемой последовательного интерфейса после окончания передачи или после окончания приема соответственно. Все указанные флаги запросов на прерывание программно доступны для установки и сброса. Программная установка флага запроса на прерывание приводит к такой же реакции МК, что и аппаратная установка того же самого флага.
Флаги TF0 и TF1 сбрасываются аппаратно при передаче управления программе обработки соответствующего прерывания.
|
|
Сброс флагов IEx выполняется аппаратно при обслуживании прерывания только в том случае, если прерывание было настроено на восприятие спада сигнала INTx. Если прерывание было настроено на восприятие уровня сигнала запроса, то сброс флага IEx должна выполнять программа обслуживания прерывания, воздействуя на источник прерывания для снятия им запроса.
№ | бит | Функция |
7 | EA | Запрет прерывания от всех источников |
6 | - | Не используется |
5 | - | Не используется |
4 | ES | Запрет прерывания от последовательного порта |
3 | ET1 | Запрет прерывания от таймера/счетчика T/C1 |
2 | EX1 | Запрет прерывания от внешнего источника INT1 |
1 | ET0 | Запрет прерывания от таймера/счетчика T/C0 |
0 | EX0 | Запрет прерывания от внешнего источника INT0 |
Флаги TI и RI сбрасываются только программным путем.
Каждый вид прерывания индивидуально разрешается или запрещается установкой или сбросом соответствующих разрядов регистра разрешения прерывания IE. Этот регистр содержит также и бит общего запрещения всех прерываний.
Формат регистра IE приведен в табл.2
№ | бит | Функция |
7 | - | Не используется |
6 | - | Не используется |
5 | - | Не используется |
4 | PS | Приоритет прерыванияот последовательного порта |
3 | PT1 | Приоритет прерывания от таймера/счетчика T/C1 |
2 | PX1 | Приоритет прерыванияот внешнего источника INT1 |
1 | PT0 | Приоритет прерывания от таймера/счетчика T/C0 |
0 | PX0 | Приоритет прерыванияот внешнего источника INT0 |
Каждому виду прерывания может быть программно присвоен один из двух возможных приоритетов: 0 - низший или 1 - высший. Настройка приоритетов осуществляется установкой или сбросом соответствующего бита регистра приоритетов прерываний IP.
Формат регистра IP приведен в табл.3
При одновременном поступлении запросов прерывания от источников, имеющих различные приоритеты, сначала обрабатывается запрос от более приоритетного источника.
В случае одновременного поступления нескольких запросов на прерывания с одинаковым приоритетом порядок их обработки определяется аппаратными средствами микроконтроллера и не может быть изменен программно. Этот порядок соответствует последовательности опроса флагов запросов прерываний, имеющей следующий вид: IT0 ÞTF0 ÞIT1 ÞTF1 Þ (RI, TI).
Аппаратно реализуемый вызов обработчика прерываний состоит из следующих действий:
- сохранение значения программного счетчика в стеке;
- загрузка в программный счетчик начального адреса точки входа в соответствующий обработчик прерывания.
Источник прерывания | Адреса точек входа |
Внешнее прерывания(ITO) | 03h |
Таймер-счетчик(TFO) | 0Bh |
Внешнее прерывания(IT1) | 13h |
Таймер-счетчик(TF1) | 1Bh |
Последовательный порт(R1 или T1) | 23h |
Точки входа в обработчик прерывания для каждого источника прерываний аппаратно зафиксированы.
Значения точек входа в обработчик прерывания приведены в табл.4
По указанному адресу должна размещаться первая команда обработчика прерывания. Как правило, такой командой является команда безусловного перехода в то место программы, где фактически располагается обработчик.
При переходе на подпрограмму обработки прерывания автоматически независимо от состояния регистра IE запрещаются все прерывания, которые имеют уровень приоритета, равный уровню приоритета обслуживаемого прерывания, - то есть вложенные прерывания с равным уровнем приоритета запрещены. Таким образом, низкоприоритетное прерывание (имеющее "0" в соответствующем разряде регистра IP) может прерываться высокоприоритетным (имеющим "1" в соответствующем разряде регистра IP), но не низкоприоритетным. Обслуживание высокоприоритетного прерывания не может быть прервано другим источником.
Возврат из обработчика прерываний осуществляется с помощью команды RETI, которая восстанавливает из стека значение программного счетчика PC, сохраненного там в момент вызова обработчика прерывания, и логику приоритетов прерываний.
|
|