Лабораторная работа №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) флаг прерывания устанавливается в момент наступления события. Если флаг очищен, но условия возникновения прерывания продолжают существовать, флаг не будет устанавливаться до тех пор, пока это событие не наступит вновь.