Разряды COM0x1:0 выполняют две функции. Генератор частот использует биты COM0x1:0 для того, чтобы определить, как изменится сигнал на выходе модуля совпадения (OC0x) в момент обнаружения факта совпадения. В то же время биты COM0x1:0 управляют источником сигнала на выходе OC0x.
На рис. 12 показана упрощённая схема, демонстрирующая логику работы разрядов COM0x1:0.
Рис. 12 - Схема вывода сигнала совпадения
Как видно из рисунка, значение COM0x1:0 влияет на состояние порта ввода вывода микросхемы, не зависимо от главных регистров управления этим портом (DDR и PORT). Причём когда мы говорим о статусе OC0x, нужно понимать, что внутренний регистр OC0x не то же самое, что контакт микросхемы OC0x. Сразу после системного сброса в регистр OC0x записывается ноль.
Если любой из битов COM0x1:0установлен, то основная функция порта ввода-вывода отменяется, и на выход проходит сигнал совпадения (OC0x) с генератора частот. При этом, направление передачи информации контакта OC0x (вход он или выход) всё ещё зависит от соответствующего бита регистра DDR.
Значение бита, определяющего направление передачи информации для вывода OC0x в случае, если он должен работать как выход, должно быть установлено до того, как значение регистра OC0x поступит на этот выход. Альтернативные функции порта не зависят от режима работы генератора сигналов.
Режимы работы
Режим работы, то есть поведение таймера/счётчика и выхода сигнала совпадения, определяется как режимом работы генератора сигналов (WGM02:0), так и режимом вывода сигнала совпадения (COM0x1:0). Состояние битов, определяющих режим вывода сигнала совпадения, не влияет на последовательность подсчёта, которая определяется только состоянием битов конфигурации генератора сигналов.
Биты COM0x1:0 определяют, должен ли выходной сигнал ШИМ быть инвертирован или нет (инвертированный или не инвертированный ШИМ). Для не-ШИМ-режимов содержимое битов COM0x1:0 определяет, должен ли сигнал на выходе быть установлен в единицу, сброшен в ноль либо переключён в противоположное состояние в момент совпадения.
Режим «Normal»
Режим «Normal» (WGM02:0 = 0) – это самый простой из режимов работы таймера. В этом режиме направление счёта всегда вперёд (содержимое увеличивается), и принудительный сброс счётчика не выполняется. Счётчик просто переполняется, когда достигает максимально для восьми разрядов значения (TOP = 0xFF), а затем перезапускается сначала (0x00).
При нормальной работе флаг переполнения таймера/счётчика (TOV0) будет установлен в тот момент, когда TCNT0 станет равно нулю. Флаг TOV0 в этом случае ведёт себя как девятый бит, а затем исключением, что он только устанавливается, но не сбрасывается.
Используя прерывание по переполнению таймера, которое автоматически очищает флаг TOV0, можно увеличить коэффициент пересчёта программы путём. Режим Normal не имеет никаких особенностей, на которых стоило бы заострять внимание. Новое значение счётного регистра может быть записано в любой момент времени.
Модуль совпадения иногда может использоваться для вызова прерываний. Использование сигнала совпадения для генерации сигналов в режиме Normal не рекомендуется, так как это будет сильно тормозить работу процессора.
Другое по теме:
Строительство соединительных линий между узлами коммутации г. Магнитогорска и г. Учалы Телекоммуникации – область науки и техники, которая включает совокупность технологий, средств, способов и методов деятельности человека, направленных на создание условий для обмена информацией на расстоянии. Стремительное развитие в последни ...