Портирование приложений с семейства PIC18 на PIC24F. 2.2. Таймеры

2.2. Таймеры
Модули таймеров семейства PIC24F обеспечивают все функции, поддерживаемые таймерами PIC18: режимы синхронного и асинхронного счетчика, режим таймера и поддержку встроенного 32 кГц кварцевого генератора. Однако в отличие от PIC18 функции таймеров значительно расширены. Каждый 16-битный таймер PIC24F имеет соответствующий регистр периода, настраиваемый предделитель, флаг совпадения с регистром периода, и может функционировать как в режиме счетчика, так и в режиме таймера. Четыре таймера (TIMER2/TIMER3 и TIMER4/TIMER5) могут аппаратно объединяться в два 32-битных таймера.
Несмотря на то, что структура таймеров семейств PIC18 nanoWatt и PIC24F похожа, существуют некоторые различия. Как и в PIC18, все таймеры PIC24F могут тактироваться от системного тактового генератора. Но если в PIC18 только таймеры TIMER1 и TIMER3 могут работать в асинхронном счетном режиме, то в PIC24F эта функция доступна для TIMER1, TIMER2 и TIMER4. Режим работы «синхронный счетчик» доступен для всех таймеров PIC24F, так же как и соответствующий каждому таймеру регистр периода, который сбрасывает таймер и устанавливает соответствующий флаг прерывания.

Таймеры семейств PIC18 и PIC24F имеют настраиваемые предделители. Однако если в PIC18 коэффициенты деления различны для каждого таймера, в PIC24F коэффициенты деления (1:1, 1:8, 1:64 и 1:256) одинаковы для всех таймеров общего назначения.
Таймер TIMER1 семейств PIC18 и PIC24F может тактироваться от встроенного низкочастотного 32 кГц кварцевого генератора, таким образом, в системе могут быть реализованы часы реального времени. Кроме того, от этого генератора может тактироваться ядро микроконтроллера (см. п. 1.7 «Тактовый генератор» и п. 1.8 «Режимы пониженного энергопотребления»).
Следующие функции таймеров аналогичны для семейств PIC18 и PIC24:

  • таймеры могут функционировать в режиме асинхронного счета или в режиме работы от внутреннего кварцевого 32 кГц генератора (TIMER1) даже если контроллер находится в режиме SLEEP;
  • таймеры могут функционировать в режиме IDLE, если доступен источник тактирования;
  • прерывание таймера выводит контроллер из режимов SLEEP и IDLE;
  • триггер специального события (special event trigger) может использоваться для автоматического начала аналого-цифрового преобразования. Таймер, генерирующий специальное событие указан в документации на конкретный микроконтроллер.

Сравнение архитектур таймеров семейств PIC18 и PIC24F приведено в табл. 19. Сравнение основных управляющих битов для таймеров семейств PIC18 и PIC24F приведено в табл. 20.
Таблица 19. Сравнение архитектур таймеров семейств PIC18 и PIC24F


Параметры

PIC18

PIC24F

Разрядность таймера

8/16 бит

16/32 бит

Режим работы: таймер общего назначения

все таймеры

все таймеры

Режим работы: асинхронный счетчик

TIMER1, TIMER3

TIMER1, TIMER2, TIMER4

Режим работы: синхронный счетчик

TIMER0, TIMER1, TIMER3

все таймеры

Регистр периода

TIMER2 и TIMER4

все таймеры

Поддержка внутреннего 32 кГц кварцевого генератора

TIMER1

TIMER1

Вход разрешения счета

нет

все таймеры

Предделитель

все таймеры

все таймеры

Постделитель

TIMER2 и TIMER4

нет

Триггер специального события

есть

есть

Частота тактирования

FOSC*/4

FOSC*/2

 

* FOSC – тактовая частота микроконтроллера

Таблица 20. Сравнение основных управляющих битов для таймеров семейств PIC18 и PIC24F


Назначение бита

PIC18

PIC24F

Разрешение работы таймера

TMRxON

TON

Разрешение использования буферизированного чтения/записи сдвоенного таймера

RD16

T32

Флаг тактирования ядра от генератора TIMER1

T1RUN

COSC2:COSC0 = 100
(OSCCON<14:12>)

Настройка предделителя таймера

TxCKPSx

TCKPSx

Разрешение работы кварцевого генератора TIMER1

T1OSCEN

SOSCEN (OSCCON<1>)

Разрешение внешней синхронизации таймера

!TxSYNC

TSYNC

Выбор источника тактирования таймера

TMRxCS

TCS

Настройка постделителя таймера

TxOUTPSx

-

2.2.1. Новые функции таймеров в семействе PIC24F
Наиболее важное различие между таймерами семейств PIC18 и PIC24 – их разрядность. В семействе PIC24F все таймеры 16-битные и четыре из них могут быть сгруппированы в два 32-битных. В 32-битном режиме работы возможно использование защелки, как при чтении, так и при записи. Эта защелка обеспечивает корректные процедуры считывания и записи.
Все таймеры микроконтроллеров семейства PIC24F имеют вход разрешения счета. Если таймер работает в этом режиме, то его значение увеличивается, только если на входе разрешения присутствует активный уровень (в этом режиме таймер тактируется только от системного генератора). Задний фронт на входе разрешения вызывает прерывание таймера. Этот режим удобно использовать для измерения длительности импульсов.
2.2.2. Функции таймеров PIC18, отсутствующие в семействе PIC24F

  • Ни один таймер семейства PIC24F не содержит постделителя. Однако, прерывание генерируется при каждом совпадении значения таймера с регистром периода.
  • В семействе PIC18 таймеры TIMER1 и TIMER3 могут тактироваться от внутреннего кварцевого генератора таймера TIMER1. В семействе PIC24F от внутреннего кварцевого генератора 32 кГц может тактироваться только TIMER1.
  • Кварцевый генератор TIMER1 в семействе PIC24F имеет только один коэффициент усиления, в то время как в PIC18 коэффициент усиления генератора регулируется битом  LPT1OSC в конфигурационном слове.

2.2.3. Портирование типового приложения
Рассмотрим пример аналогичной конфигурации таймера TIMER1 для двух архитектур. Эта последовательность действий может быть использована с небольшими изменениями для любого таймера.
Семейство PIC18:

  1. установить предделитель таймера, записав необходимое значение в биты T1CKPS;
  2. установить или сбросить бит TMR1CS, выбрав, таким образом, источник тактирования;
  3. сбросить или установить бит !T1SYNC, выбрав, таким образом, синхронный или асинхронный режим работы таймера соответственно;
  4. загрузить требуемое значение в регистр периода таймера PR1;
  5. если необходимо использовать прерывание – установить соответствующий бит разрешения T1IE. Установить приоритет прерывания (бит T1IP);
  6. разрешить работу таймера, установив бит TMR1ON.

Семейство PIC24F:

  1. установить предделитель таймера, записав необходимое значение в биты TCKPS1:TCKPS0;
  2. выбрать источник тактирования с помощью бита TCS. Если необходимо, установить бит TGATE, переводящий таймер в режим работы с внешним разрешением счета;
  3. установить или сбросить бит TSYNC, выбрав, таким образом, синхронный или асинхронный режим работы таймера соответственно;
  4. загрузить требуемое значение в регистр периода таймера PR1;
  5. если необходимо использовать прерывание – установить соответствующий бит T1IE. Выбрать приоритет прерывания с помощью битов T1IP2:T1IP0;
  6. разрешить работу таймера, установив бит T1ON.

2.2.4. Рекомендации по портированию приложения

  • Следует помнить, что при работе от системного тактового генератора частота тактирования таймеров в семействе PIC18 составляет FOSC/4, а в семействе PIC24F – FOSC/2, где FOSC – тактовая частота ядра.
  • Возможные значения коэффициента предделителя для всех таймеров семейства PIC24F одинаковы, в отличие от таймеров PIC18. Однако в PIC24F два таймера могут объединяться в один 32-битный. Это позволяет увеличить разрешение и время счета.
  • Таймеры семейства PIC24F не имеют постделителей, однако все таймеры могут генерировать прерывание по совпадению значения с регистром периода. Если в исходном приложении на PIC18 используется таймер с постделителем, необходимо пересчитать период таймера при портировании приложения на архитектуру PIC24F.
  • При чтении одного байта (младшего или старшего) 16-битного таймера результатом операции будет 0. Обращаться к регистру таймера следует только как к 16-биному слову.

В микроконтроллерах PIC18 для реализации часов реального времени (RTC) используется TIMER1 или TIMER3 с внутренним кварцевым генератором таймера TIMER3. Аппаратный модуль RTCC (Real Time Clock and Calendar) позволяет освободить TIMER1 для других задач.