Обработка прерываний
Микроконтроллеры ATmega603/103 содержат два специальных 8-разрядных регистра масок прерываний: регистр масок внешних прерываний EIMSK (External Interrupt Mask) и регистр масок прерываний по таймеру/счетчику TIMSK (Timer/Counter Interrupt Mask). Кроме того, в регистрах управления периферией могут быть организованы и другие биты разрешения и биты масок.
При возникновении прерывания бит I разрешения глобального прерывания (Global Interrupt Enable) очищается и все прочие прерывания запрещаются. Пользовательское ПО, с тем, чтобы разрешить вложенные прерывания, может установить бит I внутри подпрограммы обработки прерывания. Выход из подпрограммы обработки прерывания происходит по команде RETI, при этом бит I устанавливается в состояние 1.
Когда счетчик команд указывает вектор подпрограммы обработки прерывания, соответствующий флаг, вызвавший прерывание, аппаратно очищается. Некоторые флаги прерываний можно очистить, записав в соответствующий бит(ы) очищаемого флага логическую единицу.
Регистр масок внешних прерываний - EIMSK - (External Interrupt Mask Register)
Регистр статуса MCU выдает информацию об источнике, вызвавшем сброс MCU.
Биты
|
|
$39 ($59)
| INT7
| INT6
| INT5
| INT4
| INT3
| INT2
| INT1
| INT0
|
| EIMSK
|
Чтение/Запись
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
|
|
|
Начальное состояние
|
|
|
- Bits 7..4 - INT7 - INT4: External Interrupt Request 7-4 Enable - Разрешение запроса внешних прерываний с 4 по 7
При установленных битах INT7- INT4 и установленном бите I регистра статуса (SREG) разрешаются прерывания по соответствующим выводам входов сигналов прерываний. Бит управления опознаванием прерывания регистра управления внешними прерываниями EICR (External Interrupt Control Register) определяет срабатывание по нарастающему или падающему фронту или по логическому уровню. Активация любого из этих выводов вызовет запрос прерывания даже если вывод будет разрешен как выход. Это обеспечивает возможность организации программного прерывания. - Bits 3..0 - INT3 - INT0: External Interrupt Request 3-0 Enable - Разрешение запроса внешних прерываний с 0 по 3
При установленных битах INT3- INT0 и установленном бите I регистра статуса (SREG) разрешаются прерывания по соответствующим входам прерываний. Внешние прерывания всегда вызывают прерывание низким уровнем. Активация любого из этих выводов вызовет запрос прерывания даже если вывод будет разрешен как выход. Это обеспечивает возможность организации программного прерывания. Запрос прерывания по логическому уровню, если он разрешен, будет генерировать запрос прерывания до тех пор, пока на входе будет находиться низкий уровень.
Регистр флагов внешних прерываний - EIFR (External Interrupt Flag Register)
Биты
|
|
$38 ($58)
| INTF7
| INTF6
| INTF5
| INTF4
| -
| -
| -
| -
|
| EIFR
|
Чтение/Запись
|
|
|
Начальное состояние
|
|
|
- Bits 7..4 - INTF7 - INTF4: External Interrupt 7-4 Flags - Флаги внешних прерываний с 4 по 7
В случае поступления запроса на прерывание на какой либо из выводов INT7 - INT4, будет установлен в 1 соответствующий флаг прерывания (INTF7 - INTF4). Если бит I регистра SREG и соответствующий бит разрешения (INT7 - INT4) в EIMSK будут установлены, то MCU перейдет к вектору прерывания. По завершению подпрограммы прерывания флаг очищается. Кроме того, его можно очистить, записав в него логическую 1. - Bits 3..0 - Res: Reserved Bits - Зарезервированные биты
Эти биты зарезервированы и при считывании всегда покажут состояние 0.
Регистр управления внешними прерываниями - EICR (External Interrupt Control Register)
Биты
|
|
$38 ($58)
| ISC71
| ISC70
| ISC61
| ISC60
| ISC51
| ISC50
| ISC41
| ISC40
|
| EICR
|
Чтение/Запись
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
|
|
|
Начальное состояние
|
|
|
- Bits 7..0 - ISCX1, ISCX0: External Interrupt 7-4 Sense Control bits - Биты управления опознаванием внешних прерываний с 4 по 7
Внешние прерывания 7 - 4 активируются по выводам INT7 - INT4, если установлен флаг I в SREG и установлена соответствующая маска в EIMSK. Запрос прерывания по логическому уровню или фронтам определяется в следующей таблице:
Таблица 9. Управление опознаванием прерывания
ISCX1
| ISCX0
| Описание
|
|
| Запрос прерывания генерируется низким уровнем на INTX
|
|
| Зарезервирован
|
|
| Запрос прерывания генерируется падающим фронтом на INTX
|
|
| Запрос прерывания генерируется нарастающим фронтом на INTX
|
Примечание: X может быть равен 7, 6, 5 или 4.
При изменении битов ISC11/ISC10 прерывание должно быть запрещено путем очистки бита разрешения в регистре GIMSK. В ином случае может произойти прерывание. Запрос прерывания по логическому уровню, если он разрешен, будет генерировать запрос прерывания до тех пор, пока на входе будет находиться низкий уровень.
Регистр масок прерывания по таймерам/счетчикам - TIMSK (Timer/Counter Interrupt Mask Register)
Биты
|
|
$37 ($57)
| OCIE2
| TOIE2
| TICIE1
| OCIE1A
| OCIE1B
| TOIE1
| OCIE0
| TOIE0
|
| TIMSK
|
Чтение/Запись
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
| R/W
|
|
|
Начальное состояние
|
|
|
- Bit 7 - OCIE2: Timer/Counter2 Output Compare Interrupt Enable - Разрешение прерывания по совпадению таймера/счетчика2
При установленном бите OCIE2 и установленном бите I регистра статуса разрешается прерывание по совпадению содержимого регистра сравнения и состояния таймера/ счетчика2. Соответствующее прерывание (с вектором $0012) выполняется если произойдет совпадение при сравнении содержимого регистра сравнения и состояния таймера/счетчика2. В регистре флагов прерывания TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг совпадения таймера/счетчика2. - Bit 6 - TOIE2: Timer/Counter2 Overflow Interrupt Enable - Разрешение прерывания по переполнению таймера/счетчика2
При установленном бите TOIE2 и установленном бите I регистра статуса разрешается прерывание по переполнению таймера/счетчика2. Соответствующее прерывание (с вектором $0014) выполняется если произойдет переполнение таймера/счетчика2. В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг переполнения таймера/счетчика2. - Bit 5 - TICIE1: Timer/Counter1 Input Capture Interrupt Enable - Разрешение прерывания по захвату таймера/счетчика1
При установленном бите TICIE1 и установленном бите I регистра статуса разрешается прерывание по захвату таймера/счетчика1. Соответствующее прерывание (с вектором $0016) выполняется если произойдет запуск захвата по выводу 29, PD4(IC1). В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг захвата таймера/счетчика1. - Bit 4 - OCE1A: Timer/Counter1 Output CompareA Match Interrupt Enable - Разрешение прерывания по совпадению регистра A с таймером/счетчиком1
При установленном бите OCIE1A и установленном бите I регистра статуса разрешается прерывание по совпадению регистра A с состоянием таймера/счетчика1. Соответствующее прерывание (с вектором $0018) выполняется если произойдет совпадение содержимого регистра A сравнения выхода с состоянием таймера/ счетчика1. В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг совпадения регистра A с таймером/счетчиком1. - Bit 3 - OCIE1B: Timer/Counter1 Output CompareB Match Interrupt Enable - Разрешение прерывания по совпадению регистра B с таймером/счетчиком1
При установленном бите OCIE1B и установленном бите I регистра статуса разрешается прерывание по совпадению регистра B с состоянием таймера/счетчика1. Соответствующее прерывание (с вектором $001A) выполняется если произойдет совпадение содержимого регистра B сравнения выхода с состоянием таймера/счетчика1. В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг совпадения регистра B с таймером/счетчиком1. - Bit 2 - TOIE1: Timer/Counter1 Overflow Interrupt Enable - Разрешение прерывания по переполнению таймера/счетчика1
При установленном бите OCIE1B и установленном бите I регистра статуса разрешается прерывание по переполнению таймера/счетчика1. Соответствующее прерывание (с вектором $001C) выполняется если произойдет переполнение таймера/счетчика1. В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг переполнения таймера/счетчика1.При нахождении таймера/счетчика1 в PWM режиме флаг переполнения счетчика устанавливается когда счетчик изменит направление счета при $0000. - Bit 1 - OCIE0: Timer/Counter0 Output Compare Interrupt Enable - Разрешение прерывания по совпадению таймера/счетчика0
При установленном бите OCIE0 и установленном бите I регистра статуса разрешается прерывание по совпадению содержимого регистра сравнения и состояния таймера/ счетчика0. Соответствующее прерывание (с вектором $001E) выполняется если произойдет совпадение при сравнении содержимого регистра сравнения и состояния таймера/счетчика0. В регистре флагов прерывания TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг совпадения таймера/счетчика0. - Bit 0 - TOIE0: Timer/Counter0 Overflow Interrupt Enable - Разрешение прерывания по переполнению таймера/счетчика0
При установленном бите TOIE0 и установленном бите I регистра статуса разрешается прерывание по переполнению таймера/счетчика0. Соответствующее прерывание (с вектором $0020) выполняется если произойдет переполнение таймера/счетчика0. В регистре флагов TIFR (Timer/Counter Interrupt Flag Register) устанавливается флаг переполнения таймера/счетчика0.
Регистр флагов прерываний по таймерам/счетчикам TIFR (Timer/Counter Interrupt Flag Register)