
- •5.3. Микроконтроллер avr at90s8515 семейства Classic
- •Организация памяти микроконтроллера
- •Память программ
- •Память данных
- •Использование внешнего озу
- •Регистры общего назначения
- •Регистры ввода/вывода
- •Энергонезависимая память данных
- •Сторожевой таймер
- •Последовательный периферийный интерфейс spi
- •Прерывания
- •Обработка прерываний
- •Программирование микроконтроллеров
- •Защита программного кода и данных
- •Система команд и способы адресации памяти данных
- •Прямая адресация
- •Прямая адресация одного регистра общего назначения
- •Прямая адресация двух регистров общего назначения
- •Прямая адресация регистра ввода/вывода
- •Прямая адресация озу
- •Косвенная адресация
- •Простая косвенная адресация
- •Относительная косвенная адресация
- •Косвенная адресация с преддекрементом
- •Косвенная адресация с постинкрементом
- •Система команд
- •Операнды
- •Типы команд
- •Команды арифметических и логических операций
- •Команды пересылки данных
- •Команды передачи управления
- •Команды операций с битами
- •Команды управления системой
- •Пример программы и её оформление
- •Микропроцессорная система управления на базе мк at90s8515
- •7. Микроконтроллер экр1847вг6
- •8. Частотно-регулируемые привода
- •Режимы управления асинхронными электродвигателями
- •Преобразователь частоты 1336Plus
Прерывания
Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу должна находиться команда относительного перехода к подпрограмме обработки прерывания. Кроме того, последней командой подпрограммы обработки прерывания должна быть команда RETI, которая обеспечивает возврат в основную программу и восстановление предварительно сохранённого счетчика команд.
Поскольку источниками прерываний являются различные периферийные устройства микроконтроллеров, количество прерываний зависит от конкретной модели.
Таблица векторов прерываний МК AT90S8515
Микроконтроллеры AVR семейства Classic имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $001, отведены под таблицу векторов прерывания. Каждому прерыванию соответствует свой адрес в этой таблице, и именно этот адрес загружается в счётчик команд при возникновении прерывания. Положение вектора в таблице определяет также и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Распределение адресов векторов прерываний (ВП) микроконтроллера AT90S8515 приведено в табл. 5.25. Если в программе прерывания не используются, то на месте таблицы векторов прерываний может быть размещена основная программа.
Обработка прерываний
Для разрешения прерываний флаг I регистра SREG должен быть установлен в «1». А разрешение или запрещение (маскирование) отдельных прерываний производится установкой или сбросом соответствующих разрядов регистров масок прерываний, рассматриваемых ниже.
Обработка прерываний осуществляется следующим образом:
при выполнении условий, необходимых для генерации прерывания, соответствующий этому прерыванию флаг устанавливается в «1», а флаг I аппаратно сбрасывается, запрещая тем самым обработку следующих прерываний. Однако в подпрограмме обработки прерывания этот флаг можно будет установить в «1» для разрешения вложенных прерываний;
Таблица 5.25. Адреса векторов прерывания МК АТ90S8515
Источник |
Описание |
Адрес ВП AT90S8515 |
Приоритет |
INT0 |
Внешнее прерывание 0 |
$001 |
Высший |
INT1 |
Внешнее прерывание 1 |
$002 |
|
TIMER1 CAPT |
Захват таймера/счетчика Т1 |
$003 |
|
T1MER1 COMPA |
Совпадение «А» таймера/счетчика Т1 |
$004 |
|
T1MER1 COMPB |
Совпадение «В» таймера/счетчика Т1 |
$005 |
|
T1MER1 OVF |
Переполнение таймера/счетчика Т1 |
$006 |
|
TIMER0 OVF |
Переполнение таймера/счетчика Т0 |
$007 |
|
SPI, STC |
Передача по SPI завершена |
$008 |
|
UART, RX |
UART, прием завершён |
$009 |
|
UART, UDRE |
Регистр данных UART пуст |
$00A |
|
UART, TX |
UART, передача зaвершена |
$00B |
|
ANA_COMP |
Аналоговый компаратор |
$00C |
Низший |
если прерывание разрешено (флаг разрешения прерывания установлен), в счётчик команд загружается адрес вектора соответствующего прерывания ($002...$00С). При этом флаг прерывания аппаратно сбрасывается.
выполняется подпрограмма обработки прерывания (команды перехода на соответствующие подпрограммы показаны в табл. 5.26);
Таблица 5.26. Команды переходов, записываемые по адресам ВП
Адрес ВП |
Команда перехода |
Выполняемый переход |
$000 |
rjmp RESET |
Reset Handler (по сбросу) |
$001 |
rjmp EXT_INT0 |
IRQ0 Handler (по IRQ0) |
$002 |
rjmp EXT_INT1 |
IRQ1 Handler (по IRQ1) |
$003 |
rjmp TIM1_CAPT |
Timer1 Capture Handler (по захвату Т/С1) |
$004 |
rjmp TIM1_COMPA |
Timer1 CompareA Handler (по совпадению "А" Т/С1) |
$005 |
rjmp TIM1_COMPB |
Timer1 CompareB Handler (по совпадению "В" Т/С1) |
$006 |
rjmp TIM1_OVF |
Timer1 Overflow Handler (по переполнению Т/С1) |
$007 |
rjmp TIM0_OVF |
Timer0 Overflow Handler (по переполнению Т/С0) |
$008 |
rjmp SPI_STC |
SPI Transfer Complete Handler (при завершении передачи по SPI) |
$009 |
rjmp UART_RXC |
UART RX Complete Handler (по завершении приёма UART) |
$00A |
rjmp UART_DRE |
UDR Empty Handler (при пустом регистре данных UART) |
$00B |
rjmp UART_TXC |
UART TX Complete Handler (по завершении передачи UART) |
$00C |
rjmp ANA_COMP |
Analog Comparator Handler (при срабатывании аналогового компаратора) |
выполняется команда возврата из прерывания RETI, при этом флаг I аппаратно устанавливается в «1», разрешая обработку последующих прерываний;
центральный процессор автоматически восстанавливает содержимое счетчика команд. Затем основная программа продолжает свое выполнение с того места, где она была прервана.
При вызове подпрограмм обработки прерываний содержимое регистра состояния SREG не сохраняется. Поэтому пользователь должен самостоятельно запоминать содержимое этого регистра при входе в подпрограмму обработки прерывания (если это необходимо) и восстанавливать его значение перед вызовом команды RETI.
Для прерываний, вызванных статическими событиями (например, для прерывания, генерируемого при равенстве содержимого счётного регистра и регистра сравнения таймера), флаг прерывания устанавливается только в момент возникновения события. Если флаг прерывания сброшен, а условия генерации прерывания присутствуют, флаг будет установлен только в момент возникновения следующего события.
Для внешних прерываний, генерируемых по уровню, флаги не предусмотрены, поэтому информация об этих прерываниях будет храниться до тех пор, пока присутствует событие, вызывающее прерывание. Микроконтроллеры AVR семейства Classic поддерживают очередь прерываний. Она работает следующим образом: если условия генерации одного или более прерываний возникают в то время, когда флаг общего разрешения прерываний сброшен (все прерывания запрещены), соотстствующие флаги устанавливаются в «1» и остаются в этом состоянии до установки флага общего разрешения прерываний. После разрешения прерываний выполняется их обработка в соответствии с приоритетом.
Время отклика для любого прерывания составляет 4 машинных цикла. В течение первых двух машинных циклов происходит сохранение счётчика команд в стеке, а в течение следующих двух циклов выполняется команда перехода к подпрограмме обработки прерывания. Причем если прерывание произойдет во время выполнения команды, длящейся несколько циклов, то генерация прерывания произойдет только после выполнения этой команды. Под временем отклика здесь понимается время, прошедшее от наступления события (oт установки флага прерывания) до выполнения первой команды подпрограммы обработки прерывания.
Возврат в основную программу также занимает 4 машинных цикла. После выхода из прерывания процессор всегда выполняет одну команду основной программы, прежде чем обслужить любое отложенное прерывание.
Управление внешними прерываниями осуществляется посредством двух регистров GIMSK и GIFR. Регистр маски прерывания GIMSK используется для разрешения/запрещения внешний прерываний, а GIFR- для индикации наступления внешний прерываний. В табл. 5.27 и табл. 5.28 приведено описание бит этих регистров.