Биты | ||||||||||||||||||
$27 ($47) $26 ($46) |
| ICR1H ICR1L | ||||||||||||||||
Чтение/Запись |
| |||||||||||||||||
Начальное состояние |
16-разрядный регистр захвата входа обеспечивает только чтение содержимого.
При обнаружении на выводе захвата входа PD4(IC1) нарастающего или падающего фронта сигнала (определяемого установкой ICES1) текущее состояние таймера/счетчика1 пересылается в регистр захвата входа ICR1. Одновременно устанавливается в состояние 1 флаг захвата входа ICF1.
Поскольку регистр захвата входа является 16-разрядным, то для обеспечения одновременного чтения старшего и младшего байтов данных регистра ICR1 используется регистр временного хранения TEMP. При считывании CPU данных младшего байта содержимое ICR1L пересылается в CPU, а содержимое старшего байта ICR1H размещается в регистре TEMP, чтение старшего байта заключается в переносе в CPU содержимого регистра временного хранения TEMP. Следовательно, при чтении всего 16-разрядного регистра операцию чтения необходимо начинать с младшего байта ICR1L. Регистр TEMP используется также при обращении к TCNT1, OCR1A и OCR1B. Если основная программа и подпрограммы обработки прерываний, используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы.
Таймер/счетчик1 в ШИМ режиме
При установленном ШИМ режиме таймер/счетчик1 и регистры сравнения выхода A и B (OCR1A и OCR1B), образуют сдвоенный 8, 9 или 10-разрядный автономный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходами на выводы PD5(OC1A) и OC1B. Таймер/счетчик1 работает как реверсивный счетчик, считающий от $0000 до TOP (см. таблицу 18), при котором направление счета меняется и отсчет ведется до нуля, после чего цикл повторяется. Когда состояние счетчика совпадет с содержимым 10 младших битов OCR1A или OCR1B, выводы PD5(OC1A)/OC1B устанавливаются или очищаются, в соответствии с установками битов COM1A1/ COM1A0 или COM1B1/COM1B0 в регистре управления таймером/счетчиком1 TCCR1A. Подробности см. в таблице 19.
Таблица 18. TOP значения таймера и частота ШИМ
Разрешение ШИМ | TOP значения таймера | Частота ШИМ |
8-разрядное | $00FF (255) | f TC1 /510 |
9-разрядное | $01FF (511) | f TC1 /1022 |
10-разрядное | $03FF (1023) | f TC1 /2046 |
Таблица 19. Выбор режима сравнения1 в ШИМ режиме
COM1X1 | COM1X0 | Выходной сигнал на OCX1 |
Не подключен | ||
Не подключен | ||
Очищается по совпадению при счете вверх. Устанавливается по совпадению при счете вниз (не инвертированный ШИМ) | ||
Очищается по совпадению при счете вниз. Устанавливается по совпадению при счете вверх (инвертированный ШИМ) |
Примечание: X = A или B.
Отметим, что в ШИМ режиме младшие 10 разрядов OCR1A/OCR1B, при записи, пересылаются в ячейки временного хранения. Они фиксируются по достижении таймером/счетчиком1 значения TOP. Таким способом обеспечивается защита от появления уширенных ШИМ импульсов (ложных выбросов - glitches) при несинхронной записи OCR1A/OCR1B. См. пример на рис. 36.
Рис. 36. Эффект несинхронной фиксации OCR1
При чтении OCR1A или OCR1B, в промежутке времени между записью и фиксацией, будет считано содержимое ячейки временного хранения. Это означает, что более раннее записанное значение всегда будет считываться из OCR1A/B.
Когда OCR1 содержит $0000 или TOP, вывод OC1A/OC1B остается на низком уровне, соответственно установкам COM1A1/COM1A0 или COM1B1/COM1B0. Это отображено в таблице 20.
Таблица 20. Состояния выходов в ШИМ режиме при OCR1X = $0000 или TOP
COM1X1 | COM1X0 | OCR1X | Состояние выводов OC1X |
$0000 | L | ||
TOP | H | ||
$0000 | H | ||
TOP | L |
Примечание: X = A или B.
В ШИМ режиме флаг переполнения таймера1 (TOV1) устанавливается при смене направления счета по достижении значения $0000. Прерывание по переполнению таймера1 работает так же как и в обычном режиме таймера/счетчика, т.е. оно выполняется когда TOV1 установлен и разрешены прерывания по переполнению таймера1 и глобальные прерывания. Это относится и к флагам сравнения выхода таймера1 и прерываниям.