Раздел: Документация
0 ... 115 116 117 118 119 120 121 ... 195 Необходимо отметить, что при переключении между синхронным и асинхронным режимами содержимое регистров таймера/счетчика может быть повреждено. Чтобы этого избежать, рекомендуется придерживаться следующей последовательности действий: 1.Запретить прерывания от таймера/счетчика. 2.Переключить его в требуемый режим. 3.Записать новые значения в регистры TCNTfl, OCRn (OCRnx) и TCCR/* (TCCRux). 4.В случае переключения в асинхронный режим дождаться сброса флагов TCNaiUB, OCRUB (OCR2xUB) и TCRUB (TCR2xUB). 5.Сбросить флаги прерываний таймера/счетчика. 6.Разрешить прерывания (если требуется). При работе таймера/счетчика в асинхронном режиме установка флагов прерываний от него производится синхронно с тактовым сигналом микроконтроллера. Для синхронизации требуется 3 такта плюс один период тактового сигнала таймера/счетчика. Поэтому к моменту, когда микроконтроллер сможет прочитать состояние счетчика, вызвавшее установку флага прерывания, оно изменится, по меньшей мере, на единицу. Изменение состояния выводов ОСп (ОСл А/ОС л В) производится по тактовому сигналу таймера/счетчика и не синхронизируется с тактовым сигналом микроконтроллера. Отдельно следует сказать о «взаимодействии» асинхронного режима таймеров/счетчиков с режимами пониженного энергопотребления микроконтроллера. Первое замечание касается использования прерываний от таймера/счетчика для «пробуждения» микроконтроллера. Если перевод микроконтроллера в режим Power Save или Extended Standby осуществляется сразу же после записи в регистры таймера/счетчика, необходимо убедиться, что операция записи завершена. Наиболее важно это в случае, когда для «пробуждения» микроконтроллера используется прерывание от блока сравнения, поскольку во время записи в счетный регистр или регистр сравнения работа блока сравнения заблокирована. Соответственно, если переход в «спящий» режим произойдет до окончания операции записи в указанные регистры, прерывания от схемы сравнения никогда не произойдет, и микроконтроллер не сможет выйти из «спящего» режима. Кроме того, необходимо быть осторожным при повторном переходе в режим Power Save или Extended Standby после выхода из них по прерыванию от таймера/счетчика. Дело в том, что в этом случае для запуска подсистемы прерываний требуется промежуток времени, равный одному периоду сигнала на выводе TOSC1. Если же промежуток времени между «пробуждением» и повторным переходом в «спящий» режим будет меньше указанного, генерации прерывания и соответственно перехода микроконтроллера в рабочий режим не произойдет. Для формирования задержки требуемой длительности рекомендуется после «пробуждения» микроконтроллера выполнить запись в какой-либо из регистров таймера/счетчика и дождаться завершения этой операции. После подачи напряжения питания, а также после «пробуждения» микроконтроллера из режима Power Down или Standby таймер/счетчик рекомендуется использовать только спустя секунду после указанных событий. Эта задержка необходима для запуска тактового генератора таймера/счетчика. Соответственно, при выходе из режима Power Down или Standby содержимое всех регистров таймера/счетчика можно считать потерянным (из-за нестабильности тактового сигнала во время запуска генератора). Причем это справедливо не только при использовании кварцевого резонатора, но и при использовании внешнего тактового сигнала. 7.6.16-битные таймеры/счетчики Количество 16-битных таймеров/счетчиков зависит от модели. Таймер/счетчик Т1 присутствует во всех моделях микроконтроллеров семейства Mega. В моделях ATmega64x/128x и ATmega 162х имеется уже два 16-битных таймера/счетчика — Т1 и ТЗ. Больше всего 16-битных таймеров/счетчиков в моделях ATmega640x/1280x/1281x/2560x/2561x — целых пять (Tl, ТЗ...Т5). Как и 8-битные таймеры/счетчики ТО и Т2, они могут использоваться для формирования временных интервалов, для подсчета числа внешних событий, формирования сигналов и генерации сигналов с ШИМ. В дополнение к этому 16-битные таймеры/счетчики могут по внешнему сигналу сохранять свое текущее состояние в отдельном регистре ввода/вывода. Рассматриваемые таймеры/счетчики различных моделей отличаются только количеством блоков сравнения и соответственно количеством каналов генерации ШИМ-сигналов. Так, если в моделях ATmega64x/128x и ATmega640x/1280x/1281x/2560x/2561x 16-битные таймеры/счетчики имеют по три блока сравнения, то в остальных моделях — только по два. Кроме того, таймеры/счетчики Т4 и Т5 моделей ATmega 1281х/2561х являются усеченными — из-за малого количества выводов микроконтроллера в них не поддерживаются функции захвата и сравнения, а также тактирование от внешнего сигнала. Упрощенная структурная схема 16-битных таймеров/счетчиков приведена на Рис. 7.17. В состав каждого таймера/счетчика входят следующие регистры ввода/вывода: •16-битный счетный регистр TCNTh; •16-битный регистр захвата ICR/i; •два или три 16-битных регистра сравнения OCR/jA, OCR/jB, OCR/jC; •два или три 8-битных регистра управления TCCR/jA, TCCR/zB, TCCR/jC. Счет Сброс Направл. Таймер/cww* TCNTn —ОСЙлА — ОСВлб ТССЙпА I TOVn Запрос на прерывание clkTn Селектор тактового сигнала OCFnA 3апР°сна прерывание Сигнал*» ОСяА ТОР ► OCFnB Запрос на прерывание Формирователь \ ШяВ OCFnC 3апР°сна прерывание Формирователь сигналов ОСлС Запрос на "ICFn прерывание С выхода аналогового компаратора
ТССШЗ Т ТОСМ ~Г~ Рис. 7.17. Структурная схема 16-битных таймеров/счетчиков (Т1,ТЗ,Т4, Т5) Каждый из 16-битных регистров физически размещается в двух регистрах ввода/вывода, названия которых получаются добавлением к названию регистра буквы «Н» (старший байт) и «L» (младший байт). Счетный регистр таймера/счетчика Tl TCNT1, например, размещается в регистрах TCNT1Н: TCNT1L. Адреса всех регистров 16-битных таймеров/счетчиков указаны в Табл. 7.20. 0 ... 115 116 117 118 119 120 121 ... 195
|