Векторы сброса и прерываний

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: