Отличительной особенностью таймера/счетчика Т2 является его возможность работать в асинхронном режиме. В этом режиме на вход предделителя поступает сигнал с вывода TOSC1, что позволяет использовать таймер/счетчик в качестве часов реального времени. Источником сигнала может быть как кварцевый резонатор частотой 32768 Гц, подключаемый к выводам TOSC1 и TOSC2 микроконтроллера, так и внешняя схема. Несмотря на то, что тактовый генератор таймера/счетчика настроен на частоту 2768 Гц, частота сигнала от внешней схемы может лежать в пределах 0...256 кГц. При этом частота внешнего сигнала должна быть в четыре раза меньше частоты тактового сигнала микроконтроллера.
Непосредственная запись в регистры TCNT2, OCR2 и TCCR2 в асинхронном режиме синхронизируется с тактовым сигналом таймера/счетчика. При записи числа в любой из указанных регистров оно сохраняется в медиальном временном регистре, своем для каждого регистра таймера/счетчика. А пересылка содержимого временного регистра в рабочий реестр таймера/счетчика осуществляется по третьему после записи положительному фронту сигнала на выводе TOSC1. Соответственно запись нового значения можно производить только после пересылки содержимого ременного регистра в регистр таймера/счетчика.
|
|
Для определения момента действительного изменения регистров ТСNТ2, OCR2 и TCCR2, а также для переключения таймера/счетчика в 'синхронный режим предназначен регистр ASSR, расположенный по адресу $22 ($42). Формат этого регистра приведен на рис.5.16.
Asyncronous Status Register (ASSR)
Бит $22($42) R/W Нач.знач. | ASSR | ||||||||
- | - | - | - | AS2 | TCN2UB | OCR2UB | TCR2UB | ||
R | R | R | R | R/W | R/W | R/W | R/W | ||
Рисунок 5.16 - Регистр состояния асинхронного режима (ASSR)
Биты 7,4 - Зарезервированы, читаются как «0».
Бит 3 – AS2 (Asyncronous Timer/Counter2). Переключение режима работы. Если разряд установлен в «1», на вход прсдделитсля таймера/счетчика Т2 поступают импульсы с вывода TOSC1 микроконтроллера (асинхронный режим). В этом режиме выводы TOSC1 и TOSC2 используются для подключения кварцевого резонатора и. соответственно, не могут использоваться как контакты ввода/вывода общего назначения.
Если разряд сброшен в «0», на вход предделителя поступает внутренний тактовый сигнал микроконтроллера. В этом случае выводы TOSC1 и TOSC2 являются контактами ввода/вывода общего назначения.
При изменении состояния этого разряда содержимое регистров TCNT2, OCR2 и TCCR2 может быть повреждено.
Бит 2 – TCN2UB (Timer/Counter2 Update Busy). Состояние обновления регистра TCNT2. При записи в регистр TCNT2 этот флаг устанавливается в «1», а после пересылки записываемого значения в этот регистр флаг аппаратно сбрасывается в «0». Таким образом, сброшенный флаг TCN2UB означает, что регистр TCNT2 готов для записи в него нового значения.
|
|
Запись в регистр TCNT2 при установленном флаге TCN2UB может привести к повреждению прежнего содержимого регистра и к генерации прерывания.
Бит 1 – OCR2UB (Output Compare Register2 Update Busy). Состояние обновления регистра OCR2. При записи в регистр OCR2 этот флаг устанавливается в «1», а после пересылки записываемого значения в этот регистр флаг аппаратно сбрасывается в «О». Таким образом, сброшенный флаг OCR2UB означает, что регистр OCR2 готов для записи в него нового значения.
Запись в регистр OCR2 при установленном флаге OCR2UB можег привести к повреждению прежнего содержимого регистра и к генерации прерывания.
Бит 0 – TCR2UB (Timer/Counter Control Register2 Update Busy). Состояние обновления регистра TCCR2. При записи в регистр TCCR2 этот флаг устанавливается в «I», а после пересылки записываемого значения в этот регистр флаг аппаратно сбрасывается в «О». Таким образом, сброшенный флаг TCR2UB означает, чго регистр TCCR2 готов для записи в него нового значения.
Запись в регистр TCCR2 при установленном флаге TCR2UB может привести к повреждению прежнего содержимого регистра и к генерации прерывания.
Необходимо отметить, что при переключении между синхронным и асинхронным режимами, содержимое регистров таймера/счетчика может быть повреждено. Чтобы этого избежать, рекомендуется придерживаться следующей последовательности действий:
1. Запретить прерывания от таймера/счетчика Т2 (разряды TOIE2 и
OCIE2 регистра TIMSK).
2. Переключить таймер/счетчик в требуемый режим.
3. Записать новые значения в регистры TCNT2, OCR2 и TCCR2.
4. В случае переключения в асинхронный режим — ждать, пока флаги
TCN2UB, OCR2UB и TCR2UB не будут сброшены.
5. Разрешить прерывания (если требуется).
При работе таймера/счетчика Т2 в асинхронном режиме установка флагов прерываний от него производится синхронно с тактовым сигналом микроконтроллера. Для синхронизации требуется 3 машинных цикла плюс один период тактового сигнала таймера/счетчика. Поэтому к моменту, когда микроконтроллер сможет прочитать состояние счетчика, вызвавшее установку флага прерывания, оно изменится по меньшей мере на единицу. Изменение состояния вывода ОС2 производится по тактовому сигналу таймера/счетчика и не синхронизируется с тактовым сигналом микроконтроллера.
Отдельно следует сказать о «взаимодействии» асинхронного режима таймера/счетчика Т2 с режимами пониженного энергопотребления микроконтроллера Power Down и Power Save.
Первое замечание касается использования прерываний от таймера/счетчика Т2 для «пробуждения» микроконтроллера. В этом случае при переводе микроконтроллера в режим Power Save после записи в регистры таймера/счетчика необходимо убедиться, что операция записи завершена (флаги TCN2UB, OCR2UB и TCR2UB сброшены). Наиболее важно это в случае, когда для «пробуждения» микроконтроллера используется прерывание от схемы сравнения. Дело в том, что во время записи в регистры TCNT2 и OCR2 функция сравнения выключена. Соответственно, если переход в режим Power Save произойдет до окончания операции записи в указанные регистры, прерывания от схемы сравнения никогда не произойдет и микроконтроллер не сможет выйти из спящего режима.
Вторая особенность связана с синхронизацией установки флагов прерываний от таймера/счетчика. При выходе микроконтроллера из режима Power Save по прерыванию от таймера/счетчика флаг соответствующего прерывания устанавливается только спустя 3 машинных цикла после запуска тактового генератора микроконтроллера. Во время этих циклов процессор выполняет команды, следующие за командой SLEEP, и только потом переходит к обработке прерывания (если оно разрешено).
|
|
Кроме того, необходимо быть осторожным при повторном переходе в режим Power Save после выхода из него по прерыванию от таймера/счетчика Т2. Дело в том, что в этом случае для запуска схемы прерываний требуется промежуток времени, равный одному периоду сигнала на выводе TOSC1. Если же промежуток времени между «пробуждением» и повторным переходом в режим Power Save будет меньше указанного, генерации прерывания и, соответственно, «пробуждения» микроконтроллера не произойдет. Для формирования задержки требуемой длительности рекомендуется после «пробуждения» микроконтроллера выполнить запись в какой-либо из регистров таймера/счетчика и дождаться завершения этой операции.
После подачи напряжения питания, а также после «пробуждения» микроконтроллера из режима Power Down таймер/счетчик рекомендуется использовать только спустя секунду после указанных событий. Эта задержка необходима для запуска тактового генератора таймера/счетчика. Соответственно при выходе из режима Power Down содержимое всех регистров таймера/счетчика Т2 можно считать потерянным (из-за нестабильности тактового сигнала во время запуска генератора).