*  Выход микроконтроллера из экономичного и расширенного дежурного режимов при асинхронном тактирования таймера-счетчика 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

Предделитель таймер-счетчика 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