Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы МП.New.doc
Скачиваний:
27
Добавлен:
23.11.2019
Размер:
1.08 Mб
Скачать

2.3. Обработка прерываний

Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в 1, а для запрещения — сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний, рассматриваемых ниже.

При возникновении прерывания флаг I регистра SREG аппаратно сбрасывается, запрещая тем самым обработку следующих прерываний. Однако в подпрограмме обработки прерывания этот флаг можно снова установить в 1 для разрешения вложенных прерываний. При возврате из подпрограммы обработки прерывания (при выполнении команды RETI) флаг I устанавливается аппаратно.

Все имеющиеся прерывания можно разделить на два типа. Прерывания первого типа генерируются при наступлении некоторого события, в результате которого устанавливается флаг прерывания. Затем, если прерывание разрешено, в счетчик команд загружается адрес вектора соответствующего прерывания. При этом флаг прерывания аппаратно сбрасывается. Он также может быть сброшен программно, записью лог. 1 в бит регистра, соответствующий флагу.

Прерывания второго типа не имеют флагов прерываний и генерируются в течение всего времени, пока присутствуют условия, необходимые для генерации прерывания. Соответственно, если условия, вызывающие прерывание, исчезнут до разрешения прерывания, генерации прерывания не произойдет.

Следует помнить, что при вызове подпрограмм обработки прерываний регистр состояния SREG не сохраняется. Поэтому пользователь должен самостоятельно запоминать содержимое этого регистра при входе в подпрограмму обработки прерывания (если это необходимо) и восстанавливать его значение перед вызовом команды RETI.

Микроконтроллеры семейства Mega поддерживают очередь прерываний, которая работает следующим образом: если условия генерации одного или более прерываний возникают в то время, когда флаг общего разрешения прерываний сброшен (все прерывания запрещены), соответствующие флаги устанавливаются в 1 и остаются в этом состоянии до установки флага общего разрешения прерываний. После разрешения прерываний выполняется их обработка в порядке приоритета.

Наименьшее время отклика для любого прерывания составляет 4 такта. В течение этого времени происходит сохранение счетчика команд в стеке. В течение последующих трех тактов выполняется команда перехода к подпрограмме обработки прерывания. Если прерывание произойдет во время выполнения команды, длящейся несколько циклов, то генерация прерывания произойдет только после выполнения этой команды. Если же прерывание произойдет во время нахождения микроконтроллера в «спящем» режиме, то время отклика увеличивается еще на 4 или 5 тактов.

Возврат в основную программу занимает 4 такта, в течение которых происходит восстановление счетчика команд из стека. После выхода из прерывания процессор всегда выполняет одну команду основной программы, прежде чем обслужить любое отложенное прерывание.

2.4. Внешние прерывания

В микроконтроллерах семейства Mega имеется две разновидности внешних прерываний. Прерывания первого типа генерируются при появлении на входе внешнего прерывания заданного сигнала. Прерывания второго типа генерируются при любом изменении состояния определенных выводов микроконтроллера.

Для разрешения/запрещения внешних прерываний используется регистр маскирования внешних прерываний EIMSK.

Для индикации наступления внешних прерываний используется регистр флагов внешних прерываний EIFR.

Рис.2.1. Формат регистра EIMSK

Рис.2.2 Формат регистра EIFR

Прерывания INT0...INT7 могут быть сгенерированы по нарастающему/спадающему фронту сигнала или при появлении НИЗКОГО уровня на входе.

Условия генерации прерываний INT0...INT3 определяются состоянием определенных битов регистра EICRA. Условия генерации прерываний INT7...INT4 определяются регистром EICRB.

а)

б)

Рис.2.3. Формат регистров EICRA (а) и EICRB (б)

Таблица 2.2. Определение условий генерации внешних прерываний

ISCn1

ISCn0

Условие

0

0

По НИЗКОМУ уровню на выводе INTn

0

1

Зарезервировано

1

0

По спадающему фронту сигнала на выводе INTn

1

1

По нарастающему фронту сигнала на выводе INTn

Таблица 2.3. Альтернативные функции выводов портов микроконтроллера

Вывод порта

Функция

Описание

PD0

INT0

Вход внешнего прерывания 0

PD1

INT1

Вход внешнего прерывания 1

PD2

INT2

Вход внешнего прерывания 2

PD3

INT3

Вход внешнего прерывания 3

PE4

INT4

Вход внешнего прерывания 4

PE5

INT5

Вход внешнего прерывания 5

PE6

INT6

Вход внешнего прерывания 6

PE7

INT7

Вход внешнего прерывания 7