Использование таймера/счётчика

Таймеры/счетчики (Т/С) предназначены для подсчета внешних событий, для получения программно-управляемых временных задержек и выполнения времязадающих функций микроконтроллера.

Микроконтроллеры семейства dsPIC33 имеют несколько 16-разрядных таймеров. Таймеры имеют обозначение Timer1, Timer2 Timer3 и т.д. С небольшими исключениями, все 16-битные таймеры имеют одинаковую функциональность и разделены на 3 типа:

- Таймер типа А (Timer1).

- Таймер типа В (Timer2, Timer4, Timer6, Timer8).

- Таймер типа С (Timer3, Timer5, Timer7, Timer9).

Таймеры типа В и С могут быть объединены для формирования 32-разрядного таймера.

Каждый из таймеров настраивается следующими регистрами, доступными для чтения и записи:

- TMRx – регистр счета;;

- PRx – регистр периода;

- TxCON – регистр конфигурации,

где x – номер таймера.

Также с каждым таймером ассоциированы следующие биты в регистре управления прерываниями:

- TxIE – бит разрешения прерывания (регистр IESO);

- TxF – бит статуса прерывания (регистр IFSO);

- TxIP<2:2> - биты установки приоритета прерывания (регистр IPCO).

Структурная схема модуля Timer1 приведена на рисунке 20.16.

Модуль Timer1 является 16-разрядным таймером, который может служить как счетчик для часов реального времени или работать как интервальный таймер-счетчик.

16-разрядный Timer1 имеет следующие режимы работы:

- 16-разрядный таймер;

- 16-разрядный синхронный счетчик;

- 16-разрядный асинхронный счетчик.

Эти режимы работы определяются установкой соответствующих битов в 16-разрядном регистре конфигурации T1CON.

В 16-разрядном режиме таймера, таймер инкрементируется на каждый цикл инструкций до соответствующего значения, предварительно загруженного в регистр периода PR1 (рисунок 20.16), а затем сбрасывается в «0» и продолжает считать. Если CPU входит в режим простоя IDLE, таймер может остановить приращение если бит TSIDL = 0 (бит регистра T1CON < 13 >). Если TSIDL = 1, модуль таймера может продолжать последовательность инкрементирования с завершением режима простоя CPU.

Рисунок 20.16 – Структурная схема модуля Timer1

В режиме 16-разрядного синхронного счетчика, таймер инкрементируется по нарастающему фронту внешнего тактового сигнала. Таймер считает до соответствующего значения загруженного в регистр PR1, затем сбрасывается в «0» и продолжает считать. В режиме простоя CPU модуль таймера работает в аналогичном режиме 16-разрядного таймера.

В режиме 16-разрядного асинхронного счетчика в режиме простоя CPU, таймер остановит инкрементирование, если бит TSIDL = 1.

В режиме SLEEP CPU таймер Timer1 работает если:

- модуль таймера разрешен (бит регистра T1CON < 15 > TON = 1);

- выбран внешний источник тактирования (бит регистра T1CON < 1 > TCS = 1);

- бит TSYNC регистра T1CON < 2 > переведен в логический 0, который определяет внешний источник тактирования как асинхронный.

Когда все три условие выполнены, таймер продолжает считать до состояния регистра PR1 и, после чего, сброшен состоянием 0х0000. При совпадении состояний регистров TMR1 и PR1 (рисунок 20.16) устанавливается бит T1IF в регистре управления прерываниями IFSO. В этом случае генерируется прерывание, если установлено соответствующий бит разрешения прерывания таймера.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: