Примечание: Это описание прерываний взято из документа Рича Несуолда. См. Благодарности.
В различных
компиляторах
обработка
прерываний
реализована
по-разному,
так как язык C старается
оставаться
подальше от
машинно-зависимых
подробностей.
В среде WinAVR
используется
предустановленная
таблица
векторов
прерываний,
содержащая
адреса
соответствующих
подпрограмм
обслуживания
с заранее
определенными
именами. Для
каждой такой
подпрограммы
в этом
библиотечном
файле
определен
макрос: ISR().
Этот
макрос
регистрирует
и помечает
некоторую
функцию как
обработчик
прерывания.
Например, так
выглядит
определение
обработчика
для
прерывания
от АЦП.
Если происходит неожиданное прерывание (прерывания разрешены, а никакого обработчика не установлено, что обычно указывает на ошибку), то по умолчанию происходит сброс микроконтроллера. Во избежание этого, следует перекрыть библиотечную функцию__vector_default, что можно сделать с помощью макроса ISR().
Аппаратные средства AVR сбрасывают флаг глобального разрешения прерываний в регистре SREG перед вводом вектора прерывания. Таким образом, дальнейшие прерывания запрещаются до выхода из обработчика обслуживаемого прерывания (до команды RETI, которая генерируется компилятором в конце обработки прерывания). По этой причине, программы обработки прерывания обычно не вкладывают друг в друга. Для большинства программ обработки прерывания, это - желательное поведение, для некоторых это даже требуется, чтобы предотвратить бесконечные рекурсивные прерывания (подобные UART).
Однако в редких случаях необходимо как можно раньше установить флаг глобального разрешения прерываний. Это можно сделать, используя sei () в начале программы обработки прерывания, но и в этом случае все еще остаются несколько команд в сгенерированной компилятором вводной части, с запрещёнными вложенными прерываниями. Компилятор можно проинструктировать, чтобы вставить право команды SEI в начале программы обработки прерывания, используя следующий путь:
void XXX_vect(void) __attribute__((interrupt));
void XXX_vect(void)
{
...
}
где XXX_vect допустимое имя вектора прерывания для рассматриваемого типа MCU (рассмотрено ниже).
Прерывание выбрано, если снабжено одним из имён нижеприведённой таблицы.
В последних версиях WinAVR допустимы две формы имён векторов. Одна форма использует имена, типа SIG_XXX - это была единственная доступная форма в avr-libc до версии 1.2.x. Начиная с avr-libc версии 1.4.0, добавилась вторая форма имен вектора прерывания, XXX_vect. Где XXX соответствует векторному имени, как описано в datasheet-e соответствующего устройства (и в файлах Atmel) с пробелами, замененными символом подчеркивания, и исключены другие не алфавитно-цифровые символы. Использование суффикса _vect применено, для того чтобы улучшить совместимость с другими компиляторами C, доступным для AVR. Форма SIG_XXX в будущем может стать осуждаемой, так что использовать её в новых проектах не рекомендуется.
Примечание:
Макрокоманда ISR() не может осуществить побуквенную проверку переданного ей параметра. Компилятор генерирует предупреждение лишь, если обнаруживает подозрительнее имя ISR() функции, такое, после которого, макрозамена начинается не с "__vector_".
Старое векторное имя |
Описание |
Применим для устройства |
|
ADC_vect |
SIG_ADC |
аналого-цифровое преобразование завершено |
AT90S2333,
AT90S4433, AT90S4434, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128,
AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega163, ATmega165,
ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325,
ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64,
ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168,
ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560,
ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny15,
ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85,
ATtiny261, ATtiny461, ATtiny861, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
ANALOG_COMP_0_vect |
SIG_COMPARATOR0 |
Аналоговый компаратор 0 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_1_vect |
SIG_COMPARATOR1 |
Аналоговый компаратор 1 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_2_vect |
SIG_COMPARATOR2 |
Аналоговый компаратор 2 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_vect |
SIG_COMPARATOR |
Аналоговый компаратор |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
ANA_COMP_vect |
SIG_COMPARATOR |
Аналоговый компаратор |
AT90S1200,
AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535,
ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8,
ATmega8515, ATmega8535, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny2313,
ATtiny26, ATtiny28, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25,
ATtiny85, ATtiny261, ATtiny461, ATtiny861 |
CANIT_vect |
SIG_CAN_INTERRUPT1 |
CAN Передача завершена или ошибка |
AT90CAN128, AT90CAN32, AT90CAN64 |
EEPROM_READY_vect |
SIG_EEPROM_READY,
SIG_EE_READY |
|
ATtiny2313 |
EE_RDY_vect |
SIG_EEPROM_READY |
EEPROM Готовый |
AT90S2333,
AT90S4433, AT90S4434, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163,
ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny12, ATtiny13, ATtiny15,
ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85,
ATtiny261, ATtiny461, ATtiny861 |
EE_READY_vect |
SIG_EEPROM_READY |
EEPROM Готовый |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
EXT_INT0_vect |
SIG_INTERRUPT0 |
Внешний Запрос на прерывание 0 |
ATtiny24, ATtiny44, ATtiny84 |
INT0_vect |
SIG_INTERRUPT0 |
Внешнее Прерывание 0 |
AT90S1200,
AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434,
AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64,
ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165,
ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325,
ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406,
ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515,
ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny26,
ATtiny28, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861,
AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT1_vect |
SIG_INTERRUPT1 |
Внешний Запрос на прерывание 1 |
AT90S2313,
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3,
AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128,
ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega406,
ATmega64, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88,
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P,
ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny28, ATtiny261,
ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286,
AT90USB647, AT90USB646 |
INT2_vect |
SIG_INTERRUPT2 |
Внешний Запрос на прерывание 2 |
AT90PWM3,
AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128,
ATmega16, ATmega161, ATmega162, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8515,
ATmega8535, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82,
AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT3_vect |
SIG_INTERRUPT3 |
Внешний Запрос на прерывание 3 |
AT90PWM3,
AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128,
ATmega406, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560,
ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
INT4_vect |
SIG_INTERRUPT4 |
Внешний Запрос на прерывание 4 |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286,
AT90USB647, AT90USB646 |
INT5_vect |
SIG_INTERRUPT5 |
Внешний Запрос на прерывание 5 |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
INT6_vect |
SIG_INTERRUPT6 |
Внешний Запрос на прерывание 6 |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286,
AT90USB647, AT90USB646 |
INT7_vect |
SIG_INTERRUPT7 |
Внешний Запрос на прерывание 7 |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
IO_PINS_vect |
SIG_PIN,
SIG_PIN_CHANGE |
Внешний Запрос на прерывание 0 |
ATtiny11, ATtiny12, ATtiny15, ATtiny26 |
LCD_vect |
SIG_LCD |
LCD Начало
Фрейма |
ATmega169,
ATmega169P, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega649,
ATmega6490 |
LOWLEVEL_IO_PINS_vect |
SIG_PIN |
Ввод низкого уровня на Порту B |
ATtiny28 |
OVRIT_vect |
SIG_CAN_OVERFLOW1 |
CAN Переполненный Таймер |
AT90CAN128, AT90CAN32, AT90CAN64 |
PCINT0_vect |
SIG_PIN_CHANGE0 |
прерывание по изменению уровня на выводе параллельного порта 0 |
ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
PCINT1_vect |
SIG_PIN_CHANGE1 |
прерывание по изменению уровня на выводе параллельного порта 1 |
ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny24, ATtiny44, ATtiny84, AT90USB162, AT90USB82 |
PCINT2_vect |
SIG_PIN_CHANGE2 |
прерывание по изменению уровня на выводе параллельного порта 2 |
ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
PCINT3_vect |
SIG_PIN_CHANGE3 |
прерывание по изменению уровня на выводе параллельного порта 3 |
ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
PCINT_vect |
SIG_PIN_CHANGE,
SIG_PCINT |
|
ATtiny2313, ATtiny261, ATtiny461, ATtiny861 |
PSC0_CAPT_vect |
SIG_PSC0_CAPTURE |
PSC0 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC0_EC_vect |
SIG_PSC0_END_CYCLE |
PSC0 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC1_CAPT_vect |
SIG_PSC1_CAPTURE |
PSC1 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC1_EC_vect |
SIG_PSC1_END_CYCLE |
PSC1 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC2_CAPT_vect |
SIG_PSC2_CAPTURE |
PSC2 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC2_EC_vect |
SIG_PSC2_END_CYCLE |
PSC2 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
SPI_STC_vect |
SIG_SPI |
прерывание от SPI |
AT90S2333,
AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1,
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161,
ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32,
ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290,
ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8,
ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P,
ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
SPM_RDY_vect |
SIG_SPM_READY |
память программ готова |
ATmega16,
ATmega162, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535 |
SPM_READY_vect |
SIG_SPM_READY |
память программ готова |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIM0_COMPA_vect |
SIG_OUTPUT_COMPARE0A |
Таймер/Счетчик Совпадение A |
ATtiny13,
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM0_COMPB_vect |
SIG_OUTPUT_COMPARE0B |
Таймер/Счетчик Совпадение B |
ATtiny13,
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM0_OVF_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
ATtiny13,
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_CAPT_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
ATtiny24, ATtiny44, ATtiny84 |
TIM1_COMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 Совпадение A |
ATtiny24,
ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_COMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик
1 Совпадение B |
ATtiny24,
ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_OVF_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
ATtiny24,
ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIMER0_CAPT_vect |
SIG_INPUT_CAPTURE0 |
прерывание по захвату на входе |
ATtiny261, ATtiny461, ATtiny861 |
TIMER0_COMPA_vect |
SIG_OUTPUT_COMPARE0A |
Таймер/Счетчик 0 Совпадение A |
ATmega168,
ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560,
ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313,
ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
TIMER0_COMPB_vect |
SIG_OUTPUT_COMPARE0B,
SIG_OUTPUT_COMPARE0_B |
Таймер/Счетчик 0 Совпадение B |
AT90PWM3,
AT90PWM2, AT90PWM1, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P,
ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162,
AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER0_COMP_A_vect |
SIG_OUTPUT_COMPARE0A,
SIG_OUTPUT_COMPARE0_A |
Таймер/Счетчик 0 Совпадение A |
AT90PWM3, AT90PWM2, AT90PWM1 |
TIMER0_COMP_vect |
SIG_OUTPUT_COMPARE0 |
Таймер/Счетчик 0 Совпадение |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8515, ATmega8535 |
TIMER0_OVF0_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
AT90S2313,
AT90S2323, AT90S2343, ATtiny22, ATtiny26 |
TIMER0_OVF_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
AT90S1200,
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3,
AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128,
ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169,
ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329,
ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450,
ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48,
ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny11, ATtiny12, ATtiny15,
ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82,
AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_CAPT1_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
AT90S2313 |
TIMER1_CAPT_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
AT90S2333,
AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2,
AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16,
ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169,
ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329,
ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450,
ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48,
ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, AT90USB162,
AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_CMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик
1 совпадение A |
ATtiny26 |
TIMER1_CMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик
1 совпадение B |
ATtiny26 |
TIMER1_COMP1_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик
1 совпадение A |
AT90S2313 |
TIMER1_COMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик1 Совпадение A |
AT90S4414,
AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32,
AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163,
ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325,
ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64,
ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515,
ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82,
AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_COMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик1 Совпадение B |
AT90S4414,
AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32,
AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163,
ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325,
ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64,
ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515,
ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82,
AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_COMPC_vect |
SIG_OUTPUT_COMPARE1C |
Таймер/Счетчик 1 Совпадение C |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286,
AT90USB647, AT90USB646 |
TIMER1_COMPD_vect |
SIG_OUTPUT_COMPARE0D |
Таймер/Счетчик 1 Совпадение D |
ATtiny261, ATtiny461, ATtiny861 |
TIMER1_COMP_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 Совпадение A |
AT90S2333, AT90S4433, ATtiny15 |
TIMER1_OVF1_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
AT90S2313, ATtiny26 |
TIMER1_OVF_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
AT90S2333,
AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2,
AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16,
ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169,
ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329,
ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450,
ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48,
ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny15, ATtiny2313,
ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMPA_vect |
SIG_OUTPUT_COMPARE2A |
Таймер/Счетчик 2 Совпадение A |
ATmega168,
ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560,
ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMPB_vect |
SIG_OUTPUT_COMPARE2B |
Таймер/Счетчик 2 Совпадение A |
ATmega168,
ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560,
ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287,
AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMP_vect |
SIG_OUTPUT_COMPARE2 |
Таймер/Счетчик 2 Совпадение |
AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535 |
TIMER2_OVF_vect |
SIG_OVERFLOW2 |
Таймер/Счетчик 2 Переполнение |
AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_CAPT_vect |
SIG_INPUT_CAPTURE3 |
Таймер/Счетчик 3 Захват |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
TIMER3_COMPA_vect |
SIG_OUTPUT_COMPARE3A |
Таймер/Счетчик
3 Совпадение A |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
TIMER3_COMPB_vect |
SIG_OUTPUT_COMPARE3B |
Таймер/Счетчик
3 Совпадение B |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
TIMER3_COMPC_vect |
SIG_OUTPUT_COMPARE3C |
Таймер/Счетчик
3 Совпадение C |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_OVF_vect |
SIG_OVERFLOW3 |
Таймер/Счетчик 3 Переполнение |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280,
ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647,
AT90USB646 |
TIMER4_CAPT_vect |
SIG_INPUT_CAPTURE4 |
Таймер/Счетчик 4 Захват |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPA_vect |
SIG_OUTPUT_COMPARE4A |
Таймер/Счетчик
4 Совпадение A |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPB_vect |
SIG_OUTPUT_COMPARE4B |
Таймер/Счетчик
4 Совпадение B |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPC_vect |
SIG_OUTPUT_COMPARE4C |
Таймер/Счетчик
4 Совпадение C |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_OVF_vect |
SIG_OVERFLOW4 |
Таймер/Счетчик 4 Переполнение |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_CAPT_vect |
SIG_INPUT_CAPTURE5 |
Таймер/Счетчик 5 Совпадение |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPA_vect |
SIG_OUTPUT_COMPARE5A |
Таймер/Счетчик
5 Совпадение A |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPB_vect |
SIG_OUTPUT_COMPARE5B |
Таймер/Счетчик
5 Совпадение B |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPC_vect |
SIG_OUTPUT_COMPARE5C |
Таймер/Счетчик
5 Совпадение C |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_OVF_vect |
SIG_OVERFLOW5 |
Таймер/Счетчик 5 Переполнение |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TWI_vect |
SIG_2WIRE_SERIAL |
2-проводный последовательный интерфейс (I2C) |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega16, ATmega163, ATmega32, ATmega323, ATmega406,
ATmega64, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P,
ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TXDONE_vect |
SIG_TXDONE |
Transmission
Done, Bit Timer Flag 2 Interrupt |
AT86RF401 |
TXEMPTY_vect |
SIG_TXBE |
Transmit
Buffer Empty, Bit Itmer Flag 0 Interrupt |
AT86RF401 |
UART0_RX_vect |
SIG_UART0_RECV |
UART0, Приём закончен |
ATmega161 |
UART0_TX_vect |
SIG_UART0_TRANS |
UART0, Передача закончена |
ATmega161 |
UART0_UDRE_vect |
SIG_UART0_DATA |
UART0 опустошение регистра данных |
ATmega161 |
UART1_RX_vect |
SIG_UART1_RECV |
UART1, Приём закончен |
ATmega161 |
UART1_TX_vect |
SIG_UART1_TRANS |
UART1, Передача закончена |
ATmega161 |
UART1_UDRE_vect |
SIG_UART1_DATA |
UART1 опустошение регистра данных |
ATmega161 |
UART_RX_vect |
SIG_UART_RECV |
UART, Приём закончен |
AT90S2313,
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103,
ATmega163, ATmega8515 |
UART_TX_vect |
SIG_UART_TRANS |
UART, Передача закончена |
AT90S2313,
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163,
ATmega8515 |
UART_UDRE_vect |
SIG_UART_DATA |
UART опустошение регистра данных |
AT90S2313,
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103,
ATmega163, ATmega8515 |
USART0_RXC_vect |
SIG_USART0_RECV |
USART0, Приём закончен |
ATmega162 |
USART0_RX_vect |
SIG_UART0_RECV |
USART0, Приём закончен |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART0_TXC_vect |
SIG_USART0_TRANS |
USART0, Передача закончена |
ATmega162 |
USART0_TX_vect |
SIG_UART0_TRANS |
USART0, Передача закончена |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART0_UDRE_vect |
SIG_UART0_DATA |
USART0 опустошение регистра данных |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART1_RXC_vect |
SIG_USART1_RECV |
USART1, Приём завершен |
ATmega162 |
USART1_RX_vect |
SIG_UART1_RECV |
USART1, Приём завершен |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART1_TXC_vect |
SIG_USART1_TRANS |
USART1, Передача закончена |
ATmega162 |
USART1_TX_vect |
SIG_UART1_TRANS |
USART1, Передача закончена |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART1_UDRE_vect |
SIG_UART1_DATA |
USART1, опустошение регистра данных |
AT90CAN128,
AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281,
ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644,
AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART2_RX_vect |
SIG_USART2_RECV |
USART2, Приём завершен |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART2_TX_vect |
SIG_USART2_TRANS |
USART2, Передача закончена |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART2_UDRE_vect |
SIG_USART2_DATA |
USART2 опустошение регистра данных |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_RX_vect |
SIG_USART3_RECV |
USART3, Приём завершен |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_TX_vect |
SIG_USART3_TRANS |
USART3, Передача закончена |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_UDRE_vect |
SIG_USART3_DATA |
USART3 опустошение регистра данных |
ATmega640,
ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART_RXC_vect |
SIG_USART_RECV,
SIG_UART_RECV |
USART, Приём завершен |
ATmega16, ATmega32, ATmega323, ATmega8 |
USART_RX_vect |
SIG_USART_RECV,
SIG_UART_RECV |
USART, Приём завершен |
AT90PWM3,
AT90PWM2, AT90PWM1, ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490,
ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313 |
USART_TXC_vect |
SIG_US |
|
|
Управление флагом глобального разрешения прерываний |
|
||
Флаг глобального разрешения прерываний расположен в регистре состояния (SREG). |
|
||
#define |
sei() |
|
|
#define |
cli() |
|
|
Макроопределения для написания функций обработки прерываний |
|
||
|
|
||
#define |
ISR(vector) |
|
|
#define |
SIGNAL(vector) |
|
|
#define |
EMPTY_INTERRUPT(vector) |
|
|
#define |
ISR_ALIAS(vector,
target_vector) |
|
( |
|
) |
|
#include <avr/interrupt.h>
-
запрещает
прерывания,
сбрасывая
флаг глобального
разрешения
прерываний.
#define sei |
( |
|
) |
|
#include <avr/interrupt.h>
-
разрешает
прерывания,
устанавливая
флаг глобального
разрешения
прерываний.
#define ISR |
( |
vector |
|
) |
|
#include <avr/interrupt.h>
-
обработка
прерывания,
выполняется
с первоначально
заблокированными
глобальными
прерываниями.
vector - должен быть одним из имён вектора прерывания, которые допустимы для применяемого MCU.
#define SIGNAL |
( |
vector |
|
) |
|
#include <avr/interrupt.h>
- устаревший вариант, аналог - макрокоманды ISR. Не используйте SIGNAL() в новых программах. Вместо этого используйте ISR().
( |
vector |
|
) |
|
#include <avr/interrupt.h>
- пустая функция обработки прерывания. Она не сгенерирует никакого кода пролога или эпилога, и только возвратит из поиска и хранения информации. Не определяйте тело функции, поскольку функция сделает это за Вас.
Пример: EMPTY_INTERRUPT(ADC_vect);
( |
vector, |
|
|||
|
|
target_vector |
|
) |
|
#include <avr/interrupt.h>
Определяет vector указывающий на тот же самый вектор прерывания что и target_vector. Тем самым может использоваться единственное выполнение вектора прерывания, чтобы обслужить несколько источников прерывания. Не определяйте тело функции, поскольку функция сделает это за Вас.
Примечание:
Этот марос поддержан только в последних версиях AVR-GCC, (GCC 4.2 или исправленной GCC 4.1.x).
Пример:
ISR(INT0_vect)
{
PORTB = 42;
}
ISR_ALIAS(INT1_vect, INT0_vect);