Асинхронный режим
Асинхронном режиме может работать таймер/счетчик T0. В асинхронном режиме на вход предделителя поступает сигнал от кварцевого генератора таймера/счетчика, что позволяет использовать таймер/счетчик в качестве часов реального времени. Задатчиком частоты сигнала может быть как кварцевый резонатор, подключаемый к выводам TOSC1 и TOSC2 микроконтроллера, так и сигнал от внешней схемы, подаваемый на вывод TOSC1. Несмотря на то что тактовый генератор таймера/счетчика настроен на частоту 32768 Гц, частота кварцевого резонатора либо сигнала от внешней схемы может лежать в пределах 0…256 кГц. При этом она должна быть в четыре раза меньше частоты тактового сигнала микроконтроллера. Непосредственная запись в регистры TCNT0 (TCNT2), OCR0 (OCR2) и TCCR0 (TCCR2) в асинхронном режиме синхронизируется с тактовым сигналом таймера/счетчика. При записи числа в любой из указанных регистров оно сохраняется в специальном временном регистре, своем для каждого регистра таймера/счетчика. А пересылка содержимого временного регистра в рабочий регистр таймера/счетчика осуществляется по третьему после записи положительному фронту сигнала на выводе TOSC1. Соответственно запись нового значения можно производить только после пересылки содержимого временного регистра в регистр таймера/счетчика. Для определения момента действительного изменения регистров таймера/счетчика, а также для переключения таймера/счетчика в асинхронный режим предназначен регистр ASSR. Формат этого регистра приведен на Рис.5.11, а описание отдельных его разрядов приведено в Табл.5.13. Рис.5.11. Формат регистра ASSR Таблица5.13. Разряды регистра состояния асинхронного режима ASSR
Примечание: n = 0 Необходимо отметить, что при переключении между синхронным и асинхронным режимами, содержимое регистров таймера/счетчика может быть повреждено. Чтобы этого избежать, рекомендуется действовать в следующей последовательности: • запретить прерывания от таймера/счетчика; • переключить его в требуемый режим; • записать новые значения в регистры TCNT2, OCR2 и TCCR2; • в случае переключения в асинхронный режим ждать, пока флаги TCN0UB (TCN2UB), OCR0UB (OCR0UB) и TCR0UB (TCR0UB) не будут сброшены; • сбросить флаги прерываний таймера/счетчика; • разрешить прерывания (если требуется). Изменение состояния вывода OC0 (OC2) производится по тактовому сигналу таймера/счетчика и не синхронизируется с тактовым сигналом микроконтроллера. Отдельно следует сказать о «взаимодействии» асинхронного режима таймеров/счетчиков с режимами пониженного энергопотребления микроконтроллера Power Down, Power Save, Standby и Extended Standby. Первое замечание касается использования прерываний от таймера/счетчика для «пробуждения» микроконтроллера. Если перевод микроконтроллера в режим Power Save или Extended Standby осуществляется сразу же после записи в регистры таймера/счетчика, необходимо убедиться, что операция записи завершена. Наиболее важно это в случае, когда для «пробуждения» микроконтроллера используется прерывание от блока сравнения, поскольку во время записи в регистр TCNT0 (TCNT2) или OCR (OCR2) работа блока сравнения заблокирована. Соответственно, если переход в спящий режим произойдет до окончания операции записи в указанные регистры, прерывания от схемы сравнения никогда не произойдет и микроконтроллер не сможет выйти из спящего режима.
|