# Внешние прерывания - Доступно 2 источника внешних прерываний - Настраиваемый уровень или фронт/спад для запуска прерывания - Может использоваться как источник пробуждения в режимах сна ## Обзор Внешние прерывания генерируются выводами **INT0** и **INT1**. Внешнее прерывание может сработать, даже если эти два вывода сконфигурированы как выходы, при условии, что внешнее прерывание разрешено. Это можно использовать для создания программного прерывания. Внешние прерывания могут запускаться по возрастающему фронту, падающему фронту или низкому уровню сигнала, что настраивается с помощью регистра управления внешними прерываниями **EICRA**. Когда внешнее прерывание разрешено и настроено на запуск по уровню (только для выводов **INT0** и **INT1**), прерывание будет генерироваться непрерывно, пока на выводе присутствует низкий уровень. Для запуска прерывания по нарастающему или падающему фронту на выводах **INT0** и **INT1** требуется 10 тактов, в то время как запуск по низкому уровню на этих выводах обрабатывается асинхронно. Во всех режимах сна, кроме режима Idle, тактирование ввода-вывода остановлено. Поэтому оба внешних прерывания могут использоваться как источники пробуждения во всех режимах сна, кроме режима Idle. Если прерывание по уровню используется для пробуждения в режиме энергосбережения, изменённый уровень должен удерживаться в течение определённого времени, чтобы разбудить **MCU** и снизить чувствительность к шумам. Требуемый уровень должен сохраняться достаточно долго, чтобы **MCU** успел завершить процесс пробуждения и затем вызвать прерывание по уровню. ## Описание регистров | Регистр | Адрес | Значение по
умолчанию | Описание | |-|-|-|-| | EICRA | 0x69 | 0x00 | Регистр управления внешними прерываниями A | | EIMSK | 0x3D | 0x00 | Регистр маски внешних прерываний | | EIFR | 0x3C | 0x00 | Регистр флагов внешних прерываний | ### Регистр управления внешними прерываниями A — EICRA | Адрес: 0x69 | Значение по умолчанию: 0x00 | |-|-| | Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |-----|---|---|---|---|---|---|---|---| | Имя | - | - | - | - | ISC11 | ISC10 | ISC01 | ISC00 | | R/W | - | - | - | - | R/W | R/W | R/W | R/W | #### Описание битов | Бит | Имя | Описание | |-----|-----|----------| | 7:4 | - | Зарезервировано. | | 3 | ISC11 | Старший бит управления режимом триггера прерывания для вывода INT1. | | 2 | ISC10 | Младший бит управления режимом триггера прерывания для вывода INT1.
Когда глобальные прерывания разрешены и установлен соответствующий
бит маски прерывания в регистре GICR, внешнее прерывание 1 генерируется
выводом INT1. Режим триггера прерывания описан в таблице.
Перед обнаружением фронта MCU сначала производит выборку уровня на
выводе INT1. Если выбран режим триггера по фронту или по изменению
уровня, импульс длительностью более 1 системного такта вызовет
прерывание, слишком короткие импульсы не гарантируют срабатывания
прерывания. Если выбран режим триггера по низкому уровню, то низкий
уровень должен сохраняться до завершения выполнения текущей
инструкции, чтобы вызвать прерывание. | | 1 | ISC01 | Старший бит управления режимом триггера прерывания для вывода INT0. | | 0 | ISC00 | Младший бит управления режимом триггера прерывания для вывода INT0.
Когда глобальные прерывания разрешены и установлен соответствующий
бит маски прерывания в регистре GICR, внешнее прерывание 0 генерируется
выводом INT0. Режим триггера прерывания описан в таблице.
Перед обнаружением фронта MCU сначала производит выборку уровня на
выводе INT0. Если выбран режим триггера по фронту или по изменению
уровня, импульс длительностью более 1 системного такта вызовет
прерывание, слишком короткие импульсы не гарантируют срабатывания
прерывания. Если выбран режим триггера по низкому уровню, то низкий
уровень должен сохраняться до завершения выполнения текущей
инструкции, чтобы вызвать прерывание. | Режим срабатывания внешнего прерывания 1 приведён в таблице: | ISC1[1:0] | Описание | |-----------|----------------------------------------| | 0 | Низкий уровень сигнала на выводе INT1 | | 1 | Фронт или спад сигнала на выводе INT1 | | 2 | Спад сигнала на выводе INT1 | | 3 | Фронт сигнала на выводе INT1 | Режим срабатывания внешнего прерывания 0 приведён в таблице: | ISC0[1:0] | Описание | |-----------|---------------------------------------| | 0 | Низкий уровень сигнала на выводе INT0 | | 1 | Фронт или спад сигнала на выводе INT0 | | 2 | Спад сигнала на выводе INT0 | | 3 | Фронт сигнала на выводе INT0 | ### Регистр маски внешних прерываний — EIMSK | Адрес: 0x3D | Значение по умолчанию: 0x00 | |-|-| | Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |-----|---|---|---|---|---|---|---|---| | Имя | - | - | - | - | - | - | INT1 | INT0 | | R/W | - | - | - | - | - | - | R/W | R/W | #### Описание битов | Бит | Имя | Описание | |-----|-----|----------| | 7:2 | - | Зарезервировано | | 1 | INT1 | Бит разрешения прерывания от внешнего вывода 1.
Когда бит INT1 установлен в «1» и глобальные прерывания
разрешены, внешнее прерывание от вывода 1 разрешено,
а функция пробуждения включена.
Даже если вывод INT1 сконфигурирован как выход, прерывание
будет сгенерировано при соответствующем изменении уровня
на выводе.
Когда бит INT1 установлен в «0», внешнее прерывание от
вывода 1 запрещено, а функция пробуждения также отключена. | | 0 | INT0 | Бит разрешения прерывания от внешнего вывода 0.
Когда бит INT0 установлен в «1» и глобальные прерывания
разрешены, внешнее прерывание от вывода 0 разрешено,
а функция пробуждения включена.
Даже если вывод INT0 сконфигурирован как выход, прерывание
будет сгенерировано при соответствующем изменении уровня
на выводе.
Когда бит INT0 установлен в «0», внешнее прерывание от
вывода 0 запрещено, а функция пробуждения также отключена. | ### Регистр флагов внешних прерываний — EIFR | Адрес: 0x3C | Значение по умолчанию: 0x00 | |-|-| | Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |-----|---|---|---|---|---|---|---|---| | Имя | - | - | - | - | - | - | INTF1 | INTF0 | | R/W | - | - | - | - | - | - | R/W | R/W | #### Описание битов | Бит | Имя | Описание | |-----|-----|----------| | 7:2 | - | Зарезервировано | | 1 | INTF1 | Флаг прерывания от внешнего вывода 1.
При срабатывании прерывания по фронту на внешнем
выводе 1 флаг INTF1 устанавливается.
При срабатывании прерывания по низкому уровню на внешнем
выводе 1 флаг INTF1 не устанавливается.
Если в этот момент бит разрешения прерывания INT1EN
установлен в «1» и глобальный флаг прерывания разрешён,
то будет сгенерировано внешнее прерывание от вывода 1.
При выполнении подпрограммы обработки этого прерывания
INTF1 будет автоматически сброшен. Также сбросить этот флаг
можно записью «1» в бит INTF1.| | 0 | INTF0 | Флаг прерывания от внешнего вывода 0.
При срабатывании прерывания по фронту на внешнем
выводе 0 флаг INTF0 устанавливается.
При срабатывании прерывания по низкому уровню на внешнем
выводе 0 флаг INTF0 не устанавливается.
Если в этот момент бит разрешения прерывания INT0EN
установлен в «1» и глобальный флаг прерывания разрешён,
то будет сгенерировано внешнее прерывание от вывода 0.
При выполнении подпрограммы обработки этого прерывания
INTF0 будет автоматически сброшен. Также сбросить этот флаг
можно записью «1» в бит INTF0.|