Домашняя страница библиотеки_c AVR

Синтаксис языка C

Библиотека языка C GNU glibc

Страницы развития библиотеки_с AVR

Главная страница

Инструкция пользователя

Содержание библиотеки_c

Часто задаваемые вопросы

Содержание по алфавиту

Демонстрационные проекты


<avr/interrupt.h>: Прерывания

Детальное Описание.

Примечание: Это описание прерываний взято из документа Рича Несуолда. См. Благодарности.

Введение в обработку прерываний avr-libc

В различных компиляторах обработка прерываний реализована по-разному, так как язык C старается оставаться подальше от машинно-зависимых подробностей. В среде WinAVR используется предустановленная таблица векторов прерываний, содержащая адреса соответствующих подпрограмм обслуживания с заранее определенными именами. Для каждой такой подпрограммы в этом библиотечном файле определен макрос: ISR(). Этот макрос регистрирует и помечает некоторую функцию как обработчик прерывания. Например, так выглядит определение обработчика для прерывания от АЦП.

#include <avr/interrupt.h>
 
ISR(ADC_vect)
{
    // Пользовательский код здесь
}

Всеобъемлющий вектор прерывания

Если происходит неожиданное прерывание (прерывания разрешены, а никакого обработчика не установлено, что обычно указывает на ошибку), то по умолчанию происходит сброс микроконтроллера. Во избежание этого, следует перекрыть библиотечную функцию__vector_default, что можно сделать с помощью макроса ISR().

#include <avr/interrupt.h>
 
ISR(__vector_default)
{
    // здесь пользовательский код
}

Вложенные прерывания

Аппаратные средства 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)

 


Документация макроопределений

#define cli

 

 ) 

 

#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().

#define EMPTY_INTERRUPT

(

vector 

 

 ) 

 

#include <avr/interrupt.h> 

- пустая функция обработки прерывания. Она не сгенерирует никакого кода пролога или эпилога, и только возвратит из поиска и хранения информации. Не определяйте тело функции, поскольку функция сделает это за Вас.

Пример: EMPTY_INTERRUPT(ADC_vect);

#define ISR_ALIAS

(

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);
Hosted by uCoz