Разряд 2:0 - CS02:0: Настройка частоты синхронизации таймера
С помощью трех настроечных бит имеется возможность выбрать различные тактовые частоты, кратные исходной частоте синхронизации (см. табл. 56).
Таблица 56. Выбор частоты синхронизации таймера 0
CS02 | CS01 | CS00 | Описание |
0 | 0 | 0 | Нет синхронизации. Таймер-счетчик 0 оставлен. |
0 | 0 | 1 | clkT0S/1 (без предделения) |
0 | 1 | 0 | clkT0S/8 (с предделением) |
0 | 1 | 1 | clkT0S/32 (с предделением) |
1 | 0 | 0 | clkT0S/64 (с предделением) |
1 | 0 | 1 | clkT0S/128 (с предделением) |
1 | 1 | 0 | clkT0S/256 (с предделением) |
1 | 1 | 1 | clkT0S/1024 (с предделением) |
Регистр таймера-счетчика - TCNT0
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TCNT0[7:0] | ||||||||
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр таймера-счетчика характеризуется двунаправленностью доступа к 8-разрядному счетчику таймера 0. Запись в регистр TCNT0 блокирует отработку возникающего совпадения на следующем после записи такте синхронизации таймера. Изменение содержимого счетчика (TCNT0) во время счета связано с риском потери результата сравнения между TCNT0 и регистром OCR0.
Регистр порога сравнения - OCR0
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCR0[7:0] | ||||||||
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр порога сравнения содержит 8-разр. значение, которое непрерывно сравнивается цифровым компаратором со значением 8-разр. счетчика (TCNT0). Факт совпадения значений может использоваться для генерации прерывания по выполнению условия сравнения или для генерации прямоугольных импульсов на выводе OC0.
Асинхронная работа таймера-счетчика 0
Регистр асинхронного состояния - ASSR
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | - | - | AS0 | TCN0UB | OCR0UB | TCR0UB | |
Чтение/запись | Чт. | Чт | Чт | Чт | Чт./Зп. | Чт | Чт | Чт |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Разряд 3 - AS0: Разрешение асинхронного тактирования таймера-счетчика 0
Если AS0 = 0, то таймер счетчик 0 тактируется сигналом синхронизации ввода-вывода - clkI/O. Если AS0 = 1, то таймер-счетчик 0 тактируется низкочастотным кварцевым генератором, связанного с задающим кварцем через выводы TOSC1 и TOSC2. При изменении значения AS0 содержимое регистров TCNT0, OCR0 и TCCR0 может быть нарушено.
Разряд 2 - TCN0UB: Флаг занятости таймера-счетчика 0 при обновлении
Если таймер-счетчик 0 работает асинхронно и выполнена запись в TCNT0, то данный флаг устанавливается. После того, как содержимое TCNT0 обновляется из временного регистра, данный флаг сбрасывается аппаратно. Следовательно, когда TCN0UB=0, в TCNT0 может быть выполнена запись нового значения.
Разряд 1 - OCR0UB: Флаг занятости регистра порога сравнения при обновлении
Если таймер-счетчик 0 работает асинхронно и выполнена запись в регистр OCR0, то данный флаг устанавливается. По завершении обновления OCR0 из временного регистра данный флаг сбрасывается аппаратно. Если OCR0UB=0, то это означает готовность регистра OCR0 к записи нового значения.
Разряд 0 - TCR0UB: Флаг занятости регистра управления таймера-счетчика 0 при обновлении
Если таймер-счетчик 0 работает асинхронно и выполнена запись в регистр TCCR0, то данный флаг устанавливается. По завершении обновления TCCR0 из временного регистра данный флаг сбрасывается аппаратно. Если TCR0UB=0, то это означает готовность регистра TCCR0 к записи нового значения.
Если выполнить запись в любой из трех регистров таймера-счетчика 0, когда соответствующий флаг занятости установлен, то обновляемое значение может быть нарушено и может стать причиной несанкционированного возникновения прерывания.
Механизм чтения TCNT0, OCR0 и TCCR0 различный. Если выполняется чтение TCNT0, то считывается фактическое значение таймера. Если же считывается значение OCR0 или TCCR0, то фактически считывается содержимое временного регистра.
Асинхронная работа таймера-счетчика 0
Если таймер-счетчик 0 работает асинхронно, то необходимо учесть некоторые особенности.
Предупреждение: При переключении между асинхронным и синхронным тактовыми источниками таймера-счетчика содержимое регистров TCNT0, OCR0 и TCCR0 может быть нарушено. Во избежание этого необходимо придерживаться следующей безопасной последовательности переключения:
1. Отключить прерывания таймера-счетчика 0 путем сброса бит OCIE0 и TOIE0.
2. Выбрать необходимый тактовый источник с помощью бита AS0
3. Выполнить запись новых значений в TCNT0, OCR0 и TCCR0.
4. При переходе в асинхронный режим тактирования дождаться сброса флагов TCN0UB, OCR0UB и TCR0UB.
5. Сбросить флаги прерывания таймера-счетчика 0
6. При необходимости разрешить прерывания
Генератор оптимизирован под использование часового кварцевого резонатора на частоту 32768 Гц. Подключение внешнего тактового сигнала к выводу TOSC1 может сказаться на некорректности работы таймера. Тактовая частота ЦПУ должна быть минимум в четыре раза выше частоты данного генератора. o Запись в любой из регистров TCNT0, OCR0 или TCCR0 происходит за два положительных фронта TOSC1, т. к. данные предварительно помещаются во временный регистр, а затем передаются по назначению. Программист должен предусмотреть, чтобы до окончания передачи содержимого временного регистра к назначенному регистру не выполнилась еще одна запись в. этот регистр. Каждый из трех упомянутых регистров имеют свои индивидуальные временные регистры. Это означает, что, например, запись в TCNT0 не влияет на процесс записи в регистр OCR0. Чтобы определить в какой регистр была выполнена запись, реализован регистр асинхронного состояния ASSR.
Если экономичный режим или расширенный дежурный режим вводится после записи в TCNT0, OCR0 или TCCR0, то программист должен дождаться завершения обновления записанного регистра, в случае если таймер-счетчик 0 используется для пробуждения из этих режимов. Иначе микроконтроллер перейдет в режим сна прежде чем вступят в силу желаемые изменения. Это особенно важно, если прерывание по результату сравнения таймера-счетчика 0 используется для пробуждения микроконтроллера, т. к. функция отработки условия совпадения блокируется после записи в OCR0 или TCNT0. Если цикл записи не заканчивается и микроконтроллер переводится в режим сна прежде чем OCR0UB станет равным нулю, то микроконтроллер больше не будет прерываться при выполнении условия сравнения и, следовательно, не сможет пробудиться.
Если таймер-счетчик 0 используется для пробуждения микроконтроллера из экономичного режима или расширенного дежурного режима, то, если требуется перевести данный микроконтроллер снова в один из этих режимов, необходимо учесть несколько особенностей. Для сброса логики прерываний требуется один такт TOSC1. Если интервал времени между пробуждением микроконтроллера и повторным вводом режима сна меньше чем один период TOSC1, то прерывание в дальнейшем не возникнет и микроконтроллер не сможет пробудиться. Если программист не уверен в прохождении достаточного времени перед повторным вводом в экономичный режим или расширенный дежурный режим, то необходимо придерживаться следующей последовательности действий, которая гарантирует прохождение одного периода TOSC1:
1. Запись значения в TCCR0, TCNT0 или OCR0.
2. Ожидание сброса соответствующего флага занятости при обновлении в регистре ASSR.
3. Ввод экономичного или расширенного дежурного режима.
Если выбрана асинхронная работа, то генератор на 32768 Гц таймера-счетчика 0 находится постоянно включенным, за исключением режима выключения и дежурного режима микроконтроллера. После сброса при подаче питания или пробуждения из режима выключения и дежурного режима программист должен учитывать, что для возобновления нормальной стабильной работы данного генератора требуется минимум 1 секунда. Таким образом, программисту рекомендуется включить задержку минимум на 1 сек. перед использованием таймера-счетчика 0 после подачи питания или выхода из режима выключения или дежурного режима. Содержимое всех регистров таймера-счетчика 0 необходимо рассматривать как потерянное после подачи питания или пробуждения из указанных выше режимов из-за нестабильности тактового сигнала при запуске независимо от того, какой асинхронный источник используется (генератор или внешний сигнал на выводе TOSC1).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |


