не нужна, а это значит тактирование ядра контроллера (самое жручее, что у
него есть) можно отключить, загнав процессор в спячку, существенно снизив
потребление энергии и просыпаясь только по переполнению таймера (1-2
раза в секунду), чтобы записать новые показания времени.
Конфигурирование
Для включения надо всего лишь установить бит AS2 регистра ASSR - и все,
таймер работает в асинхронном режиме. Но есть тут одна фича которая мне
стоила много головняков в свое время. Дело в том, что при работе от своего
кварца все внутренние регистры таймера начинают синхронизироваться по
своему же кварцу. А он медленный и основная программа может менять уже
введенное значение гораздо быстрей чем оно обработается таймером.
Т.е., например, предустановил ты значение TCNT2, таймер на своей 32кгц
молотилке его еще даже прожевать не успел, а твой алгоритм уже пробежал и
снова туда что то записал — в результате в TCNT2 наверняка попадет мусор.
Чтобы этого не случилось запись буфферизируется. Т.е. это ты думаешь, что
записал данные в TCNT2, но на самом деле они попадают во временный
регистр и в счетный попадут только через три такта медленного генератора.
Также буфферизируется регистры сравнения OCR2 и регистр конфигурации
TCCR2
Как узнать данные уже внеслись в таймер или висят в промежуточных
ячейках? Да очень просто - по флагам в регистре ASSR. Это биты TCN2UB,
OCR2UB и TCR2UB - каждый отвечает за свой регистр. Когда мы, например,
записываем значение в TCNT2 то TCNUB становится 1, а как только наше
число из промежуточного регистра таки перешло в реальный счетный
регистр TCNT2 и начало уже тикать, то этот флаг автоматом сбрасывается.
Таким образом, в асинхронном режиме, при записи в регистры TCNT2, OCR2
и TCCR2 сначала нужно проверять флаги TCN2UB, OCR2UB и TCR2UB и