Программирование AVR 10-разрядный высокоскоростной Timer/Counter4 Sat, December 07 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


10-разрядный высокоскоростной Timer/Counter4 Печать
Добавил(а) microsin   

Таким таймером/счетчиком снабжено несколько микроконтроллеров семейства ATmega. Здесь переведена часть даташита ATmega32U4, посвященная внутреннему устройству и программированию Timer/Counter4.

У таймера/счетчика 4 (Timer/Counter4) есть следующие функции и возможности:

• Точность до 10 бит.
• Три независимых блока сравнения для генерации выходных сигналов (Output Compare Units).
• Сброс таймера при (Auto Reload) событии совпадения (Compare Match).
• Точная генерация частоты сигнала ШИМ (PWM) без дрожания перепадов и фазы (Glitch Free, Phase and Frequency Correct Pulse Width Modulator).
• Расширенный режим генерации ШИМ (Enhanced PWM mode): один дополнительный бит точности, не влияющий на выходную частоту.
• Переменный период PWM.
• Независимые генераторы "мертвого времени" (Dead Time Generator) для каждого из каналов PWM.
• Синхронное обновление регистров PWM.
• Пять независимых источника прерывания (TOV4, OCF4A, OCF4B, OCF4D, FPF4).
• Высокоскоростной асинхронный (High Speed Asynchronous) и синхронный (Synchronous) режимы тактирования.
• Отдельный блок предделителя (Prescaler Unit).

Timer/Counter4 является модулем высокоскоростного таймера/счетчика общего назначения, с тремя независимыми блоками сравнения и с поддержкой расширенного режима PWM.

В контексте применения Timer/Counter4 обладает высокой разрешающей способностью и точностью, освобождая ядро от лишних вычислений. Его три модулятора PWM могут использовать тактовые частоты до 64 МГц. В режим PWM поддерживается обслуживание генерации трех отдельных сигнала PWM, выходы которых работают в режимах без перекрытия (non-overlapping), без инверсии (non-inverted) и с инверсией (inverted). Расширенный режим PWM позволяет добиться повышенной точности с сохранением частоты такой же, как и в обычном режиме (PWM 8-битной точности в расширенном режиме выдает ту же частоту сигнала, что и PWM 7-битной точности в обычном режиме). Функция захвата (lock feature) позволяет безопасно обновлять регистры PWM.

Упрощенная блок-схема Timer/Counter4 показана на рис. 15-1. Реальная привязка аппаратных выводов PWM к ножкам процессора показана в разделе "Pinout" даташита (см. врезку для корпуса TQFP44 ATmega32U4).

ATmega TC4 Block Diagram fig15 01

Рис. 15-1. Блок-схема Timer/Counter4.

Скорость. Timer/Counter4 может работать на максимальной частоте 64MHz. Однако если используется напряжение питания ниже 4V, рекомендуется уменьшить входную частоту, потому что Timer/Counter4 на низких уровнях напряжения питания работает недостаточно быстро.

Точность. Timer/Counter4 имеет разрядность 10 бит, но альтернативно может использоваться как 8-разрядный таймер/счетчик. Регистры Timer/Counter4 8-битные, и для программирования старших 2-бит параметров применяется промежуточный регистр (High Byte Register, TC4H), который используется как временный буфер. Благодаря этому буферу появляется возможность 10-битного доступа к регистрам Timer/Counter4 через 8-битную шину данных AVR CPU, если требуется 10-битная точность. Таким образом, если два старших бита 10-битных регистров равны 0, то Timer/Counter4 работает как 8-разрядный таймер/счетчик. Когда считывается младший байт любого 10-битного регистра, два его старших бита записываются в регистр TC4H, и когда записывается младший байт, два старших бита для записи берутся из регистра TC4H. Для такого 10-битного доступа требуется специальная последовательность действий, что описано ниже в разделе "Как организован доступ к 10-битным регистрам".

Расширенный режим ШИМ (Enhanced PWM mode) позволяет добавить один бит разрешающей способности для каждого регистра сравнения A/B/D, при этом выходная частота остается идентичной обычному режиму ШИМ (Normal PWM mode). Это означает, что регистр TC4H содержит один дополнительный бит, который играет роль старшего в 11-разрядном расширенном функционировании PWM. Подробнее см. секцию "Enhanced Compare/PWM mode".

Регистры. Регистр таймера/счетчика (TCNT4) и регистры сравнения (Output Compare Registers, OCR4A, OCR4B, OCR4C и OCR4D) это 8-битные регистры, которые используются как источники данных для операций сравнения TCNT4 с содержимым OCR4A, OCR4B, OCR4C и OCR4D. Регистры OCR4A, OCR4B и OCR4D определяют работу выводов OC4A, OC4B и OC4D, и они могут также генерировать прерывания при событии совпадения (compare match interrupts). Регистр OCR4C хранит верхнее значение счета таймера счетчика (так называемое значение TOP), т. е. это значение, используемое для перезапуска цикла PWM. Регистр старшего байта (TC4H) является 2-битным регистром, используемым как общий временный буфер для старших бит регистров Timer/Counter4, если используется 10-разрядная точность.

Сигналы запроса прерывания (переполнение TOV4, совпадение OCF4A, OCF4B, OCF4D и защита от сбоев FPF4) доступны через регистр флагов прерываний (Timer Interrupt Flag Register, TIFR4) и Timer/Counter4 Control Register D (TCCR4D). Прерывания индивидуально маскируются с помощью регистра Timer Interrupt Mask (TIMSK4) и бита FPIE4 в регистре Timer/Counter4 Control Register D (TCCR4D).

Сигналы управления находятся в регистрах TCCR4A, TCCR4B, TCCR4C, TCCR4D и TCCR4E.

Синхронизация. В асинхронном режиме тактирования Timer/Counter4 и прескалер позволяют CPU работать от любого источника тактирования, в то время как прескалер работает от быстрой частоты тактирования периферийных устройств (fast peripheral clock, PCK), которая может быть до 64 МГц. Это стало возможным потому, что есть граница синхронизации между доменом тактирования CPU и доменом PCK. На рис. 15-2 показан блок регистров синхронизации Timer/Counter 4, и описываются задержки синхронизации между регистрами. Имейте в виду, что на этом рисунке не показаны подробности прохождения всех тактовых частот.

ATmega TC4 Synchronization Register Block Diagram fig15 02

Рис. 15-2. Блок-схема синхронизации регистров Timer/Counter4.

Значения регистров Timer/Counter4 проходят через внутренние регистры синхронизации, которые вводят задержку входной синхронизации перед тем, как новые значения вступят в силу и повлияют на работу счетчика. Регистры TCCR4A, TCCR4B, TCCR4C, TCCR4D, OCR4A, OCR4B, OCR4C и OCR4D могут быть прочитаны после своей записи. Обратное чтение задерживается для регистров TCNT4, TC4H и регистров флагов (OCF4A, OCF4B, OCF4D и TOV4), потому что имеется синхронизация между входом и выходом.

Системная тактовая частота должна быть меньше половины частоты PCK, потому что механизм синхронизации асинхронного Timer/Counter4 нуждается в как минимум двух перепадах PCK, когда сигнал системных тактов в лог. 1. Если системная частота слишком высока, есть риск потери данных или управляющих значений.

Терминология. Многие обозначения регистров и их бит записаны в общей форме. Буква "n" в нижнем регистре заменяется номером таймера/счетчика (для Timer/Counter 4 буква n заменяется на 4). Буква "x" в нижнем регистре заменяет буквенный идентификатор блока сравнения (буквы A, B, C, D блока Output Compare). Однако когда в программе используются имена регистров и бит, должна использоваться не общая, а полная форма. Например, для доступа к счетчику таймера нужно использовать TCNT4, и т. п.

Также в таблицах используются следующие специальные значения:

BOTTOM Счетчик достигает минимального значения, когда становится равным 0.

MAX Максимум. Счетчик достигает максимального значения, когда в нем находится число 0x3FF (десятичное 1023).

TOP Верхний предел. Счетчик достигает этого значения (оно хранится в регистре OCR1C), как предельного значения в последовательности счета. По умолчанию (после сброса или включения питания) значение TOP равно 0x0FF.

[Блок счетчика]

Основная часть Timer/Counter4 - программируемый счетчик, который может считать в обоих направлениях. На рис. 15-3 показана блок-схема счетчика и его окружение.

ATmega TC4 Counter Unit Block Diagram fig15 03

Рис. 15-3. Блок счетчика.

Описание сигналов (это внутренние сигналы):

count: разрешение инкремента или декремента TCNT4.
direction: выбор между инкрементом и декрементом.
clear: сброс TCNT4 (установка всех его бит в 0).
clkTn: такты таймера/счетчика, далее по тексту это clkT4.
top: сигнал о том, что TCNT4 достиг предельного значения.
bottom: сигнал о том, что TCNT4 достиг минимального значения (0).

В зависимости от используемого режима работы счетчик очищается, инкрементируется или декрементируется на каждом такте (тактовой частоты clkT4). Такты таймера генерируются от синхронной системной частоты или от тактов асинхронной системы ФАПЧ (asynchronous PLL). Это настраивается битами выбора тактов CS43..CS40 и битами пост-делителя ФАПЧ (PLL Postscaler for High Speed Timer, PLLTM1:0). Когда не выбран источник тактирования (CS43..CS40 = 0000), таймер остановлен. Однако к значению счетчику TCNT4 можно обращаться программно независимо от того, присутствует частота тактов clkT4, или нет. Запись со стороны ядра CPU отменяет (т. е. имеет высший приоритет) все операции очистки или счета.

Последовательность счета Timer/Counter4 определяется установкой бит WGM40 и PWM4x (PWM4A, PWM4B, PWM4D), которые находятся в регистрах управления TCCR4A, TCCR4C и TCCR4D. Более подробно по режимам счета и генерации сигналов см. раздел "Режимы работы". Флаг переполнения таймера счетчика (Timer/Counter Overflow TOV4) установится в зависимости от режима, выбранного битами PWM4x и WGM40. Флаг переполнения может генерировать прерывание CPU.

Инициализация счетчика в асинхронном режиме. Чтобы поменять режим Timer/Counter4 на асинхронный, следуйте процедуре:

1. Разрешите PLL.
2. Подождите 100 мкс, чтобы PLL застабилизировалась.
3. Опрашивайте бит PLOCK, пока он не установится.
4. Сконфигурируйте биты PLLTM1:0 регистра PLLFRQ, чтобы разрешить работу асинхронного режима (эти биты должны получить значение, отличающееся от 00).

Блок сравнения (Output Compare Unit). Цифровой компаратор непрерывно сравнивает TCNT4 с регистрами OCR4A, OCR4B, OCR4C и OCR4D. Всякий раз, когда TCNT4 сравняется с одним из них, наступает специальное событие совпадения. Это событие установит соответствующий флаг (Output Compare Flag, OCF4A, OCF4B или OCF4D) на следующем такте таймера. Если разрешено соответствующее прерывание, то Output Compare Flag сгенерирует прерывание Output Compare. Output Compare Flag автоматически очистится при выполнении обработчика прерывания. Альтернативно этот флаг может быть сброшен записью лог. 1 в соответствующую позицию бита. Генератор сигналов (Waveform Generator) использует сигнал совпадения для генерации выхода в соответствии с установленным рабочим режимом. Эта настройка определяется битами PWM4x, WGM40 и Compare Output COM4x1:0 (COM4A1:0, COM4B1:0, COM4D1:0). Сигналы top и bottom используются Waveform Generator для обработки специальных случаев предельных значений в некоторых рабочих режимах (см. "Режимы работы"). На рис. 15-4 показана блок-схема Output Compare unit.

ATmega TC4 Output Compare Unit Block Diagram fig15 04

Рис. 15-4. Блок сравнения, Output Compare Unit.

Регистры OCR4x имеют двойную буферизацию, когда используются в режимах ШИМ (Pulse Width Modulation, PWM). Для обычного режима работы (normal mode) двойная буферизация запрещена. Двойная буферизация синхронизирует обновление регистров сравнения OCR4x для значений top или bottom последовательности счета. Эта синхронизация предотвращает появление кривых, не симметричных импульсов ШИМ, делая выходной сигнал свободным от выбросов и глюков. Это поясняется рисунком 15-5. В интервале между записью и обновлением чтение из OCR4A, OCR4B, OCR4C или OCR4D вернет содержимое временной ячейки. Это означает, что только что записанное значение всегда будет прочитано из OCR4A, OCR4B, OCR4C или OCR4D.

ATmega TC4 Effects Unsynchronized OCR Latching fig15 05

Рис. 15-5. Эффекты от несинхронного захвата OCR.

Force Output Compare. В режимах генерации, не относящихся к PWM, можно заставить компаратор принудительно сгенерировать событие сравнения путем записи в лог. 1 бита Force Output Compare (FOC4x). Forcing Compare Match не установит флаг OCF4x и не будет выполнена перезагрузка/очистка таймера, но Waveform Output (OCW4x) будет обновлен, как если бы произошло реальное событие совпадения Compare Match. Настройка бит COM4x1:0 определяет, как будет меняться Waveform Output (OCW4x) - устанавливаться, очищаться или переключаться в противоположное значение.

Блокирование Compare Match записью TCNT4. Все операции записи в регистр TCNT4 со стороны ядра CPU заблокирует любое событие Compare Match, которое произойдет на следующем такте таймера, даже когда таймер остановлен. Эта функция позволяет инициализировать OCR4x в то же самое значение, что и TCNT4 без срабатывания прерывания, когда разрешено тактирование таймера/счетчика.

Использование блока Output Compare. Поскольку запись TCNT4 в любом режиме работы заблокирует все события Compare Match на один такт таймера, есть риск изменения TCNT4 во время использования блока Output Compare, независимо от того, работает таймер/счетчик, или нет. Если значение, записанное в TCNT4, равно значению OCR4x, то событие Compare Match будет пропущено, в результате получится не корректная генерация формы сигнала. Поэтому не записывайте в TCNT4 значение, равное BOTTOM, когда счетчик считает вниз.

Настройку формы генерируемого сигнала (Waveform Output, OCW4x) нужно выполнять перед установкой регистра направления работы вывода порта на выход (Data Direction Register, DDRx). Самый простой способ установить значение OCW4x - использовать биты строба Force Output Compare (FOC4x) в обычном режиме (Normal mode). OC4x сохранит свое значение даже при изменении режимов генерации.

Имейте в виду, что биты COM4x1:0 не имеют двойной буферизации вместе со значением сравнения. Изменение бит COM4x1:0 вступит в силу немедленно.

С таймером Timer/Counter4 предоставляется генератор мертвого времени (Dead Time Generator), позволяющий безопасно подавать сигнал PWM на пару выходных ключей силового моста. Dead Time Generator это отдельный блок, который можно использовать для вставки мертвых интервалов (интервалов без перекрытия, обеспечивающих отсутствие сквозных токов) на комплементарных парах выходов Timer/Counter4 (OC4x и ~OC4x), когда разрешен режим PWM, и биты COM4x1:0 установлены в значение 01. Общие операции: Waveform Generator генерирует сигнал на выходе (Waveform Output, OCW4x), и Dead Time Generator генерирует не перекрывающуюся пару сигналов PWM на Waveform Output. Предоставлено три Dead Time генератора, по одному на каждый выход PWM. Мертвое время настраивается независимо для обоих выходов PWM.

ATmega TC4 Output Compare Unit Block Diagram fig15 06

Рис. 15-6. Блок сравнения, Output Compare Unit.

Генерация мертвого времени основана на 4-разрядном считающем вниз счетчике, что показано на рис. 15-7. Имеется выделенный предделитель на входе Dead Time Generator, который может делить тактовую частоту Timer/Counter4 (PCK или CK) на 1, 2, 4 или 8. Это дает большой диапазон регулирования генерируемого мертвого времени. Прескалер управляется двумя битами DTPS41..40. Этот блок также имеет детектор фронта нарастания сигнала и перепада спада, что используется для запуска периода отсчета мертвого времени. В зависимости от перепада OC4x или ~OC4x задерживается, пока счетчик не досчитает до нуля. Компаратор сравнивает счетчик с нулем и останавливает вставку мертвого времени, когда счетчик мертвого времени досчитал до нуля. Этот счетчик загружается 4-битным значением DT4H или DT4L из регистра DT4, в зависимости от перепада на Waveform Output (OCW4x), когда вставляется интервал мертвого времени. Выход Output Compare задерживается на 1 такт таймера минимум от появления на Waveform Output, когда Dead Time настроено в 0. Выходы OC4x и ~OC4x инвертируются, если установлен бит PWM Inversion Mode (PWM4X). Это также приведет к тому, что на обоих выходах будет установлен лог. 1 в интервале мертвого времени.

ATmega TC4 Dead Time Generator fig15 07

Рис. 15-7. Dead Time Generator.

Длина периода счета настраивается пользователем путем выбора настройки dead time prescaler битами DTPS41:40 и выбором значения dead time в регистре DT4. Регистр DT4 состоит из двух 4-битных полей DT4H и DT4L, которые управляют периодами dead time выходов PWM по отдельности в единицах длительности тактов счетчика генератора dead time. Таким образом, фронт нарастания OC4x и ~OC4x может иметь разные периоды dead time: tnon-overlap/rising edge настраивается 4 битами DT4H, и tnon-overlap/falling настраивается 4 битами DT4L.

ATmega TC4 Complementary Output Pair COM4x10 01 fig15 08

Рис. 15-8. Комплементарная выходная пара, COM4x1:0 = 1.

[Compare Match Output Unit]

Биты Compare Output Mode (COM4x1:0) имеют две функции. Waveform Generator использует биты COM4x1:0 для определения инвертированного или не инвертированного вывода сигнала Waveform Output (OCW4x) на следующем событии Compare Match. Также биты COM4x1:0 управляют выводами ножек OC4x и ~OC4x. Рис. 15-9 показывает упрощенную схему логики, на которую влияет настройка бит COM4x1:0. Регистры I/O, биты I/O и выводы I/O на этом рисунке показаны жирным шрифтом. Показаны только те части регистров GPIO (DDR и PORT), на которые влияют биты COM4x1:0.

ATmega TC4 Compare Match Output Unit fig15 09

Рис. 15-9. Схема Compare Match Output Unit.

В обычном режиме (Normal Mode, не-PWM) Dead Time Generator запрещен, и работает наподобие синхронизатора:  Output Compare (OC4x) задерживается от Waveform Output (OCW4x) на один такт таймера. В то же время в режимах Fast PWM и Phase and Frequency Correct PWM, когда биты COM4x1:0 установлены в 01, генерируются не инвертированный и инвертированный вывод Output Compare, и в сигналы OC4x и ~OC4x вставляется мертвое время, которое программируется пользователем. Функциональность режимов PWM подобна Normal mode, когда выбрана любая другая настройка бит COM4x1:0. На состояние OC4x влияет преимущественно Dead Time Generator. Если происходит системный сброс, то OC4x сбрасывается в 0.

Функция ножки GPIO отменяется функцией Output Compare (OC4x / ~OC4x) от Dead Time Generator, если установлен любой из бит COM4x1:0. Однако направление работы вывода OC4x (вход или выход) все еще управляется регистром DDR вывода порта. Бит регистра DDR для выводов OC4x и ~OC4x (DDR_OC4x и ~DDR_OC4x) должны быть установлены для выхода перед тем, как значения OC4x и ~OC4x появятся на вводах чипа. Функция переназначения порта не зависит от режима Output Compare.

Дизайн логики конфигурации Output Compare позволяет делать инициализацию состояния OC4x перед разрешением выхода. Обратите внимание, что некоторые настройки бит COM4x1:0 зарезервированы для определенных режимов работы. Для конфигурации выводов Output Compare обращайтесь к таблицам 15-1, 15-2, 15-3 и 15-4.

Compare Output Mode и Waveform Generation. Waveform Generator использует биты COM4x1:0 по-разному в режиме Normal и режимах PWM. Для всех режимов установка COM4x1:0 = 0 говорит для Waveform Generator не предпринимать никаких действий с выходом OCW4x на следующем событии Compare Match. Для действий на выходе при сравнении для не-PWM режимов обратитесь к таблице 15-5. Для Fast PWM mode см. таблицу 15-6, и для Phase и Frequency Correct PWM см. таблицу 15-7. Изменение состояния бит COM4x1:0 будет иметь эффект на первом событии Compare Match после записи этих бит. Для режимов не-PWM, действие можно задать принудительно с помощью бит строба FOC4x.

Enhanced Compare/PWM. Когда установлен бит ENHC4 в регистре TCCR4E, разрешен расширенный режим сравнения/ШИМ (Enhanced Compare/PWM mode). Этот режим позволяет добавить один бит точности к регистрам Output Compare OCR4A, OCR4B и OCR4D. Так же,как это было описано выше, событие сравнения происходит, когда один из трех регистров Output Compare (OCR4A/B/D) совпадет с TCNT4 (10-битное разрешение). В базовом режиме PWM соответствующий разрешенный выход переключится на событии Compare Match. В режиме Enhanced Compare/PWM введен бит, который определяет, на каком внутреннем тактовом перепаде реально будет сигнализация о событии Compare Match. Это означает, что соответствующий выход переключится на стандартном тактовом перепаде (как в Normal mode), если LSB регистра OCR4A/B/D в значении 0, или на противоположном (следующем) перепаде, если этот LSB в значении 1.

Пользователь заметит, что у режимов Normal и Enhanced PWM одинаковая выходная частота, в то время как разрешающая способность PWM будет лучше в случае Enhanced PWM.

Запись в регистры Output Compare OCR4A/B/D или их чтение одинаково в обоих режимах. В Enhanced mode пользователь просто должен учитывать, что регистр TC4H может содержать до 3-бит (и иметь то же самое поведение при модификации, как и в 2-разрядном варианте работы). Это касается только регистров OCR4A, OCR4B и OCR4D. Конечно, в регистре OCR4C не должен быть дополнительный бит точности, и он остается в разрешающей способности, которая определяет период выходного сигнала.

ATmega TC4 Register Access in Enhanced Mode fig15 10

Рис. 15-10. Как работает доступ к регистрам в Enhanced Mode.

Рис. 15-10 показывает, что реальное значение OCR4A/B/D соответствует значению, загруженному пользователем, сдвинутому вправо, чтобы поместить младший значащий бит непосредственно в модуль генерации сигнала.

Максимально достижимое разрешение 11 бит, но можно указать любое другое разрешение. Например, 8-битное разрешение можно будет получить на той же частоте, что и в Normal PWM с 7-битным разрешением.

Пример:

- PLL Postcaler output = 64 МГц, прескалер для Timer/Counter4 не активен.
- Установка OCR4C = 0x7F определяет теоретическое полное 7-битное разрешение с выходной частотой 500 кГц.
- Установка OCR4A = 0x85 (= b10000101) означает, что реальное значение регистра "Compare A" 0x42 (b01000010), и установлен бит расширенного режима. Таким образом, получается скважность (51.95%), и можно с промежуточным значением между периодами получить скважность для значений сравнения 0x42 и 0x43 (51.56%, 52.34%).

[Синхронное обновление]

Чтобы избежать не синхронных и не когерентных значений в цикле, если необходимо синхронное обновления одного или нескольких значений одновременно, с помощью контроллера таймера все значения можно обновить в один момент времени по окончанию цикла PWM. Новый набор значений вычисляется программно, и их эффективное обновление может быть инициировано программой.

ATmega TC4 Lock Feature and Synchronous update fig15 11

Рис. 15-11. Функция блокировки (Lock Feature) и синхронное обновление.

В обычном режиме работы каждая запись в регистр сравнения вступает в действие по окончанию текущего цикла. Но некоторые случаи требуют синхронного обновления двух или большего количества регистров сравнения, и это не всегда возможно, особенно на высоких частотах PWM. В результате несколько периодов PWM могут получить неправильные значения.

При использовании функции блокировки (TLOCK4=1) значения, записываемые в регистры сравнения, не вступают в силу и временно записываются в буферы. Когда освобождается бит TLOCK4, инициируется обновление, и новый набор значений будет загружен во все измененные регистры по окончанию текущего такта PWM.

См. описание TCCR4E – Timer/Counter4 Control Register E.

[Режимы работы]

Режим работы, т. е. поведение таймера/счетчика и выводов Output Compare, определяется настройкой режима Waveform Generation (биты PWM4x и WGM40) и режима Compare Output (биты COM4x1:0). Биты режима Compare Output не влияют на последовательность счета, а биты режима Waveform Generation влияют. Биты COM4x1:0 управляют, должны ли выходы PWM генерировать сигнал с инверсией, без инверсии или комплементарно. Для не-PWM режимов биты COM4x1:0 управляют, должны ли выходы на событии Compare Match устанавливаться, сбрасываться или переключаться.

Normal Mode. Это самый простой режим работы, PWM4x = 0. Счетчик считает от BOTTOM (от 0) до TOP (определяется значением OCR4C), после чего запускается заново от BOTTOM. Регистр OCR4C определяет значение TOP для счетчика, и таким образом его разрешающую способность, и позволяет управлять частотой выхода Compare Match. В режиме переключения Compare Output сигнал Waveform Output (OCW4x) переключается при событии совпадения (Compare Match) значений TCNT4 и OCR4x. В не инвертирующем режиме сравнения выход Waveform Output очищается в момент Compare Match. И наоборот, в инвертирующем режиме выход Waveform устанавливается в момент Compare Match.

Диаграмма времени Normal mode показана на рис. 15-12. Значение счетчика (регистр TCNT4), как показано на гистограмме, инкрементируется до момента достижения счетчиком значения TOP, затем счетчик очищается на следующем такте. На диаграмме показано переключение Waveform Output (OCW4x) в режиме переключения при совпадении сравнения. Маленькая горизонтальная линия помечает моменты совпадения TCNT4 со значением OCR4x.

ATmega TC4 Normal Mode Timing fig15 12

Рис. 15-12. Диаграмма времени Normal Mode.

Флаг переполнения Timer/Counter Overflow (TOV4) установится в том же такте таймера, когда TCNT4 переходит в 0. В этом случае флаг TOV4 ведет себя как 11-й бит, за исключением того, что он только устанавливается, но не очищается. Однако в комбинации с прерыванием переполнения таймера, которое автоматически очищает флаг TOV4, разрешающая способность таймера может быть программно увеличена. В режиме Normal нет каких-то специальных случаев, новое значение счетчика может быть записано в любой момент времени.

Блок Output Compare может использоваться для генерации прерываний в некоторый момент времени. Использование Output Compare для генерации сигналов в режиме Normal не рекомендуется, поскольку это займет больше времени CPU, чем в других режимах. Для генерации сигнала выход OCW4x можно настроить на переключение своего логического уровня на каждом событии Compare Match, что делается установкой бит режима Compare Output в значение COM4x1:0 = 1. Значение OC4x не будет видно на ножке порта, пока он не настроен на работу как выход. Максимальная частота генерируемого сигнала fOC4x = fclkT4/4 получится, когда значение OCR4C установлено в 0. Частота сигнала определяется по формуле:

             fclkT4
fOC4x = -----------------
        2 · (1 + OCR4C)

Разрешающая способность показывает, сколько бит требуется, чтобы выразить значение в регистре OCR4C. Это вычисляется по формуле:

ResolutionPWM = log2(OCR4C + 1)

Конфигурации вывода Output Compare в режиме Normal Mode показаны в таблице ниже.

Таблица 15-1. Конфигурации выводов Output Compare в Normal Mode.

COM4x1 COM4x0 Выв. ~OC4x Выв. OC4x
0 0 Отключен Отключен
0 1 Отключен OC4x
1 0 Отключен OC4x
1 1 Отключен OC4x

Fast PWM Mode. Режим быстрого ШИМ, или Fast PWM mode (PWM4x = 1 и WGM40 = 0) обеспечивает генерацию высокочастотного ШИМ. Fast PWM отличается от другой опции PWM тем, что счетчик считает только в перед. Диаграмма изменения значения счетчика имеет форму пилы, получается так называемый односкатный ШИМ (Single Slope PWM). Счетчик считает от BOTTOM до TOP (TOP определяется регистром OCR4C), затем перезапускается от BOTTOM. В не инвертирующем режиме сравнения (noninverting Compare Output) выход сигнала Waveform Output (OCW4x) очищается на событии совпадения (Compare Match) значения TCNT4 и OCR4x, и устанавливается на BOTTOM. В инвертирующем режиме все наоборот, Waveform Output устанавливается на Compare Match, и очищается на BOTTOM. В комплементарном режиме сравнения (complementary Compare Output) выход Waveform очищается на Compare Match и устанавливается на BOTTOM.

Из-за односкатного принципа изменения счетчика Fast PWM может переключать выход в 2 раза быстрее, чем режим Phase and Frequency Correct PWM, который использует двухскатный принцип. Поэтому режим Fast PWM хорошо подходит для регулирования мощности, приложений выпрямителей, DAC. Высокая частота позволяет применить мелкие внешние пассивные компоненты (катушки, емкости), что уменьшает общую стоимость системы.

Диаграмма времени для режима Fast PWM показана на рис. 15-13. Счетчик инкрементируется до момента, когда его значения совпадет с TOP. После этого счетчик очищается на следующем такте таймера. Значение TCNT4 на диаграмме показано как гистограмма, иллюстрирующая односкатный принцип работы. На диаграмме также показан сигнал Waveform Output в режимах non-inverted и inverted Compare Output. Маленькая горизонтальная линия помечает моменты совпадения TCNT4 со значением OCR4x.

ATmega TC4 Fast PWM Mode Timing fig15 13

Рис. 15-13. Диаграмма времени Fast PWM Mode.

Флаг переполнения Timer/Counter Overflow (TOV4) установится в момент, когда счетчик достигнет значения TOP. Если разрешено прерывание, то оно может использоваться для обновления значения сравнения. В режиме Fast PWM блок сравнения позволяет осуществить генерацию импульсов PWM на выводах OC4x. Установка бит COM4x1:0 в значение 10 будет генерировать не инверсный PWM, и установка их в значение 11 будет генерировать инверсный PWM. Установка бит COM4x1:0 в 01 разрешит комплементарное переключение переключение выходов OC4x и ~OC4x. Реальное значение сигнала не будет видимо на ножках портов, пока они не будут настроены в режим выхода. PWM генерируется установкой (или очисткой) сигнала Waveform Output (OCW4x) в моменты Compare Match, когда совпадают значения OCR4x и TCNT4, и очисткой (или установкой) Waveform Output на такте таймера, когда счетчик очищается (переходит от значения TOP к BOTTOM).

Частота PWM на выходе может быть вычислена по формуле:

          fclkT4
fOC4xPWM = -------
            N

Переменная N представляет количество шагов в односкатном периоде счета. Значение N равно любому значению TOP.

Крайние значения для регистра OCR4C представляют специальные случаи генерации ШИМ в режиме Fast PWM. Если OCR4C установлено равным BOTTOM (т. е. в 0), на выходе получатся короткие иголки на каждом MAX+1 такте таймера. Установка OCR4C в значение MAX приведет к постоянному уровню лог. 1 или лог. 0 на выходе (в зависимости от полярности выхода, установленной битами COM4x1:0).

Частота (со скважностью 50%) выходного сигнала в режиме Fast PWM может быть достигнута путем установки Waveform Output (OCW4x) на переключение своего логического уровня на противоположный на каждом событии Compare Match (установка COM4x1:0 = 1). При этом максимальная частота получится fOC4 = fclkT4/4, когда значение OCR4C установлено в 3.

Функция портов GPIO отменяется значением Output Compare (OC4x / ~OC4x) из генератора мертвого времени (см. выше врезку "Dead Time Generator") если любой из бит COM4x1:0 установлен, и биты регистра DDR для выводов OC4X и ~OC4X настроены на вывод. Если биты COM4x1:0 сброшены, реальное значение на выводах будет соответствовать регистру PORT. Конфигурации выводов Output Compare описаны в таблице ниже.

Таблица 15-2. Конфигурации ножек Output Compare в режиме Fast PWM.

COM4x1 COM4x0 Выв. ~OC4x Выв. OC4x
0 0 Отключен Отключен
0 1 ~OC4x OC4x
1 0 Отключен OC4x
1 1 Отключен OC4x

Phase and Frequency Correct PWM Mode. Режим корректной частоты и фазы ШИМ (Phase and Frequency Correct PWM Mode, PWM4x = 1 и WGM40 = 1) предоставляет опцию точного управления сигналом ШИМ, основанную на двухскатном принципе. Счетчик считает вверх от BOTTOM до TOP (TOP традиционно определяется регистром OCR4C) и после этого считает вниз, обратно от TOP до BOTTOM. В режиме без инверсии (non-inverting Compare Output Mode) и комплементарном режиме (complimentary Compare Output Mode) выход сигнала Waveform Output (OCW4x) очищается в момент совпадения (Compare Match) значения TCNT4 и OCR4x при счете вверх, и устанавливается на Compare Match при счете вниз. В инверсном режиме все наоборот. Это так называемый двухскатный ШИМ (Dual Slope PWM). Двухскатный принцип формирования ШИМ имеет частоту в 2 раза ниже, чем у односкатного принципа. Однако из-за того, что получающийся сигнал особенно чистый и симметричный, принцип двухскатного формирования ШИМ находит применение в приложениях управления мотором.

Диаграмма времени режима Phase and Frequency Correct PWM показана на рис. 15-14 где значение TCNT4 обозначено как гистограмма, иллюстрирующая двухскатный принцип работы (со счетом вверх и вниз). Сначала счетчик считает до момента достижения TOP. Когда счетчик достиг TOP, он меняет направление счета и считает вниз. Значение TCNT4 будет равно TOP в течение одного такта таймера. На этой диаграмме также показан сигнал Waveform Output (OCW4x) в не инверсном и инверсном Compare Output Mode. Маленькие горизонтальные линии помечают моменты, когда TCNT4 совпадает с OCR4x.

ATmega TC4 Phase and Frequency Correct PWM Mode fig15 14

Рис. 15-14. Диаграмма времени Phase and Frequency Correct PWM Mode.

Флаг переполнения Timer/Counter Overflow (TOV4) установится каждый раз, когда счетчик достигнет значения BOTTOM. Флаг прерывания может использоваться для генерации каждый раз, когда счетчик достигает значения BOTTOM.

В режиме Phase and Frequency Correct PWM блок сравнения позволяет генерировать импульсы ШИМ на выходах OC4x установка бит COM4x1:0 в 01 будет генерировать не инверсный PWM (ШИМ), и установка в 11 будет генерировать инверсный ШИМ. Установка бит COM4A1:0 в значение 01 разрешит режим комплементарного выхода (complementary Compare Output), когда будут генерироваться не инверсный OC4x и инверсный ~OC4x сигналы. Реальные значения появятся на выводах ножек порта, когда они будут настроены как выход (регистром DDR). Импульсы PWM генерируются очисткой (или установкой) сигнала Waveform Output (OCW4x) в моменты совпадения (Compare Match) значений OCR4x и TCNT4, когда счетчик считает вверх, и установкой (или очисткой) Waveform Output в моменты Compare Match, когда счетчик считает вниз. Частота ШИМ на выходе в режиме Phase and Frequency Correct PWM может быть вычислена по формуле:

           fclkT4
fOC4xPCPWM = -------
             N

Переменная N представляет количество шагов в половине двойного цикла. Значение N равно TOP. Крайние значения регистра OCR4C представляют специальные случаи генерации ШИМ в режиме Phase and Frequency Correct PWM. Если OCR4C установлен равным BOTTOM (т. е. в 0), на выходе будет постоянный лог. 0, и если OCR4C установлен в MAX, на выходе будет постоянный уровень лог. 1, когда активен не инверсный режим PWM. Для инверсного PWM выход поменяет свое состояние на противоположное.

Функция GPIO переназначает уровни Output Compare (OC4x / ~OC4x) сигналом генератора мертвого времени (см. выше врезку "Dead Time Generator"), если установлен любой из бит COM4x1:0, и биты регистра DDR для ножек OC4X и ~OC4X настроены для работы этих выводов на выход. Если биты COM4x1:0 сброшены, реальное значение на выводах ножек порта будет соответствовать значениям регистра PORT. Конфигурации выводов Output Compare описаны в таблице ниже.

Таблица 15-3. Конфигурации ножек Output Compare в режиме Phase and Frequency Correct PWM.

COM4x1 COM4x0 Выв. ~OC4x Выв. OC4x
0 0 Отключен Отключен
0 1 ~OC4x OC4x
1 0 Отключен OC4x
1 1 Отключен OC4x

Режим PWM6. Этот режим ШИМ (PWM4A = 1, WGM41 = 1 и WGM40 = x) предоставляет опцию для управления с помощью ШИМ бесколлекторными двигателями постоянного тока (Brushless DC, BLDC). В режиме PWM6 регистр OCR4A управляет всеми шестью сигналами Output Compare, так что один и тот же Waveform Output (OCW4A) от Waveform Generator используется для получения всех импульсов сигнала ШИМ. Режим PWM6 также предоставляет регистр Output Compare Override Enable (OC4OE), который можно использовать для немедленного запрета или разрешения ножек Output Compare. Если бит Output Compare Override Enable очищен, то реальное значение на выводах ножек будет соответствовать регистру PORT.

Режим PWM6 предоставляет два режима работы, односкатный и и двухскатный. Если выбран односкатный режим (бит WGM40 сброшен в 0), счетчик считает от BOTTOM до TOP (TOP определяется регистром OCR4C), после чего перезапускается от значения BOTTOM, как это работает в режиме Fast PWM. Импульсы ШИМ генерируются установкой (или очисткой) Waveform Output (OCW4A) в моменты Compare Match, когда совпадают значения OCR4A и TCNT4, и очисткой (или установкой) Waveform Output на цикле таймера, когда счетчик очищен (поменял свое значение от TOP на BOTTOM). Флаг переполнения Timer/Counter Overflow (TOV4) установится каждый раз, когда счетчик достигает значения TOP и, если разрешено прерывание, оно может использоваться для обновления значения сравнения OCR4A.

Если выбран двухскатный режим работы (бит WGM40 установлен в 1), то счетчик считает от BOTTOM до TOP (TOP определяется регистром OCR4C), затем считает от TOP до BOTTOM точно так же, как в режиме Phase and Frequency Correct PWM. Импульсы ШИМ генерируются установкой (или очисткой) Waveform Output (OCW4A) в моменты Compare Match (когда совпадают значения OCR4A и TCNT4) при счете вверх, и очисткой (или установкой) Waveform Output на Compare Match при счете вниз. Флаг переполнения Timer/Counter Overflow (TOV4) установится каждый раз, когда счетчик достигает значения BOTTOM и, если разрешено прерывание, оно может использоваться для обновления значения сравнения OCR4A.

Диаграмма времени для односкатного режима PWM6 (WGM41 = 0), когда биты COM4A1:0 установлены в 10, показана на рис. 15-15. Счетчик инкрементируется до момента, когда достигнет значения TOP. После этого счетчик очищается на следующем такте таймера. Значение TCNT4 на диаграмме показано как гистограмма, иллюстрирующая односкатный принцип работы. На диаграмме также показаны выводы OC4A и ~OC4A, и соответствующие биты Output Compare Override Enable (OC4OE1..OC4OE0).

ATmega TC4 PWM6 Mode Single slope Operation fig15 15

Рис. 15-15. Диаграмма времени односкатного режима PWM6.

Функция GPIO переназначает уровни Output Compare (OC4x / ~OC4x) сигналом генератора мертвого времени (см. выше врезку "Dead Time Generator"), если установлен любой из бит COM4x1:0, и биты регистра DDR для ножек OC4X и ~OC4X настроены для работы этих выводов на выход. Выводы Output Compare могут быть также переназначены битами Output Compare Override Enable OC4OE5..OC4OE0. Если бит Override Enable очищен, то на выводе появится реальное логическое значения соответствующего бита PORT, и если бит Override Enable установлен, то это разрешает подключение сигнала Output Compare к выводу ножки порта. Конфигурации выводов Output Compare описаны в таблице ниже.

Таблица 15-3. Конфигурации ножек Output Compare в режиме PWM6.

COM4A1 COM4A0 ~OC4A (PC6) OC4A (PC7)
0 0 Отключен Отключен
0 1 ~OC4A · OC4OE0 OC4A · OC4OE1
1 0 OC4A · OC4OE0 OC4A · OC4OE1
1 1 OC4A · OC4OE0 OC4A · OC4OE1
COM4B1 COM4B0 ~OC4B (PB5) OC4B (PB6)
0 0 Отключен Отключен
0 1 ~OC4A · OC4OE2 OC4A · OC4OE3
1 0 OC4A · OC4OE2 OC4A · OC4OE3
1 1 OC4A · OC4OE2 OC4A · OC4OE3
COM4D1 COM4D0 ~OC4D (PD6) OC4A (PD7)
0 0 Отключен Отключен
0 1 ~OC4A · OC4OE4 OC4A · OC4OE5
1 0 OC4A · OC4OE4 OC4A · OC4OE5
1 1 OC4A · OC4OE4 OC4A · OC4OE5

[Диаграммы счета Timer/Counter4]

Таймер/счетчик разработан по синхронному принципу, и на рисунках ниже такты таймера (clkT4) показаны как сигнал разрешения тактирования. Эти рисунки содержат информацию, когда устанавливаются флаги прерываний.

Рис. 15-16 содержит диаграмму времени для базового функционирования таймера/счетчика. Показана последовательность счета близко к значению MAX во всех режимах, кроме Phase and Frequency Correct PWM.

ATmega TC4 no Prescaling fig15 16

Рис. 15-16. Диаграмма работы таймера/счетчика без прескалера.

Рис. 15-17 показывает такую же диаграмму, но с разрешенным прескалером во всех режимах, кроме Phase and Frequency Correct PWM Mode.

ATmega TC4 with Prescaler8 fig15 17

Рис. 15-17. Диаграмма работы таймера/счетчика с прескалером (прескалер делит частоту fclkT4/8).

Рис. 15-18 показывает установку OCF4A, OCF4B и OCF4D во всех режимах, и рис. 15-19 показывает установку TOV4 в режиме in Phase and Frequency Correct PWM.

ATmega TC4 OCF4x with Prescaler8 fig15 18

Рис. 15-18. Диаграмма работы таймера/счетчика, показывающая установку OCF1x, с предделителем (fclkT4/8)

ATmega TC4 with Prescaler8 fig15 19

Рис. 15-19. Диаграмма работы таймера/счетчика с предделителем (fclkT4/8).

[Блок Fault Protection]

В Timer/Counter4 реализована защита от сбоев (блок Fault Protection), который может запретить выходы PWM по внешнему событию. Внешний сигнал показывает событие, которое может поступать на вход внешнего прерывания (external interrupt INT0) или альтернативно от блока аналогового компаратора. Блок защиты показан на рис. 15-20. Элементы этой диаграммы, которые косвенно относятся к блоку Fault Protection, закрашены серым.

ATmega TC4 Fault Protection Unit fig15 20

Рис. 15-20. Блок-схема системы Fault Protection.

Когда разрешен режим Fault Protection битом Fault Protection Enable (FPEN4), и произошло изменение логического уровня (событие) на ножке external interrupt pin (INT0) или альтернативно на выходе компаратора (Analog Comparator output, ACO), и это изменение подтверждено детектором перепада, то сработает режим защиты от сбоев. Когда защита сработала, биты COM4x очищаются выходные компараторы отключаются от выходов PWM, и уровни регистра PORTB переходят на выходы ножек PWM. Бит Fault Protection Enable (FPEN4) автоматически очищается на том же системном такте, когда очищаются биты COM4nx. Если установлен бит Fault Protection Interrupt Enable (FPIE4), то сгенерируется соответствующее прерывание, и бит FPEN4 очистится. Альтернативно бит FPEN4 может опрашиваться программно, чтобы определить, что таймер/счетчик вошел в режим защиты Fault Protection.

Источник сигнала для срабатывания Fault Protection. Основной источник это вывод внешнего прерывания (external interrupt pin, INT0). Альтернативно в качестве сигнала срабатывания защиты может использоваться выход Analog Comparator. В качестве сигнала выбирается Analog Comparator путем установки бита Fault Protection Analog Comparator (FPAC4) в регистре Timer/Counter4 Control D (TCCR4D). Имейте в виду, что изменение источника сигнала защиты может вызвать её срабатывание. Таким образом, рекомендуется очистить флаг FPF4 после изменения источника сигнала для защиты, установки детектора перепада или разрешения Fault Protection.

Оба сигнала, external interrupt pin (INT0) и выход Analog Comparator (ACO) анализируются по такому же принципу, как и вывод T0, см. рис. 12-1. Используется идентичный детектор перепада. Однако, когда разрешен подавитель шума (noise canceler), перед детектором перепада вставляется дополнительная логика, которая увеличивает задержку на 4 системных такта. Срабатывание защиты можно вызвать искусственно путем управления ножкой порта INT0.

ATmega TC4 Tn T0 Sampling fig12 01

Рис. 12-1. Оцифровка уровня на выводе Tn/T0.

Noise Canceler. Эта техника позволяет улучшить помехозащищенность защиты с помощью схемы цифровой фильтрации. Вход подавителя шума (noise canceler) мониторится в течение 4 выборок, и чтобы сигнал на выходе подавителя поменялся, все 4 выборки должны быть одинаковые.

Подавитель шума разрешается установкой бита Fault Protection Noise Canceler (FPNC4) в регистре Timer/Counter4 Control Register D (TCCR4D). При разрешенном подавителе шума вводится дополнительная задержка срабатывания на 4 системных такта. Подавитель шума использует системную тактовую частоту, поэтому настройка прескалера на него не влияет.

[Как организован доступ к 10-битным регистрам]

Если в регистры TCNT4 и OCR4A/B/C/D записываются 10-битные значения, то к этим 10-битным регистрам можно получить доступ через передачу данных по байтам через 8-битную шину данных AVR CPU за две операции. У всех 10-битных регистров есть общий 2-битный регистр старшего байта (Timer/Counter4 High Byte, TC4H), который используется как временный буфер, хранящий два старших бита для 10-битного доступа. Один и тот же регистр TC4H используется для всех 10-битных регистров. Доступ к младшему байту регистра вызывает срабатывание копирования данных для завершения 10-битной операции чтения или записи. Когда младший байт 10-битного регистра записывается ядром CPU, то сразу (на одном такте ядра) в 10 битный регистр копируется содержимое бит TC4H и младшего байта. Аналогично, когда CPU читает младший байт 10-битного регистра, то одновременно в TC4H попадают старшие биты этого регистра.

Чтобы выполнить 10-битную запись, старший байт должен быть предварительно записан в регистр TC4H. Для 10-битного чтения младший байт должен быть прочитан перед чтением старшего байта в регистре TC4H.

Ниже показаны примеры кода доступа к 10-битным регистрам таймера. Подразумевается, что прерывания не обновляют регистр TC4H. Тот же самый принцип может использоваться для доступа к регистрам OCRnA/B/C/D.

; Пример кода на ассемблере
   ...
; Установка TCNT4 в 0x01FF:
   ldi r17,0x01
   ldi r16,0xFF
   out TC4H,r17
   out TCNT4,r16
; Чтение TCNT4 в r17:r16:
   in r16,TCNT4
   in r17,TC4H
   ...
// Пример кода на C
unsigned int i;
...
/* Установка TCNT4 в 0x01FF */
TC4H = 0x01;
TCNT4 = 0xFF;
/* Чтение TCNT4 в i */
i = TCNT4;
i |= ((unsigned int)TC4H << 8);
...

Примечание: пример кода подразумевает, что подключен соответствующий заголовочный файл, описывающий регистры и биты используемого микроконтроллера. Для регистров I/O, находящихся в расширенной карте адресов ввода/вывода (extended I/O map), инструкции ассемблера IN, OUT, SBIS, SBIC, CBI и SBI должны быть заменены на инструкции доступа к extended I/O. Обычно LDS и STS комбинируются с SBRS, SBRC, SBR и CBR.

Пример кода на ассемблере возвратит значение TCNT4 в регистровой паре r17:r16.

Важно отметить, что доступ к 10-битным регистрам не является атомарной операцией. Если произойдет прерывание в момент, когда две инструкции пытаются получить доступ к 10-битному регистру (тому же самому или другому), то код прерывания обновит регистр TC4H, в результате доступ в коде вне прерывания будет поврежден. Таким образом, когда оба кода, и основной программы, и прерывания, обновляют регистр TC4H, основной код должен запретить прерывания во время 16-битного доступа.

Следующий код дает пример реализации атомарного доступа к содержимому регистра TCNT4. Чтение любого из регистров OCR4A/B/C/D осуществляется по такому же принципу.

; Пример кода на ассемблере
TIM1_ReadTCNT4:
; Сохранение глобального флага прерываний:
   in r18,SREG
; Запрет прерываний:
   cli
; Чтение TCNT4 в r17:r16
   in r16,TCNT4
   in r17,TC4H
; Восстановление флага глобальных прерываний:
   out SREG,r18
   ret
// Пример кода на C
unsigned int TIM1_ReadTCNT4 (void)
{
   unsigned char sreg;
   unsigned int i;
   // Сохранение флага глобальных прерываний:
   sreg = SREG;
   // Запрет прерываний:
   _CLI();
   // Чтение TCNT4 в i:
   i = TCNT4;
   i |= ((unsigned int)TC4H << 8);
   // Восстановление флага глобальных прерываний:
   SREG = sreg;
   return i;
}

Пример кода на ассемблере возвратит значение TCNT4 в регистровой паре r17:r16.

Следующий пример кода показывает атомарную 10-битную запись в регистр TCNT4. Запись в любой из регистров OCR4A/B/C/D осуществляется по такому же принципу.

; Пример кода на ассемблере
TIM1_WriteTCNT4:
; Сохранение глобального флага прерываний:
   in r18,SREG
; Запрет прерываний:
   cli
; Установка TCNT4 в r17:r16
   out TC4H,r17
   out TCNT4,r16
; Восстановление флага глобальных прерываний:
   out SREG,r18
   ret
// Пример кода на C:
void TIM1_WriteTCNT4 (unsigned int i)
{
   unsigned char sreg;
   unsigned int i;
   // Сохранение флага глобальных прерываний:
   sreg = SREG;
   // Запрет прерываний:
   _CLI();
   // Установка TCNT4 в i:
   TC4H = (i >> 8);
   TCNT4 = (unsigned char)i;
   // Восстановление флага глобальных прерываний:
   SREG = sreg;
}

Код ассемблера требует, чтобы регистровая пара r17:r16 содержала значение для записи в TCNT4.

Повторное использование регистра TC4H. Если осуществляется запись в несколько 10-битных регистров, когда старший байт одинаковый, то регистр TC4H нужно записать только один раз. Однако для обеспечения атомарности следует рассмотреть возможность отключения прерываний, если они модифицируют регистр TC4H.

[Описание регистров Timer/Counter4]

№ разрядов 7 6 5 4 3 2 1 0
Имена бит COM4A1
COM4A0 COM4B1 COM4B0 FOC4A FOC4B PWM4A PWM4B
Чтение/запись rw rw rw rw w w rw rw
Нач. значение 0 0 0 0 0 0 0 0

• 7, 6 – COM4A1, COM4A0: Comparator A Output Mode

Эти биты управляют поведением выхода генератора сигналов Waveform Output (OCW4A) and the connection of the Output Compare pin (OC4A). Если установлены оба бита COM4A1:0, то выход OC4A отменяет обычный функционал порта GPIO, к которому OC4A подключен. Комплементарный выход ~OC4A подключается только в режимах PWM, когда биты COM4A1:0 установлены в 01. Обратите внимание, что биты регистра направления (DDR), соответствующие сигналам OC4A и ~OC4A, должны быть установлены, чтобы заработал выходной драйвер этих сигналов.

Функция бит COM4A1:0 зависит от настроек бит PWM4A, WGM40 и WGM41. Таблица 15-5 показывает функциональность бит COM4A1:0, когда установлен бит PWM4A, в обычном режиме (Normal Mode, не PWM).

Таблица 15-5. Compare Output Mode, Normal Mode (не PWM).

COM4A1 COM4A0 Поведение OCW4A Выв. OC4A Выв. ~OC4A
0 0 Обычная работа порта Отключен Отключен
0 1 Переключение при Compare Match Подключен Отключен
1 0 Очистка при Compare Match Подключен Отключен
1 1 Установка при Compare Match Подключен Отключен

Таблица 15-6 показывает функциональность бит COM4A1:0, когда биты PWM4A, WGM40 и WGM41 установлены в режим быстрого ШИМ.

Таблица 15-6. Compare Output Mode, Fast PWM Mode.

COM4A1 COM4A0 Поведение OCW4A Выв. OC4A Выв. ~OC4A
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match, установка при TCNT4=0x000 Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match, очистка при TCNT4=0x000 Подключен Отключен

Таблица 15-7 показывает функциональность бит COM4A1:0, когда биты PWM4A, WGM40 и WGM41 установлены в режим Phase and Frequency Correct PWM.

Таблица 15-7. Compare Output Mode, Phase and Frequency Correct PWM Mode.

COM4A1 COM4A0 Поведение OCW4A Выв. OC4A Выв. ~OC4A
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match и счете вверх, установка при Compare Match и счете вниз Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match и счете вверх, очистка при Compare Match и счете вниз Подключен Отключен

Таблица 15-8 показывает функциональность бит COM4A1:0, когда биты PWM4A, WGM40 и WGM41 установлены в односкатный режим PWM6. В режиме PWM6 используется один и тот же сигнал Waveform Output (OCW4A) для генерации всех сигналов, и значения Output Compare OC4A и ~OC4A подключены к выводам OC4A, ~OC4A, OC4B, ~OC4B, OC4D и ~OC4D.

Таблица 15-8. Compare Output Mode, Single-Slope PWM6 Mode.

COM4A1 COM4A0 Поведение OCW4A Выв. OC4A Выв. ~OC4A
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match, установка при TCNT4=0x000 OC4A ~OC4A
1 0 OC4A OC4A
1 1 Установка при Compare Match, очистка при TCNT4=0x000 OC4A OC4A

Таблица 15-9 показывает функциональность бит COM4A1:0, когда биты PWM4A, WGM40 и WGM41 установлены в двухскатный режим PWM6.

Таблица 15-9. Compare Output Mode, Dual-Slope PWM6 Mode.

COM4A1 COM4A0 Поведение OCW4A Выв. OC4A Выв. ~OC4A
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match и счете вверх, установка при Compare Match и счете вниз OC4A ~OC4A
1 0 OC4A OC4A
1 1 Установка при Compare Match и счете вверх, очистка при Compare Match и счете вниз OC4A OC4A

• Биты 5,4 - COM4B1, COM4B0: Comparator B Output Mode

Эти биты управляют поведением выхода генератора сигнала Waveform Output (OCW4B), и подключается в ножке Output Compare (OC4B). Если один или оба бита COM4B1:0 установлены, то выход OC4B отменяет нормальный функционал порта GPIO вывода микроконтроллера, к которому подключен OC4B. Комплементарный выход ~OC4B подключен только в режимах PWM, когда биты COM4B1:0 установлены в 01. Обратите внимание, что биты регистра направления (DDR), соответствующие сигналу OC4B, должны быть установлены, чтобы разрешить работу выходного драйвера.

Функция бит COM4B1:0 зависит от настроек бит PWM4B и WGM40.

Таблица 15-10 показывает функциональность бит COM4B1:0, когда бит PWM4B установлен в режим Normal (не PWM).

Таблица 15-10. Compare Output Mode, Normal Mode (не PWM).

COM4B1 COM4B0 Поведение OCW4B Выв. OC4B Выв. ~OC4B
0 0 Обычная работа порта Отключен Отключен
0 1 Переключение при Compare Match Подключен Отключен
1 0 Очистка при Compare Match Подключен Отключен
1 1 Установка при Compare Match Подключен Отключен

Таблица 15-11. Показывает функциональность бит COM4B1:0, когда биты PWM4B и WGM40 установлены в режим Fast PWM.

Таблица 15-11. Compare Output Mode, Fast PWM Mode.

COM4B1 COM4B0 Поведение OCW4B Выв. OC4B Выв. ~OC4B
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match, установка при TCNT4=0x000 Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match, очистка при TCNT4=0x000 Подключен Отключен

Таблица 15-12 показывает функциональность бит COM4B1:0, когда биты PWM4B и WGM40 установлены в режим Phase and Frequency Correct PWM.

Таблица 15-12. Compare Output Mode, Phase and Frequency Correct PWM Mode.

COM4B1 COM4B0 Поведение OCW4B Выв. OC4B Выв. ~OC4B
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match и счете вверх, установка при Compare Match и счете вниз Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match и счете вверх, очистка при Compare Match и счете вниз Подключен Отключен

• Бит 3 - FOC4A: Force Output Compare Match 4A

Бит FOC4A активен только когда бит PWM4A задает режим не PWM.

При записи лог. 1 в этот бит принудительно меняется сигнал Waveform Output (OCW4A) и вывод Output Compare (OC4A) в соответствии со значениями, уже установленными в COM4A1 и COM4A0. Если COM4A1 и COM4A0 записаны в том же цикле, что и FOC4A, то будут использоваться новые установки. Бит Force Output Compare может использоваться для изменения значения выходного вывода, не обращая внимание на значение таймера. Произойдет автоматическое действие, запрограммированное COM4A1 и COM4A0, как если бы произошло событие совпадения, но при этом не будет сгенерировано прерывание.

Бит FOC4A всегда читается как 0.

• Бит 2 - FOC4B: Force Output Compare Match 4B

Бит FOC4B активен только когда бит PWM4B задает режим не PWM.

При записи лог. 1 в этот бит принудительно меняется сигнал Waveform Output (OCW4B) и вывод Output Compare (OC4B) в соответствии со значениями, уже установленными в COM4B1 и COM4B0. Если COM4B1 и COM4B0 записаны в том же цикле, что и FOC4B, то будут использоваться новые установки. Бит Force Output Compare может использоваться для изменения значения выходного вывода, не обращая внимание на значение таймера. Произойдет автоматическое действие, запрограммированное COM4B1 и COM4B0, как если бы произошло событие совпадения, но при этом не будет сгенерировано прерывание.

Бит FOC4B всегда читается как 0.

• Бит 1 - PWM4A: Pulse Width Modulator A Enable

Когда этот бит установлен в лог. 1, то разрешается режим PWM, основанный на компараторе OCR4A.

• Бит 0 - PWM4B: Pulse Width Modulator B Enable

Когда этот бит установлен в лог. 1, то разрешается режим PWM, основанный на компараторе OCR4B.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит PWM4X  PSR4  DTPS41 DTPS40  CS43   CS42   CS41   CS40 
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Бит 7 - PWM4X: PWM Inversion Mode

Когда этот бит установлен в лог. 1, выбирается режим инверсии ШИМ (PWM Inversion Mode), и инвертируются выходы Dead Time Generator, OC4x и ~OC4x.

• Бит 6 - PSR4: Prescaler Reset Timer/Counter4

Когда этот бит установлен в лог. 1, прескалер Timer/Counter4 будет сброшен (без влияния на TCNT4). Этот бит очистится аппаратно после завершения выполнения этой операции сброса прескалера. Запись в лог. 0 этого бита не оказывает никакого эффекта. Этот бит всегда читается как 0.

• Биты 5,4 - DTPS41, DTPS40: Dead Time Prescaler

Отдельный прескалер Dead Time, установленный перед Dead Time Generator, может делить частоту тактов Timer/Counter4 (PCK или CK) на коэффициенты 1, 2, 4 или 8, предоставляя тем самым большой диапазон регулировки интервалов мертвого времени. Прескалер Dead Time управляется двумя битами DTPS41 и DTPS40 регистра Dead Time Prescaler. Эти биты определяют коэффициент деления прескалера Dead Time (см. таблицу 15-13).

Таблица 15-13. Коэффициенты деления прескалера мертвого времени.

DTPS41 DTPS40 Коэффициент, на который прескалер делит частоту тактов Timer/Counter4
0 0 1 (нет деления частоты)
0 1 2
1 0 4
1 1 8

• Биты 3..0 - CS43, CS42, CS41, CS40: Clock Select

Эти биты определяют источник тактирования и коэффициент предделителя Timer/Counter4 (см. таблицу 15-14).

Таблица 15-14. Timer/Counter4 Prescaler Select.

CS43 CS42 CS41 CS40 Asynchronous Clocking Mode Synchronous Clocking Mode
0 0 0 0 Timer/Counter4 остановлен 
0 0 0 1 PCK CK
0 0 1 0 PCK/2 CK/2
0 0 1 1 PCK/4 CK/4
0 1 0 0 PCK/8 CK/8
0 1 0 1 PCK/16 CK/16
0 1 1 0 PCK/32 CK/32
0 1 1 1 PCK/64 CK/64
1 0 0 0 PCK/128 CK/128
1 0 0 1 PCK/256 CK/256
1 0 1 0 PCK/512 CK/512
1 0 1 1 PCK/1024 CK/1024
1 1 0 0 PCK/2048 CK/2048
1 1 0 1 PCK/4096 CK/4096
1 1 1 0 PCK/8192 CK/8192
1 1 1 1 PCK/16384 CK/16384

Настройка, указанная в первой строке таблицы 15-14, предоставляет возможность запрета таймера.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит COM4A1S COM4A0S COM4B1S COMAB0S COM4D1 COM4D0 FOC4D PWM4D
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Биты 7,6 - COM4A1S, COM4A0S: Comparator A Output Mode

Эти биты затеняют биты COM4A1 и COM4A0, как это указано в описании регистра TCCR4A – Timer/Counter4 Control Register A (см. врезку выше).

• Биты 5,4 - COM4B1S, COM4B0S: Comparator B Output Mode

Эти биты затеняют биты COM4B1 и COM4B0, как это указано в описании регистра TCCR4A – Timer/Counter4 Control Register A (см. врезку выше).

• Биты 3,2 - COM4D1, COM4D0: Comparator D Output Mode

Эти биты управляют поведением выхода генератора сигнала Waveform Output (OCW4D) и подключением к выводу Output Compare (OC4D). Если один или оба бита COM4D1:0 установлены, то выход OC4D отменяет функциональность ножек порта GPIO, к которым подключается сигнал OC4D. Комплементарный выход ~OC4D подключается только в режимах PWM, когда биты COM4D1:0 установлены в 01. Обратите внимание, что биты регистра направления (DDR), соответствующие ножкам OC4D, должны быть установлены, чтобы разрешить работу выходного драйвера.

Функция бит COM4D1:0 зависит от настроек бит PWM4D и WGM40.

Таблица 15-15 показывает функционал бит COM4D1:0, когда бит PWM4D установлен в режим Normal (не PWM).

Таблица 15-15. Compare Output Mode, Normal Mode (не PWM).

COM4D1 COM4D0 Поведение OCW4D Выв. OC4D Выв. ~OC4D
0 0 Обычная работа порта Отключен Отключен
0 1 Переключение при Compare Match Подключен Отключен
1 0 Очистка при Compare Match Подключен Отключен
1 1 Установка при Compare Match Подключен Отключен

Таблица 15-16 показывает функционал бит COM4D1:0, когда биты PWM4D и WGM40 установлены в режим быстрого ШИМ.

Таблица 15-16. Compare Output Mode, Fast PWM Mode.

COM4D1 COM4D0 Поведение OCW4D Выв. OC4D Выв. ~OC4D
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match, установка при TCNT4=0x000 Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match, очистка при TCNT4=0x000 Подключен Отключен

Таблица 15-17 показывает функциональность бит COM4D1:0, когда биты PWM4D и WGM40 установлены в режим Phase and Frequency Correct PWM.

Таблица 15-17. Compare Output Mode, Phase and Frequency Correct PWM Mode.

COM4D1 COM4D0 Поведение OCW4D Выв. OC4D Выв. ~OC4D
0 0 Обычная работа порта Отключен Отключен
0 1 Очистка при Compare Match и счете вверх, установка при Compare Match и счете вниз Подключен Подключен
1 0 Подключен Отключен
1 1 Установка при Compare Match и счете вверх, очистка при Compare Match и счете вниз Подключен Отключен

• Бит 1 - FOC4D: Force Output Compare Match 4D

Бит FOC4D активен только когда бит PWM4D задает режим не PWM.

При записи лог. 1 в этот бит принудительно меняется сигнал Waveform Output (OCW4D) и вывод Output Compare (OC4D) в соответствии со значениями, уже установленными в COM4D1 и COM4D0. Если COM4D1 и COM4D0 записаны в том же цикле, что и FOC4D, то будут использоваться новые установки. Бит Force Output Compare может использоваться для изменения значения выходного вывода, не обращая внимание на значение таймера. Произойдет автоматическое действие, запрограммированное COM4D1 и COM4D0, как если бы произошло событие совпадения, но при этом не будет сгенерировано прерывание.

Бит FOC4D всегда читается как 0.

• Бит 0 - PWM4D: Pulse Width Modulator D Enable

Когда этот бит установлен в лог. 1, то разрешается режим PWM, основанный на компараторе OCR4D.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит FPIE4 FPEN4 FPNC4 FPES4 FPAC4 FPF4 WGM41 WGM40
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Бит 7 - FPIE4: Fault Protection Interrupt Enable

Установка этого бита в лог. 1 разрешает прерывание Fault Protection.

• Бит 6– FPEN4: Fault Protection Mode Enable

Установка этого бита в лог. 1 активирует Fault Protection Mode.

• Бит 5 – FPNC4: Fault Protection Noise Canceler

Установка этого бита в лог. 1 активирует Fault Protection Noise Canceler (подавитель помех сигнала срабатывания защиты). Когда подавитель помех активирован, вход вывода Fault Protection (INT0) проходит через цифровой фильтр. Эта функция требует четырех одинаковых значений, появившихся на выводе INT0, чтобы был обнаружен сигнал. Таким образом, срабатывание защиты Fault Protection имеет задержку на 4 такта системного генератора, когда функция подавителя помех активирована.

• Бит 4 – FPES4: Fault Protection Edge Select

Этот бит выбирает, какой перепад на выводе Fault Protection (INT0) будет использоваться как событие сигнала для срабатывания защиты. Когда в бит FPES4 записан лог. 0, активным сигналом будет спад уровня, и когда в бит FPES4 записана лог. 1, активным сигналом будет нарастание уровня.

• Бит 3 - FPAC4: Fault Protection Analog Comparator Enable

Когда в этот бит записана лог. 1, то разрешена функция Fault Protection для Timer/Counter4, срабатывающая от выхода аналогового компаратора. В этом случае выход этого компаратора напрямую подключается ко входу логики Fault Protection, при этом сигнал от компаратора использует те же функции подавителя помех и выбора перепада, как это работало со входом INT0. Когда в этот бит записан лог. 0, то между функцией Fault Protection и аналоговым компаратором соединение отсутствует. Чтобы компаратор вызвал срабатывание прерывания Timer/Counter4 Fault Protection, должен быть установлен бит FPIE4 регистра управления Timer/Counter4 Control Register D (TCCR4D).

• Бит 2 - FPF4: Fault Protection Interrupt Flag

Когда бит FPIE4 установлен в лог. 1, разрешено прерывание Fault Protection. Активность на этом выводе в любом случае вызовет запрос на прерывание, даже если вывод Fault Protection сконфигурирован как выход. Прерывание, соответствующее запросу Fault Protection Interrupt, запустится по адресу Fault Protection Interrupt Vector. Бит FPF4 очищается аппаратно, когда выполняется соответствующий вектор прерывания. Альтернативно FPF4 очищается после такта синхронизации путем записи лог. 1 в этот флаг. Когда когда установлен  бит I регистра SREG, а также биты FPIE4 и FPF4, запустится обработчик прерывания Fault Protection.

• Биты 1:0 - WGM41, WGM40: Waveform Generation Mode

Эти биты связаны с битом PWM4x для совместного управления последовательностью счета таймера и типом формируемого сигнала (см. таблицу 15-18).

Режимы работы, поддерживаемые Timer/Counter4: Normal mode (обычный режим, счетчик), Fast PWM Mode (быстрый ШИМ), Phase and Frequency Correct PWM (ШИМ повышенного качества) и PWM6 (режим для управления трехфазными бесколлекторными двигателями BLDC).

Таблица 15-18. Описание бит настройки режима Waveform Generation.

PWM4x WGM41:40 Режим работы таймера/счетчика TOP Когда произойдет обновление OCR4x Когда установится флаг TOV4
0 00 Normal OCR4C Немедленно TOP
1 00 Fast PWM OCR4C TOP TOP
1 01 Phase and Frequency Correct PWM OCR4C BOTTOM BOTTOM
1 10 PWM6 / Single-slope OCR4C TOP TOP
1 11 PWM6 / Dual-slope OCR4C BOTTOM BOTTOM

№ разрядов 7 6 5 4 3 2 1 0
Имена бит TLOCK4 ENHC4 OC4OE5 OC4OE4 OC4OE3 OC4OE2 OC4OE1 OC4OE0
Чтение/запись r r rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Бит 7 - TLOCK4: Register Update Lock

Этот бит управляет процессом обновления регистров сравнения. Когда TLOCK4 установлен в лог. 1, запись в регистры Compare не повлияет на генерируемый выход, однако значения при этом будут записаны в буфер, и вступят в силу тогда, когда будет очищен бит TLOCK4.

См. раздел "Синхронное обновление" для получения дополнительной информации.

• Бит 6 - ENHC4: Enhanced Compare/PWM Mode

Когда этот бит установлен, модуль генерации сигнала Waveform Generator работает в расширенном режиме: регистры сравнения OCR4A/B/D могут принять дополнительный бит точности, когда LSB (младший бит) определяет, какой тактовый перепад события сравнения даст сигнализацию и выходной вывод будет обновлен.

• Биты 5:0 – OC4OE5:OC4OE0: Output Compare Override Enable

Эти биты выполняют функцию переназначения выходов генерации сигналов на событиях сравнения, что используется для подключения или отключения выводов Output Compare в режимах PWM6 с немедленной реакцией на соответствующих выходных выводах. Когда Output Compare отключен (бит Output Compare Override Enable очищен), то на выводе порта появится значение соответствующего бита регистра PORT is cleared. Таблица ниже показывает соответствие бит Output Compare Override Enable ножкам портов и сигналам Output Compare.

OC4OE0 OC4OE1 OC4OE2 OC4OE3 OC4OE4 OC4OE5
~OC4A (PC6) OC4A (PC7) ~OC4B (PB5) OC4B (PB6) ~OC4D (PD6) OC4D (PD7)

№ разрядов 7 6 5 4 3 2 1 0
Имена бит MSB                         LSB
Чтение/запись rw
Нач. значение 0 0 0 0 0 0 0 0

Этот 8-битный регистр содержит младшую часть значения счетчика Timer/Counter4.

Timer/Counter4 реализован как 10-битный счетчик, который доступен на чтение и запись. Из-за синхронизации с CPU данные, записанные в Timer/Counter4, задерживаются на 1.5 такта CPU в синхронном режиме и самое большее на 1 такт CPU в асинхронном режиме. Когда выбрана 10-битная точность, для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам"). Альтернативно Timer/Counter4 может использоваться как 8-битный таймер/счетчик. Имейте в виду, что Timer/Counter4 всегда начинает счет вверх после записи в регистр TCNT4.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит  -   -   -   -   -  TC410 TC49 TC48
Чтение/запись r r r r r r rw rw
Нач. значение 0 0 0 0 0 0 0 0

Регистр TC4H работает как общий буфер старших разрядов для операций с данными шириной больше 8 бит (10 или 11 бит).

• Биты 7:3 - Res: Reserved

Эти биты зарезервированы и всегда читаются как 0.

• Бит 2 - TC410: дополнительный бит MSB для 11-разрядного доступа в расширенном режиме ШИМ (Enhanced PWM mode).

• Биты 1:0 - TC49, TC48: два старших бита (MSB) для операций 10-битного доступа

Если используется 10-битная точность, то регистр старшего байта Timer/Counter4 High Byte (TC4H) используется как временный буфер для хранения старших (MSB) бит (TC49, TC48) для 10-битного доступа. Один и тот же регистр TC4H совместно используется всеми 10-битными регистрами Timer/Counter4. Имейте в виду, что для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам").

№ разрядов 7 6 5 4 3 2 1 0
Имена бит MSB                         LSB
Чтение/запись rw
Нач. значение 0 0 0 0 0 0 0 0

Младшие 8 бит регистра сравнения A для генерации сигнала.

Этот регистр содержит данные, которые постоянно сравниваются с содержимым счетчика Timer/Counter4. Действия при событиях совпадения (Compare Match) значения счетчика TCNT4 и значения этого регистра задаются в битах TCCR4A. Совпадение происходит только тогда, когда Timer/Counter4 досчитал до значения OCR4A. Программная запись, которая установит TCNT4 и OCR4A в одинаковые значения, не вызовет событие сравнения.

Произошедшее событие сравнения установит флаг OCF4A после задержки синхронизации, следующей за событием сравнения.

Имейте в виду, что для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам").

№ разрядов 7 6 5 4 3 2 1 0
Имена бит MSB                         LSB
Чтение/запись rw
Нач. значение 0 0 0 0 0 0 0 0

Младшие 8 бит регистра сравнения B для генерации сигнала.

Этот регистр содержит данные, которые постоянно сравниваются с содержимым счетчика Timer/Counter4. Действия при событиях совпадения (Compare Match) значения счетчика TCNT4 и значения этого регистра задаются в битах TCCR4A. Совпадение происходит только тогда, когда Timer/Counter4 досчитал до значения OCR4B. Программная запись, которая установит TCNT4 и OCR4B в одинаковые значения, не вызовет событие сравнения.

Произошедшее событие сравнения установит флаг OCF4B после задержки синхронизации, следующей за событием сравнения.

Имейте в виду, что для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам").

№ разрядов 7 6 5 4 3 2 1 0
Имена бит MSB                         LSB
Чтение/запись rw
Нач. значение 0 0 0 0 0 0 0 0

Младшие 8 бит регистра сравнения C для генерации сигнала.

Этот регистр содержит данные, которые постоянно сравниваются с содержимым счетчика Timer/Counter4. Этот регистр выполняет одинаковую функцию в режиме Normal и режимах PWM.

Обратите внимание, что значение меньше 3, записанное в Output Compare Register C, будет автоматически заменено на 3, так как это минимальное значение, которое разрешено записывать в этот регистр.

Имейте в виду, что для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам").

№ разрядов 7 6 5 4 3 2 1 0
Имена бит MSB                         LSB
Чтение/запись rw
Нач. значение 0 0 0 0 0 0 0 0

Младшие 8 бит регистра сравнения D для генерации сигнала.

Этот регистр содержит данные, которые постоянно сравниваются с содержимым счетчика Timer/Counter4. Действия при событиях совпадения (Compare Match) значения счетчика TCNT4 и значения этого регистра задаются в битах TCCR4A. Совпадение происходит только тогда, когда Timer/Counter4 досчитал до значения OCR4D. Программная запись, которая установит TCNT4 и OCR4D в одинаковые значения, не вызовет событие сравнения.

Произошедшее событие сравнения установит флаг OCF4D после задержки синхронизации, следующей за событием сравнения.

Имейте в виду, что для доступа к 10-битным данным счетчика через 8-битную шину данных AVR требуется соблюдать специальные процедуры (их описание см. в разделе "Как организован доступ к 10-битным регистрам").

№ разрядов 7 6 5 4 3 2 1 0
Имена бит OCIE4D OCIE4A OCIE4B  -   -  TOIE4  -   - 
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Бит 7- OCIE4D: Timer/Counter4 Output Compare Interrupt Enable

Когда бит OCIE4D установлен в лог. 1, и также установлен в лог. 1 бит I (бит глобального разрешения прерываний) в регистре Status Register (SREG), разрешено прерывание Timer/Counter4 Compare Match D. Будет запущен соответствующий обработчик прерывания по вектору $010, когда произошло событие совпадения Compare Match D. При этом установится в лог. 1 флаг сравнения в регистре флагов прерывания TIFR4.

• Бит 6 - OCIE4A: Timer/Counter4 Output Compare Interrupt Enable

Когда бит OCIE4A установлен в лог. 1, и также установлен в лог. 1 бит I (бит глобального разрешения прерываний) в регистре Status Register (SREG), разрешено прерывание Timer/Counter4 Compare Match A. Будет запущен соответствующий обработчик прерывания по вектору $003, когда произошло событие совпадения Compare Match A. При этом установится в лог. 1 флаг сравнения в регистре флагов прерывания TIFR4.

• Бит 5 - OCIE4B: Timer/Counter4 Output Compare Interrupt Enable

Когда бит OCIE4B установлен в лог. 1, и также установлен в лог. 1 бит I (бит глобального разрешения прерываний) в регистре Status Register (SREG), разрешено прерывание Timer/Counter4 Compare Match B. Будет запущен соответствующий обработчик прерывания по вектору $009, когда произошло событие совпадения Compare Match B. При этом установится в лог. 1 флаг сравнения в регистре флагов прерывания TIFR4.

• Бит 2 - TOIE4: Timer/Counter4 Overflow Interrupt Enable

Когда бит TOIE4 установлен в лог. 1, и также установлен в лог. 1 бит I (бит глобального разрешения прерываний) в регистре Status Register (SREG), разрешено прерывание переполнения  Timer/Counter4 Overflow. Будет запущен соответствующий обработчик прерывания по вектору $004, когда произошло переполнение счетчика. При этом установится в лог. 1 флаг переполнения в регистре флагов прерывания TIFR4.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит OCF4D OCF4A OCF4B  -   -  TOV4  -   - 
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

• Бит 7- OCF4D: Output Compare Flag 4D

Бит OCF4D устанавливается в лог. 1, когда происходит событие совпадения (Compare Match) между значением счетчика TCNT4 и значением регистра OCR4D. Флаг OCF4D очищается программно, когда выполняется соответствующий обработчик прерывания. Альтернативно OCF4D очищается, после такта синхронизации, путем записи в него лог. 1 (запись лог. 0 не оказывает никакого действия). Когда установлен I-бит в SREG (флаг глобального разрешения прерываний), а также биты OCIE4D и OCF4D, запускается обработчик прерывания Timer/Counter4 D Compare Match.

• Бит 6 - OCF4A: Output Compare Flag 4A

Бит OCF4A устанавливается в лог. 1, когда происходит событие совпадения (Compare Match) между значением счетчика TCNT4 и значением регистра OCR4A. Флаг OCF4A очищается программно, когда выполняется соответствующий обработчик прерывания. Альтернативно OCF4A очищается, после такта синхронизации, путем записи в него лог. 1 (запись лог. 0 не оказывает никакого действия). Когда установлен I-бит в SREG (флаг глобального разрешения прерываний), а также биты OCIE4A и OCF4A, запускается обработчик прерывания Timer/Counter4 A Compare Match.

• Бит 5 - OCF4B: Output Compare Flag 4B

Бит OCF4B устанавливается в лог. 1, когда происходит событие совпадения (Compare Match) между значением счетчика TCNT4 и значением регистра OCR4B. Флаг OCF4B очищается программно, когда выполняется соответствующий обработчик прерывания. Альтернативно OCF4B очищается, после такта синхронизации, путем записи в него лог. 1 (запись лог. 0 не оказывает никакого действия). Когда установлен I-бит в SREG (флаг глобального разрешения прерываний), а также биты OCIE4B и OCF4B, запускается обработчик прерывания Timer/Counter4 B Compare Match.

• Бит 2 - TOV4: Timer/Counter4 Overflow Flag

В режимах Normal Mode и Fast PWM бит TOV4 установится в лог. 1 каждый раз, когда счетчик таймера достигает значения TOP. Это происходит в том же такте таймера, когда счетчик сбрасывается в значение BOTTOM. В режиме Phase and Frequency Correct PWM бит TOV4 установится в лог. 1 каждый раз, когда счетчик достигает BOTTOM. Это происходит в том же цикле, когда счетчик становится нулем.

Бит TOV4 очищается аппаратно, когда выполняется соответствующий вектор обработки прерывания. Альтернативно TOV4 очищается, после такта синхронизации, путем записи лог. 1 в этот флаг (запись лог. 0 не оказыавет никакого влияния). Когда установлен I-бит в SREG (флаг глобального разрешения прерываний), а также биты TOIE4 и TOV4, запускается обработчик прерывания Timer/Counter4 Overflow.

№ разрядов 7 6 5 4 3 2 1 0
Имена бит DT4H3 DT4H2 DT4H1 DT4H0 DT4L3 DT4L2 DT4L1 DT4L0
Чтение/запись rw rw rw rw rw rw rw rw
Нач. значение 0 0 0 0 0 0 0 0

Это 8-битный регистр мертвого времени, доступный на чтение и запись.

Задержка мертвого времени на всех каналах ШИМ Timer/Counter4 настраивается половинками значения регистра DT4. Этот регистр состоит из 2 полей, DT4H3..0 и DT4L3..0, по одному на каждый комплементарный выход ШИМ. Таким образом, можно настроить разные задержки мертвого времени для фронта нарастания OC4x и фронта нарастания ~OC4x.

• Биты 7:4- DT4H3:DT4H0: Dead Time Value for OC4x Output

Значение мертвого времени для выхода OC4x. Интервал мертвого времени устанавливается в количестве тактов прескалера таймера/счетчика. Минимальная длительность для мертвого времени 0, и максимальное мертвое время равно периоду тактов прескалера, умноженному на 15.

• Биты 3:0- DT4L3:DT4L0: Dead Time Value for OC4x Output

Значение мертвого времени для выхода ~OC4x. Интервал мертвого времени устанавливается в количестве тактов прескалера таймера/счетчика. Минимальная длительность для мертвого времени 0, и максимальное мертвое время равно периоду тактов прескалера, умноженному на 15.

[Ссылки]

1. ATmega16U4/ATmega32U4 8-bit Microcontroller with 16/32K bytes of ISP Flash and USB Controller site:microchip.com.
2. Fast PWM на Arduino Leonardo.
3. Макетная плата AVR-USB32U4.

 

Добавить комментарий


Защитный код
Обновить

Top of Page