
- •Микроконтроллеры
- •Базовая информация о микроконтроллерах
- •Сущность и назначение микроконтроллера. Семейства микроконтроллеров
- •Состав микроконтроллера
- •Назначение микроконтроллера
- •Cемейства микроконтроллеров
- •Отправная точка. Микроконтроллерi8051
- •Основные характеристики микроконтроллераi8051
- •Назначение выводовi8051
- •Структурная схемаi8051
- •Микроконтроллеры семействаavrкомпанииatmel
- •Общая характеристика архитектуры, системы команд и ассемблераAvr
- •Состав семейства и основные характеристики микроконтроллеровAvr
- •Структура ассемблерного кодаAvr
- •Группы команд микроконтроллеров avr
- •Директивы ассемблераAvr
- •Список директив ассемблераAvr
- •Директива byte
- •Директива cseg
- •Директива db
- •Директива def
- •Директива device
- •Директива dseg
- •Директива dw
- •Директивы macro иEndmacro
- •Директива equ
- •Директива set
- •Микроконтроллер atmega8535
- •Характеристики, назначение выводов и структура микроконтроллера aTmega8535
- •Характеристики микроконтроллера aTmega8535
- •Назначение выводов микроконтроллера aTmega8535
- •Структура микроконтроллера aTmega8535
- •Сброс микроконтроллера aTmega8535. Режимы пониженного энергопотребления. Сигналы запроса внешних прерываний. Регистры управления
- •Сброс микроконтроллера aTmega8535
- •Регистр mcucsr (mcu Control and Status Register)
- •Регистр mcucr (mcu Control Register)
- •Режимы пониженного энергопотребления
- •Форма сигналов запроса внешних прерываний
- •Регистры общего назначения, регистр состояния и указатель стека микроконтроллера aTmega8535
- •Регистры общего назначения
- •Регистр состояния (sreg)
- •Указатель стека
- •Ввод-вывод
- •Регистры и команды ввода-вывода
- •Порты ввода-вывода
- •Прерывания
- •Источники и таблица векторов прерываний
- •Регистр gicr (General Interrupt Control Register)
- •Внешние прерывания
- •Регистр gifr (General Interrupt Flag Register)
- •Таймеры микроконтроллера aTmega8535
- •Общая информация о таймерах микроконтроллера aTmega8535
- •Множество таймеров aTmega8535
- •Регистр timsk (Timer/Counter Interrupt Mask Register)
- •Регистр tifr (Timer/Counter Interrupt Flag Register)
- •Примеры программ работы с таймером
- •Таймер t0
- •Назначение и свойства таймера t0
- •Структура таймера t0
- •Регистры таймера t0
- •Регистр tccr0 (Timer/Counter Control Register)
- •Устройство сравнения таймера t0
- •Режимы работы таймера t0
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fastPwMmode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Таймер t1
- •Назначение и свойства таймера t1
- •Структура таймера t1
- •Регистры таймера t1
- •Регистр tccr1a (Timer/Counter1 Control Register a)
- •Регистр tccr1b (Timer/Counter1 Control Register b)
- •Задание режима генерации сигнала битами wgm13:0
- •Устройство захвата (Input Capture Unit)
- •Режимы работы таймера t1
- •Список режимов работы таймера t1
- •Режим быстрой шим (fast pwm mode) таймера t1
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode) таймера t1
- •Режим шим с корректировкой фазы и частоты (Phase and Frequency Correct pwm Mode) таймера t1
- •Таймер t2
- •Назначение и свойства таймера t2
- •Структура таймера t2
- •Регистры таймера t2
- •Регистр tccr2 (Timer/Counter Control Register)
- •Устройство сравнения таймера t2
- •Режимы работы таймера t2
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fast pwm mode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Асинхронный режим работы таймера t2. Регистр assr (Asynchronous Status Register)
Регистр gicr (General Interrupt Control Register)
Регистр GICR управляет маскированием внешних прерываний и размещением таблицы векторов прерываний.
Формат регистра GICR:
бит 7 — INT1, маска внешнего прерывания INT1;
бит 6 — INT0, маска внешнего прерывания INT0;
бит 5 — INT2, маска внешнего прерывания INT2;
бит 1 — IVSEL (Interrupt Vector Select);
бит 0 — IVCE (Interrupt Vector Change Enable).
Если IVSEL сброшен, вектора прерываний располагаются в начале Flash-памяти, если установлен — в начале загрузочной секции.
Адрес начала загрузочной секции определяется перемычками BOOTSZ.
Чтобы изменить расположение векторов прерываний, надо установить бит IVCE, а затем в течение четырех циклов — бит IVSEL. IVCE сбрасывается аппаратно по прошествии четырех циклов после своей установки или при установке IVSEL. При выполнении этой последовательности действий прерывания запрещаются автоматически, но на бит I регистра SREG это не влияет.
Пример.
Подпрограмма перемещения векторов прерываний на ассемблере:
Move_interrupts:
; Enable change of interrupt vectors
ldi r16, (1<<IVCE)
out GICR, r16
; Move interrupts to boot Flash section
ldi r16, (1<<IVSEL)
out GICR, r16
ret
Функция перемещения векторов прерываний на C:
void Move_interrupts(void)
{
/* Enable change of interrupt vectors */
GICR = (1<<IVCE);
/* Move interrupts to boot Flash section */
GICR = (1<<IVSEL);
}
Внешние прерывания
Внешние прерывания принимаются по выводам INT0, INT1, INT2. Они распознаются, если бит I регистра SREG и соответствующие маски прерываний регистра GICR. Микроконтроллер реагирует на них при этих условиях, если даже выводы INT0, INT1, INT2 сконфигурированы как выходы. Внешние прерывания могут приниматься передним или задним фронтом или низким уровнем. INT2 принимается только фронтом. Прием сигнала прерывания по выводам INT0, INT1 фронтом требует тактирования ввода-вывода. Прием сигнала прерывания низким уровнем по выводам INT0, INT1 или фронтом по выводу INT2 является асинхронным. Тактирование ввода-вывода останавливается во всех режимах пониженного энергопотребления, кроме Idle. Таким образом, асинхронный прием сигнала прерывания может использоваться для вывода микроконтроллера из этих режимов. При выходе из режима Power-down низкий уровень сигнала прерывания должен удерживаться достаточное время для обработки прерывания. Это делает MCU менее чувствительным к шуму. Надо отметить, что возможна ситуация, когда MCU просыпается, но не выполняет переход к обработчику прерывания.
Регистр gifr (General Interrupt Flag Register)
Регистр GIFR содержит флаги внешних прерываний:
бит 7 — INTF1, флаг внешнего прерывания INT1;
бит 6 — INTF0, флаг внешнего прерывания INT0;
бит 5 — INTF2, флаг внешнего прерывания INT2.
Остальные биты зарезервированы.
Если INT1 и INT0 принимаются уровнем, соответствующие флаги всегда сброшены. В остальных случаях все флаги устанавливаются, когда поступает сигнал прерывания, и сбрасываются после перехода к обработчику прерывания. Также они могут быть сброшены записью в них логической единицы.