Лабораторная работа №5
Таймеры-счетчики. Прерывания. ШИМ.
Основные теоретические положения
Прерывания
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.
Вектор прерывания — закреплённый за событием номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний, содержащую адреса обработчиков прерываний. Местоположение таблицы зависит от типа и режима работы процессора.
Вектор прерываний ATMega32:
Полный перечень векторов представлен в Таблице. Перечень представляет также уровень приоритета для каждого прерывания. Прерывания с младшими адресами имеют больший уровень приоритета. RESET имеет наивысший уровень приоритета, следующим является INT0 - Запрос внешнего прерывания 0 и т.д.
|
|
Векторы сброса и прерываний
Vector No. | Program Address | Source | Interrupt Definition |
$0000 | RESET | Сброс по выводу и сторожевому таймеру (Hardware Pin and Watchdog Reset) | |
$0002 | INT0 | Запрос внешнего прерывания 0 (External Interrupt Request 0) | |
$0004 | INT1 | Запрос внешнего прерывания 1 (External Interrupt Request 1) | |
$0006 | INT2 | Запрос внешнего прерывания 2 (External Interrupt Request 2) | |
$0008 | TIMER2 COMP | Совпадение при сравнении таймера/счетчика 2 (Timer/Counter2 Compare Match) | |
$000A | TIMER2 OVF | Переполнение таймера/счетчика 2 (Timer/Counter2 Overflow) | |
$000C | TIMER1 CAPT | Захват таймера/счетчика 1 (Timer/Counter1 Capture Event) | |
$000E | TIMER1 COMPA | Совпадение A при сравнении таймера/счетчика 1 (Timer/Counter1 Compare Match A) | |
$0010 | TIMER1 COMPB | Совпадение B при сравнении таймера/счетчика 1 (Timer/Counter1 Compare Match B) | |
$0012 | TIMER1 OVF | Переполнение таймера/счетчика 1 (Timer/Counter1 Overflow) | |
$0014 | TIMER0 COMP | Совпадение при сравнении таймера/счетчика 0 (Timer/Counter0 Compare Match) | |
$0016 | TIMER0 OVF | Переполнение таймера/счетчика 0 (Timer/Counter0 Overflow) | |
$0018 | SPI, STC | Завершение пересылки SPI (SPI Ser ial Transfer Complete) | |
$001A | UART, RXC | Завершение приема UART (UART, Rx Complete) | |
$001C | UART, UDRE | Регистр данных UART пуст (UART Data Register Empty) | |
$001E | UART, TXC | Завершение передачи UART (UART, Tx Complete) | |
$0020 | ADC | Завершение ADC преобразования (ADC Conversion Complete) | |
$0022 | EE READY | Готовность EEPROM (EEPROM Ready) | |
$0024 | ANALOG COMP | Срабатывание аналогового компаратора (Analog Comparator) | |
$0026 | TWI | Двухпроводной последовательный интерфейс (Two-wire Serial Interface) | |
$0028 | SPM_RDY | Готовность памяти программ EEPROM (Store Program Memory Ready) |
До окончания обработки прерывания устанавливается запрет на обработку прерывания.
|
|
Отклик на выполнение всех разрешенных прерываний AVR составляет минимум 4 тактовых цикла. В течение 4 тактовых циклов после установки флага прерывания выполняется переход по адресу вектора прерывания для выполнения подпрограммы прерывания. В течение этих 4 циклов содержимое счетчика команд (2 байта) опускаются в стек и указатель стека декрементируется на 2. Вектор указывает переход в подпрограмму обработки прерывания и этот переход занимает 3 тактовых цикла. Если прерывание возникнет во время выполнения многоцикловой команды, то команда завершается до начала обслуживания прерывания. Возврат из подпрограммы (RETI) обработки прерывания (как и вызов подпрограммы) занимает 4 тактовых цикла. В течение этих 4 циклов состояние счетчика команд (2 байта) извлекается из стека и указатель стека инкрементируется на 2. Когда AVR выходит из прерывания, он всегда возвращается в основную программу и выполняет еще одну команду, прежде, чем начать обслуживание какого либо отложенного прерывания.
Отметим, что регистр статуса SREG не обрабатывается аппаратными средствами AVR, ни для прерываний, ни для подпрограмм.
При обработке подпрограмм прерываний, требующих сохранения в SREG, запись должна выполняться программными средствами пользователя. Для прерываний, запускаемых статическими событиями (например совпадение содержимого регистра сравнения 1A с состоянием таймера/счетчика1) флаг прерывания устанавливается в момент наступления события. Если флаг очищен, но условия возникновения прерывания продолжают существовать, флаг не будет устанавливаться до тех пор, пока это событие не наступит вновь.