Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[29]

АСИНХРОННАЯ РАБОТА ТАЙМЕРА/СЧЕТЧИКА0

При синхронной работе таймера/счетчика0 все операции и тактирование идентичны работе таймера/счетчика2. Однако асинхронная работа имеет некоторые особенности.

•Это важно! При переключении между асинхронным и синхронным тактированием таймера/счетчика0 регистры таймера TCNT0, OCR0 и TCCR0 могут быть повреждены. Безопасное переключение выполняется следующей последовательностью действий:

1.Запрещаются прерывания OCIE0 и TOIE0 таймера0.

2.Соответствующей установкой ASO выбирается источник тактового сигнала.

3.В TCNT0, OCR0 и TCCR0 записываются новые значения.

4.Если выполняется переключение в асинхронный режим: ожидать TCN0UB,

OCR0UB и TCR0UB.

5.Разрешить прерывания, если это необходимо.

•Генератор оптимизирован под использование часового кристалла с частотой 32,768 кГц. Внешний тактовый сигнал, подаваемый на этот вывод, проходит через тот же самый усилитель с полосой пропускания 256 кГц. Таким образом, внешний тактовый сигнал должен быть в диапазоне от 0 Гц до 256 кГц. Частота внешнего тактового сигнала, подаваемого на вывод TOSC1, не должна превышать одной четвертой от тактовой частоты CPU. Отметим, что тактовая частота CPU может быть ниже частоты XTAL, если разрешено деление частоты XTAL.

•При записи в один из регистров TCNT0, OCR0 или TCCR0 записываемая величина пересылается в регистр временного хранения и фиксируется после двух положительных фронтов TOSC1. Пользователь не должен записывать новое значение прежде, чем содержимое регистра временного хранения не будет передано по назначению. Каждый из указанных регистров имеет свой собственный регистр временного хранения, это означает, к примеру, что запись в TCNT0 не исказится при записи в OCR0. Для того, чтобы убедиться в выполнении пересылки в регистр назначения используется регистр статуса асинхронного режима (Asynchronous Status Register -ASSR).

•При вводе режима Sleep после записи в регистры TCNT0, OCR0 or TCCR0 пользователь должен ожидать пока записываемый регистр не будет обновлен, если таймер/счетчик0 используется для активации прибора. В ином случае MCU перейдет в режим Sleep прежде, чем изменения окажут какой либо эффект. Это особенно важно если для активации прибора используется прерывание по сравнению выхода0; сравнение выхода запрещается во время записи в OCR0 или TCNT0. Если цикл записи не завершен (т.е. пользователь введет режим Sleep прежде, чем бит OCR0UB будет сброшен в 0) прибор никогда не получит совпадения при сравнении и MCU не будет активирован. Если таймер/счетчик0 используется для активации прибора из режима Power Save и если пользователь намеревается возобновить режим Power Save, то необходимо предпринимать меры предосторожности - для сброса логики прерывания необходим один цикл TOSC1. Если время между активацией и восстановлением режима Power Save меньше одного цикла TOSC1 прерывание не произойдет и прибор не будет активирован. Если пользователь сомневается в том, что промежуток времени перед восстановлением режима Power Save достаточен, необходимо использовать следующий алгоритм:

1.Записать значение в TCCR0, TCNT0 или OCR0.

2.Подождать пока соответствующий флаг занятого обновления в регистре


ASSR не будет сброшен в 0. 3. Ввести режим Power Save.

•Генератор частоты 32кГц таймера/счетчика0 работает всегда, за исключением режима Power Down. При восстановления питания или активации из режима Power Down пользователь должен помнить о том, что генератору для стабилизации необходимо время порядка одной секунды. Пользователю рекомендуется выждать не менее одной секунды прежде чем использовать таймер/счетчик0 после подачи питания или активации из режима Power Down.

•Описание активации прибора из режима Power Save при асинхронном тактировании таймера. Когда условия прерывания выполнены, на следующем цикле тактовой частоты таймера начинается процесс активации, т.е. состояние таймера должно увеличиться как минимум на единицу, прежде, чем процессор сможет прочитать состояние счетчика. Флаги прерываний обновляются за три тактовых цикла процессора после запуска тактовой частоты процессора. В течение этих циклов процессор выполняет команды но условия прерывания еще не читаемы и подпрограмма обработки прерывания не может начать выполнение.

Во время асинхронной работы синхронизация флагов прерываний асинхронного таймера занимает три тактовых цикла процессора плюс один цикл таймера. Таким образом содержимое таймера увеличивается минимум на единицу, прежде чем процессор сможет прочитать содержимое таймера вызвавшее установку флага прерывания. Вывод сравнения выхода меняет состояние в соответствии с тактовым сигналом таймера и не синхронизирован с тактовой частотой процессора.

РЕГИСТР СТАТУСА АСИНХРОННОГО РЕЖИМА -ASSR - (Asynchronous Status Register)

Биты7 6 543210

$30 ($50)I - I - I - I - I aso I tcnouBocrouBtdrouBassr

Чтение/ЗаписьR R R R R/W R R R

Начальное состояние 00000000

•Bit 7..4 - Res: Reserved Bits - Зарезервированные биты

Эти биты в микроконтроллерах ATmega603/103 зарезервированы и при считывании всегда будут показывать 0.

•Bit 3 - ASO: Asynchronous Timer/CounterO - Асинхронный режим таймера/счетчикаО

При установленном в состояние 1 бите таймер/счетчик0 тактируется сигналом вывода TOSC1. При очищеном бите таймер/счетчик0 тактируется внутренним тактовым сигналом CK. При изменении состояния этого бита содержимое TCNT0 может быть повреждено.

•Bit 2 - TCNOUB: Timer/CounterO Update Busy - Таймер/счетчикО занят для обновления

Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном TCNT0. При обновлении записанного в TCNT0 значения содержимым регистра временного хранения бит аппаратно очищается. Бит в логическом состоянии 0 означает, что TCNT0 готов к обновлению новым значением.

•Bit 1 - OCROUB: Output Compare RegisterO Update Busy - Сравнение выхода регистраО занято для обновления

Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном OCR0. При обновлении записанного в OCR0 значения содержимым


регистра временного хранения бит аппаратно очищается.

Бит в логическом состоянии 0 означает, что OCR0 готов к обновлению новым значением. • Bit 0 - TCR0UB: Timer/Counter Control RegisterQ Update Busy - Регистр управления таймера/счетчикаР занят для обновления

Бит устанавливается в состояние 1 при работе таймера/счетчика0 в асинхронном режиме и записанном TCCR0. При обновлении записанного в TCCR0 значения содержимым регистра временного хранения бит аппаратно очищается.

Бит в логическом состоянии 0 означает, что TCCR0 готов к обновлению новым значением. Если запись выполняется в любой из трех регистров таймера/счетчика0 когда их флаги занятости для обновления установлены, то записываемое значение может быть повреждено и привести к нежелательному прерыванию.

Считывание состояний TCNT0, OCR0 и TCCR0 отличается. При чтении состояния TCNT0 считывается действительное содержимое, при чтении состояний OCR0 или TCCR0 считывается содержимое регистров временного хранения.

16-разрядный таймер/счетчик1

Блок-схема таймера/счетчика1 приведена на рис. 35

16-разрядный таймер/счетчик1 может получать тактовый сигнал от CK, CK после предварительного делителя и от внешнего вывода. Кроме того его можно остановить, как показано в описании регистра управления таймером/счетчиком1 - TCCR1B (Timer/ Counter1 Control Register). В регистрах управления TCCR1A и TCCR1B находятся различные флаги, указывающие на переполнение, совпадение при сравнении и случаи захвата событий. В регистре масок прерываний TIMSK (Timer/Counter Interrupt Mask Register) устанавливаются разрешения/запрещения прерываний таймера/счетчика1. При внешнем тактировании таймера/счетчика1 внешний сигнал синхронизируется частотой тактового генератора CPU. Для правильной работы таймера/счетчика1 по внешнему тактовому сигналу минимальное время между двумя переключениями внешнего тактового сигнала должно быть не менее одного периода тактового сигнала CPU. Синхронизация внешнего тактового сигнала ведется нарастающим фронтом внутреннего тактового сигнала CPU.

Наилучшие точность и разрешение 16-разрядный таймер/счетчик1 обеспечивает при наименьшем коэффициенте предварительного деления. С другой стороны, высокий коэффициент предварительного деления удобен при реализации таймером/счетчиком1 низкоскоростных функций или точной синхронизации редко происходящих действий. Таймер/счетчик1 поддерживает две функции сравнения выхода, используя регистр1 сравнения выходов A и B - OCR1A и OCR1B в качестве источников данных, сравниваемых с содержимым таймера/счетчика1. Функции сравнения выхода включают очистку счетчика по совпадению сравненияA и воздействие на выводы сравнения выхода при обоих совпадениях сравнения.

Таймер/счетчик1 может быть использован в качестве 8, 9 или 10-разрядного широтно-импульсного модулятора. В этом режиме счетчик и регистры OCR1A/OCR1B работают как сдвоенный самостоятельный ШИМ со сцентрированными импульсами, без формирования ложных импульсов. См. раздел Таймер/счетчик! в ШИМ режиме, где подробно описана эта функция.

Функция захвата входа таймера/счетчика1 обеспечивает захват содержимого таймера/счетчика1 в регистр захвата входа, запускаемый внешним событием на выводе входа захвата PD4/(IC1). Реальные установки захвата события определяются регистром управления таймером/счетчиком1 TCCR1B (Timer/Counter1 Control Register). Кроме



[стр.Начало] [стр.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]