Выход микроконтроллера из экономичного и расширенного дежурного режимов при асинхронном тактирования таймера-счетчика 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
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 | TIMSK | |
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Разряд 1 - OCIE0: Разрешение прерывания по результату сравнения таймера-счетчика 0
Если OCIE0=1, а также установлен бит I в регистре статуса, то прерывание по результату сравнения таймера-счетчика 0 активизируется. В этом случае прерывание возникает, если обнаруживается совпадение значения таймера-счетчика 0 с порогом сравнения, т. е. когда установлен флаг OCF0 в регистре флагов прерываний таймеров-счетчиков TIFR.
Разряд 0 - TOIE0: Разрешение прерывания по переполнению таймера-счетчика 0 Если TOIE0=1, а также установлен бит I в регистре статуса, то прерывание по переполнению таймера-счетчика 0 разрешается. В этом случае запрос на прерывание генерируется, если обнаруживается переполнение таймера-счетчика 0, т. е. когда установлен флаг TOV0 в регистре флагов прерываний таймеров-счетчиков TIFR.
Регистр флагов прерываний таймеров-счетчиков - TIFR
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 | TIFR | |
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Разряд 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.
Предделитель таймера-счетчика 0

Рисунок 45. Предделитель таймер-счетчика 0
Тактовый источник таймера-счетчика 0 обозначен как clkT0. По умолчанию clkT0 подключен к системному источнику синхронизации ввода-вывода clkI/O. Путем установки бита AS0 в регистре ASSR таймер-счетчик 0 тактируется асинхронно с вывода TOSC1. Данная функция позволяет использовать таймер-счетчик 0 в качестве часов реального времени (RTC). Если AS=1, то выводы TOSC1 и TOSC2 более не выполняют функции линий порта С, а между ними может быть подключен кварцевый резонатор в качестве отдельного тактового источника таймера-счетчика 0. Генератор оптимизирован под использование кварца на частоту 32768 Гц. Подключение к выводу TOSC1 внешнего тактового источника не рекомендуется.
Предделитель таймера-счетчика 0 позволяет выбрать следующие тактовые сигналы: clkT0S/8, clkT0S/32, clkT0S/64, clkT0S/128, clkT0S/256 и clkT0S/1024. Кроме того, имеется возможность остановить синхронизацию. Установка бита PSR0 в регистре SFIOR сбрасывает предделитель. Данная функция позволяет программисту работать с более прогнозируемым поведением предделителя.
Регистр специальных функций ввода-вывода SFIOR
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
TSM | - | - | - | ACME | PUD | PSR0 | PSR321 | SFIOR | |
Чтение/запись | Чт./Зп. | Чт. | Чт. | Чт. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Разряд 7 - TSM: Режим синхронизации таймера-счетчика
Установка бита TSM активизирует режим синхронизации таймеров-счетчиков. В данном режиме после установки бита PSR0 или PSR321 соответствующий предделитель будет постоянно находиться в сброшенном состоянии. В этом состоянии гарантируется, что все соответствующие таймеры-счетчики будут остановлены и могут быть одинаково настроены без риска изменения состояния одного из них во время конфигурации. Если после этого сбросить бит TSM, то биты PSR0 и PSR321 сбрасываются аппаратно, а таймеры-счетчики начинают счет одновременно.
Разряд 1 - PSR0: Сброс предделителя таймера-счетчика 0
Если данный бит равен лог. 1, то предделитель таймера-счетчика 0 сбрасывается. Данный бит обычно сбрасывается аппаратно сразу после установки. Если данный бит устанавливается, когда таймер-счетчик 0 работает в асинхронном режиме, то он остается равным 1 пока не сбросится предделитель таймера-счетчика 0. Данный бит не сбрасывается аппаратно, если бит TSM=1.
16-разр. таймеры-счетчики 1 и 3
16-разрядные таймеры-счетчики предназначены для точного задания временных интервалов, генерации прямоугольных импульсов и измерения временных характеристик импульсных сигналов.
Основные отличительные особенности:
16-разрядные счетчики (в т. ч. возможность организации 16-разр. ШИМ)
Три раздельных блока сравнения
Двойная буферизация регистров порога сравнения (OCR)
Один блок захвата
Подавитель шума на входе блока захвата
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


