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

  • Доступно 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.