Разделы

В сети

Пользователей: 118
Из них просматривают:
Аналоги: 48. Даташиты: 27. Инструкции: 3. Новости: 16. Остальное: 2. Ошибки: 1. Программы: 2. Профиль пользователя: 2. Расчёты: 1. Торрент: 4. Форум: 10. Чат: 2.
Участников: 5
Гостей: 113

KT315 , Google , grom , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Контроллеры

ATmega128. Асинхронная работа таймера-счетчика 0

Написал MACTEP в 31.03.2010 5:30:00 (4391 прочтений)

Асинхронная работа таймера-счетчика 0



 

Регистр асинхронного состояния - ASSR

  • Разряд 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).
  • Выход микроконтроллера из экономичного и расширенного дежурного режимов при асинхронном тактирования таймера-счетчика 0 происходит в следующей последовательности. Если выполняется условие прерывания, то инициируется процесс пробуждения следующим тактом синхронизации таймера, т.е. таймер минимум на 1 изменит свое состояние, прежде чем процессор получит доступ к его состоянию. После пробуждения микроконтроллер задерживается на 4 такта синхронизации ЦПУ, а затем переходит на вектор обработки прерывания, а по завершении процедуры его обработки возвращается к выполнению инструкции, следующей за SLEEP.
  • Чтение регистра TCNT0 сразу после пробуждения из экономичного режима (Power-save) может дать некорректный результат. Поскольку TCNT0 тактируется от асинхронного источника TOSC, то чтение TCNT0 должно быть выполнено через регистр, синхронизированный с внутренней синхронизацией ввода-вывода. Синхронизация выполняется каждый нарастающий фронт на TOSC1. При пробуждении из экономичного режима активизируется снова синхронизация ввода-вывода (clkI/O) и при чтении TCNT0 фактически будет считываться предыдущее значение (которое записано перед вводом в режим сна) до следующего нарастающего фронта на TOSC1. Фаза тактового сигнала TOSC после выхода из экономичного режима непредсказуема, т.к. зависит от момента пробуждения микроконтроллера. С учетом этого, при чтении содержимого TCNT0, рекомендуется соблюдать следующую последовательность действий:
    1. По усмотрению записать произвольное значение или в регистр OCR0 или в TCCR0.
    2. Дождаться сброса флага занятости при обновлении, соответствующего выбранному в п.1 регистру.
    3. Выполнить чтение TCNT0.
  • Во время асинхронной работы синхронизация флагов прерываний асинхронного таймера требует три такта синхронизации ЦПУ плюс один такт синхронизации таймера. Таким образом, как минимум таймер должен изменить свое состояние на 1 прежде чем процессор сможет считать его содержимое, вызывающее установку флагов прерываний. Выход генератора прямоугольных импульсов OC0 привязан к синхронизации таймера и не синхронизирован с тактированием ЦПУ.

Регистр маски прерываний таймеров-счетчиков - TIMSK

  • Разряд 1 - OCIE0: Разрешение прерывания по результату сравнения таймера-счетчика 0

    Если OCIE0=1, а также установлен бит I в регистре статуса, то прерывание по результату сравнения таймера-счетчика 0 активизируется. В этом случае прерывание возникает, если обнаруживается совпадение значения таймера-счетчика 0 с порогом сравнения, т.е. когда установлен флаг OCF0 в регистре флагов прерываний таймеров-счетчиков TIFR.

  • Разряд 0 - TOIE0: Разрешение прерывания по переполнению таймера-счетчика 0

    Если TOIE0=1, а также установлен бит I в регистре статуса, то прерывание по переполнению таймера-счетчика 0 разрешается. В этом случае запрос на прерывание генерируется, если обнаруживается переполнение таймера-счетчика 0, т.е. когда установлен флаг TOV0 в регистре флагов прерываний таймеров-счетчиков TIFR.

Регистр флагов прерываний таймеров-счетчиков - TIFR

  • Разряд 1 - OCF0: Флаг совпадения таймера-счетчика 0

    OCF0 равен лог. 1, если обнаруживается совпадением между значением таймера-счетчика 0 и данными в регистре OCR0 (регистр порога сравнения). OCF0 сбрасывается аппаратно при переходе на соответствующий вектор прерывания. Альтернативно, флаг OCF0 может быть сброшен путем записи в него лог. 1. Если установлены бит I в регистре SREG, бит OCIE0 (разрешено прерывание по выполнению условия сравнения таймера-счетчика 0) и флаг OCF0, то генерируется прерывание по выполнению условия сравнения таймера-счетчика 0.

  • Разряд 0 - TOV0: Флаг переполнения таймера-счетчика 0

    Флаг TOV0 устанавливается, если в таймере-счетчике 0 возникает переполнение. Флаг TOV0 сбрасывается аппаратно при переходе на соответствующий вектор прерывания. Альтернативно, флаг TOV0 сбрасывается путем записи в него лог. 1. Если установлены бит I в регистре SREG, бит TOIE0 (разрешено прерывание по переполнению таймера-счетчика 0) и флаг TOV0, то генерируется прерывание по переполнению таймера-счетчика 0. В режиме ШИМ данный флаг устанавливается, если таймер-счетчик 0 изменяет направление счета на значении 0x00.

<< Предыдущая страница Оглавление Следующая страница >>
 
Теги: ATmega128  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

Смотрите подробности пульт управления emas на сайте.

Интересно

Обработанные водным раствором щелочи стальные контакты (например, батарейного отсека переносной магнитолы или пульта ДУ) никогда не заржавеют.

Похожие новости