
6.1.4 Режим таймера
Принцип роботи: за кожним імпульсом, що надходить на тактовий вхід таймера/лічильника, відбувається інкремент вмісту регістра ліку TCNT1. При переході таймера/лічильника з стану «$FFFF» в стан «$0000» встановлюється прапор TOV1 регістра TIFR та генерується запит на переривання. Дозвіл переривання здійснюється установкою в «1» розряду TOIE1 регістра TIMSK (прапор загального дозволу переривань I регістра SREG також повинен бути встановлений в «1»), рис. 4.3.
Рис. 4.3.
Функція захвату (Capture)
Під даною функцією розуміють збереження у визначений час стан таймера/лічильника в регістрі захвату ICR1, рис. 4.4. Ця дія може виконуватися або за активним фронтом сигналу на виводі мікроконтролера ІСР, або за сигналом від компаратору. При цьому встановлюється прапор ICF1 регістра TIFR та генерується запит на переривання. Дозвіл переривань здійснюється встановленням в «1» розряду ТІСІЕ1 регістра TIMSK.
Рис. 4.4.
Для керування схемою захвату використовується два розряди регістра TCCR1B: ICNC1 та ICES1. Розряд ICNC1 керує схемою придушення завад. Якщо цей розряд встановлений в «0», схема придушення завад вимкнена та захват відбувається за першим активним фронтом на виводі ІСР мікроконтролера. Якщо цей розряд встановлений в «1», то при надходженні активного фронту на вивід ІСР виконуються 4 вибірки з частотою, рівною тактовій частоті мікроконтролера. Захват буде виконаний тільки в тому випадку, якщо усі вибірки мають рівень, що відповідає активному фронту сигналу (лог. «1» для зростаючого та лог. «0» для спадаючого).
Активний фронт сигналу, тобто фронт, за яким буде виконане збереження вмісту регістра ліку в регістр захвату, визначається станом розряду ICES1. Якщо цей розряд скинутий в «0», то активним є спадаючий фронт. Якщо ж цей розряд встановлений в «1», то активним є зростаючий фронт. Вихід ІСР повинен мати конфігурацію вхідного виведення, тобто розряд керування портом DDRx, що відповідає даному виведення, має бути скинутим в «0».
Фізично регістр захвату ICR1 розміщений в двох регістрах ICR1Н:ICR1L, розташованих за адресами $27:$26 та доступні лише для читання, рис. 4.5.
Рис. 4.5.
Оскільки регістр захвату є 16-розрядним, при його читанні використовується спеціальний тимчасовий регістр ТЕМР. При читанні регістра ICR1L (молодший байт) вміст цього регістра пересилається в ЦПП, а вміст регістра ICR1Н (старший байт) зберігається в регістрі ТЕМР. При читанні регістра ICR1Н повертається значення, що збережене в регістрі ТЕМР. Отже, при читанні регістра ICR1першим повинен бути прочитаний регістр ICR1L. Переривання на час звернення до регістра ICR1 мають бути забороненими.
Функція порівняння (Compare)
Дана функція зосереджена в безперервному порівнянні вмісту регістра ліку таймера/лічильника з числом, що знаходиться в регістрі порівняння. При рівності цих регістрів встановлюється прапор відповідного переривання, а також можуть виконуватися інші дії.
Якщо стан таймера/лічильника стане рівним числу, що знаходиться в регістрі порівняння, то в наступному машинному циклі встановлюється відповідний цьому регістрові прапор переривань в регістрі TIFR та генерується запит на переривання. Дозвіл переривань здійснюється встановленням в «1» відповідних прапорців регістра TIMSK.
Поряд з установкою прапора в регістрі TIFR при рівності регістра ліку та регістра порівняння можуть виконуватися й інші дії:
скид таймера/лічильника;
зміна стану визначеного виведення мікроконтролера.
Поведінка мікроконтролера, тобто виконання або невиконання вказаних дій, визначається декількома розрядами регістрів керування TCCR1А та TCCR1B.
Кожен регістр порівняння фізично розташований в двох регістрах введення/виведення РВВ, рис. 4.6.:
OCR1A – OCR1AH:OCR1AL, адреса $2B:$2A;
OCR1B – OCR1BH:OCR1BL, адреса $29:$28.
Рис.4.6.