Внешние прерывания
Внешние прерывания осуществляются через выводы INT7:0. Обратите внимание, что после разрешения внешние прерывания будут генерироваться, даже если линии INT7:0 настроены как выходы. Данная особенность может использоваться для программной генерации прерывания. Внешние прерывания могут генерироваться по подающему или нарастающему фронту, а также по низкому лог. уровню. Одна из этих установок задается в регистрах управления внешними прерываниями EICRA (INT3:0) и EICRB (INT7:4). Если внешнее прерывание разрешено и настроено на срабатывание при низком уровне, то прерывание будет инициироваться постоянно пока на выводе будет оставаться низкий уровень. Обратите внимание, что для распознавания падающего или нарастающего фронтов на INT7:4 необходимо наличие синхронизации ввода-вывода, описанной в разделе “Источники синхронизации и их распределение". Прерывания по низкому уровню и фронтам на INT3:0 определяются асинхронно. Это означает, что данные прерывания могут использоваться для пробуждения микроконтроллера из режимов глубокого сна. Синхронизация ввода-вывода останавливается во всех режимах сна за исключением режима холостого хода (Idle).
Обратите внимание, что при использовании прерывания по уровню для пробуждения микроконтроллера из режима выключения (Power-down), только после удержания изменившегося уровня в течение определенного времени генерируется прерывание. Это делает микроконтроллер менее чувствительным к шумам. Оценка изменения состояния уровня выполняется по двум его выборкам с интервалом равным периоду сторожевого таймера, который равен 1 мкс (номинальное значение) при 5.0В и 25?C. Частота сторожевого таймера зависит от напряжения (см. “Электрические характеристики”). Пробуждение микроконтроллера наступает, если на входе присутствует требуемый уровень в процессе выборок или если он удерживается до окончания задержки при запуске синхронизации (возникает при выходе из режимов сна). Время запуска определяется конфигурационными битами SUT (см. “ Источники синхронизации и их распределение”). Если дважды выполнена выборка уровня с синхронизацией сторожевым таймером, но по истечении времени запуска этот уровень исчез, то пробуждение микроконтроллера наступит, но прерывание не будет сгенерировано. Для того чтобы активизировать прерывание по уровню необходимо, чтобы этот уровень удерживался в течение достаточного для пробуждения микроконтроллера времени.
Регистр А управления внешними прерываниями – EICRA
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
ICS31 |
ICS30 |
ICS21 |
ICS20 |
ICS11 |
ICS10 |
ICS01 |
ICS00 |
EICRA |
Чтение/запись |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
|
Исх. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Данный регистр на доступен в режиме совместимости с ATmega103, но исходная установка соответствует настройке на прерывания по низкому уровню на INT3:0, что также как и в ATmega103.
Разряды 7..0 – ISC31, ISC30 – ISC00, ISC00: Биты выбора условия генерации внешнего прерывания 3 - 0
Внешние прерывания 3 - 0 активизируются через внешние выводы INT3:0, если установлены флаг I в регистре статуса SREG и соответствующая маска прерывания в EIMSK. Выбор уровня или фронта для активизации внешнего прерывания осуществляется в соответствии с таблицей 48. Фронты на INT3..INT0 выявляются асинхронно. Прерывание по выв. INT3:0 будет сгенерировано, если длительность импульса будет больше минимально необходимой (см. табл. 49). При возникновении импульсов меньшей длительности генерация прерывания не гарантируется. Если выбрано прерывание по низкому уровню, то для генерации прерывания необходимо, чтобы этот уровень оставался на прежнем низком уровне до момента завершения выполнения текущей инструкции. После разрешения прерывания по уровню оно будет генерироваться непрерывно до тех пор, пока на входе присутствует низкий уровень. При изменении бит ISCn может возникнуть прерывание. Поэтому, рекомендуется вначале отключить прерывание INTn путем сброса бита разрешения прерывания в регистре EIMSK. После этого, значение бит ISCn может быть изменено. И, наконец, перед возобновлением работы прерываний необходимо сбросить флаг прерывания INTn путем записи лог. 1 во флаг прерывания (INTFn) в регистре EIFR.
Таблица 48 – Задание условия генерации запроса на прерывание(1)
ISCn1 |
ISCn0 |
Описание |
0 |
0 |
Низкий уровень на INTn генерирует запрос на прерывание |
0 |
1 |
Зарезервировано |
1 |
0 |
Падающий фронт на INTn генерирует асинхронно запрос на прерывание |
1 |
1 |
Нарастающий фронт на INTn генерирует асинхронно запрос на прерывание |
Прим.: 1. n = 3, 2, 1 или 0.
Перед изменением бит ISCn1/ISCn0 необходимо запретить работу прерывания путем очистки бита разрешения прерывания в регистре EIMSK. В противном случае прерывание может возникнуть после изменения данных бит.
Таблица 49 – Характеристики асинхронного внешнего прерывания
Обозначение |
Параметр |
Мин. |
Типично |
Макс. |
Ед.изм. |
tINT |
Минимальная длительность импульса для генерации асинхронного прерывания |
|
50 |
|
нс |
Регистр B управления внешними прерываниями – EICRB
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
ICS71 |
ICS70 |
ICS61 |
ICS60 |
ICS51 |
ICS50 |
ICS41 |
ICS40 |
EICRB |
Чтение/запись |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
|
Исх. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Разряды 7..0 – ISC71, ISC70 - ISC41, ISC40: Бита выбора условия генерации внешнего прерывания 7 - 4
Внешние прерывания 7 - 4 активизируются через внешние выводы INT7:4, если установлены флаг I в регистре статуса SREG и соответствующая маска прерывания в регистре EIMSK. Условие, по которому генерируется прерывание, выбирается исходя из данных таблицы 50. Для определения фронтов на выводах INT7:4 осуществляется выборка их состояний. Если выбрано прерывание по фронту или изменению уровня, то прерывание будет сгенерировано, если на входе появляется импульс, длительность которого больше одного периода синхронизации. При действии на входе более коротких импульсов генерация прерывания не гарантируется. Обратите внимание, что частота синхронизации ЦПУ может быть ниже чем частота XTAL, если разрешена работа делителя частоты XTAL. Если выбрано прерывание по низкому уровню, то прерывание генерируется, если до момента окончания выполнения текущей инструкции на входе по прежнему присутствует низкий уровень. Если разрешено прерывание по уровню, то оно будет генерироваться непрерывно до тех пор, пока на входе присутствует низкий уровень.
Таблица 50 – Задание условия генерации запроса на прерывание(1)
ISCn1 |
ISCn0 |
Описание |
0 |
0 |
Низкий уровень на INTn генерирует запрос на прерывание |
0 |
1 |
Любое изменение логического состояния на INTn генерирует запрос на прерывание |
1 |
0 |
Падающий фронт, выявленный по двум выборкам на INTn, генерирует запрос на прерывание. |
1 |
1 |
Нарастающий фронт, выявленный по двум выборкам на INTn, генерирует запрос на прерывание. |
Прим. 1: n = 7, 6, 5 или 4.
Перед изменением бит ISCn1/ISCn0 необходимо запретить работу прерывания путем очистки бита разрешения прерывания в регистре EIMSK. В противном случае прерывание может возникнуть после изменения данных бит.
Регистр маски внешнего прерывания – EIMSK
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
INT7 |
INT6 |
INT5 |
INT4 |
INT3 |
INT2 |
INT1 |
INT0 |
EIMSK |
Чтение/запись |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
|
Исх. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Разряды 7..0 – INT7 – INT0: Разрешение запроса на внешнее прерывание 7 - 0
Если в бит INT7 – INT0 и в бит I регистра статуса SREG записать лог. 1, то разрешается работа внешнего прерывания по соответствующему выводу. Биты выбора условия генерации прерывания в регистрах управления внешними прерываниями EICRA и EICRB определяют по какому условию генерируется прерывание: по нарастающему фронту, по падающему фронту или по уровню. Любой из данных выводов сохраняет активность, даже если он настроен на вывод. Данная особенность может использоваться для программной генерации прерывания.
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
INTF7 |
INTF6 |
INTF5 |
INTF4 |
INTF3 |
INTF2 |
INTF1 |
INTF0 |
EIFR |
Чтение/запись |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
Чт./Зп. |
|
Исх. значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Разряды 7..0 – INTF7 - INTF0: Флаги внешних прерываний 7 - 0
Если фронт или изменение логического состояния на INT7:0 вызывает прерывание, то соответствующий флаг INTF7:0 принимает единичное состояние. Если установлены бит I регистра статуса SREG и соответствующий бит разрешения прерывания INT7:0 в регистре EIMSK, то микроконтроллер выполнит переход на вектор прерывания. Флаг сбрасывается аппаратно после выполнения процедуры обработки прерывания. Альтернативно флаг может быть сброшен программно путем записи лог. 1 в соответствующий бит. Если INT7:0 настроены на генерацию прерывания по уровню, то флаги постоянно находятся в сброшенном состоянии. Обратите внимание, что при переходе в режим сна с отключенными прерываниями INT3:0 входные буферы этих выводов будут отключенными. В свою очередь это может вызвать изменение внутреннего состояния сигналов, которое приведет к установке флагов INTF3:0. См. также “Разрешение цифрового ввода и режимы сна”.
|