Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

452 Микроконтроллеры AVR от азов программирования... Флаг переполнения таймера/счетчика (TOV1) устанавливается каж ­ дый раз, когда счетчик достигает ТОР. Кроме того, в том же самом такто ­ вом цикле, что и флаг TOV1, устанавливается флаг ОС1А или флаг ICF1. Это происходит в том случае, если в качестве значения ТОР используется соответственно содержимое регистров OCR1A или ICR1. Если прерыва ­ ние, вызываемое установкой одного из вышеупомянутых флагов, разре ­ шено, то процедура обработки этого прерывания может быть использо ­ вана для того, чтобы обновить значение ТОР. При изменении значения ТОР программным путем нужно следить, чтобы новое его значение было больше или равно значению любого из регистров совпадения. Если значение ТОР окажется ниже, чем значение любого из этих регистров, то совпадение никогда не произойдет. Следует заметить, что при использовании одного из фиксированных значений ТОР неиспользованные старшие разряды регистров OCRlx всегда будут равны нулю, какое бы значение в этот регистр не записывалось. Процедура обновления ICR1 отличается от процедуры обновления OCR1 А. Регистр ICR1 не имеет двойной буферизации. Перезапись значения этого регистра должна производиться в момент, когда счетчик останов ­ лен. Или придется выбрать как можно больший коэффициент пересчета предварительного делителя и следить, чтобы изменения значений проис ­ ходили в тот момент, когда содержимое счетчика еще не достигло содер ­ жимого регистра сравнения. Иначе счетчик пропустит момент совпадения по значению ТОР, счет продолжится дальше до тех пор, пока содержимое счетчика не достигнет значения MAX (OxFFFF). Затем счетчик перезапустится (пройдет через 0x0000), и лишь затем произойдет момент совпадения. Напротив, регистр OCR1A имеет двойную буферизацию. Это позво ­ ляет изменять значение OCR1A в любой момент времени. При записи нового значения в регистр OCR1A оно на самом деле будет записано в специальный буферный регистр. Реальное обновление регистра OCR1A содержимым буферного регистра произойдет в следующем тактовом цикле после достижения регистром TCNT1 значения ТОР. Обновление происходит в том же самом тактовом цикле потому, что регистр TCNT1 в этот момент сброшен в ноль, а флаг TOV1 установлен. Использование регистра ICR1 для определения ТОР удобно в том случае, когда во время работы значение ТОР не изменяется. При этом регистр OCR1A освобождается и может быть использован для генерации сигнала ШИМ на выходе ОС1А. Но если в процессе работы вам необходимо активно менять частоту сигнала ШИМ (изменяя значение ТОР), то использование регистра OCR1A для определения значения ТОР более предпочтительно, так как он имеет двойную буферизацию.

RkJQdWJsaXNoZXIy MTExODQxMg==