Портирование приложений с семейства PIC18 на PIC24F
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 |
Настройка предделителя таймера |
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:
- установить предделитель таймера, записав необходимое значение в биты T1CKPS;
- установить или сбросить бит TMR1CS, выбрав, таким образом, источник тактирования;
- сбросить или установить бит !T1SYNC, выбрав, таким образом, синхронный или асинхронный режим работы таймера соответственно;
- загрузить требуемое значение в регистр периода таймера PR1;
- если необходимо использовать прерывание – установить соответствующий бит разрешения T1IE. Установить приоритет прерывания (бит T1IP);
- разрешить работу таймера, установив бит TMR1ON.
Семейство PIC24F:
- установить предделитель таймера, записав необходимое значение в биты TCKPS1:TCKPS0;
- выбрать источник тактирования с помощью бита TCS. Если необходимо, установить бит TGATE, переводящий таймер в режим работы с внешним разрешением счета;
- установить или сбросить бит TSYNC, выбрав, таким образом, синхронный или асинхронный режим работы таймера соответственно;
- загрузить требуемое значение в регистр периода таймера PR1;
- если необходимо использовать прерывание – установить соответствующий бит T1IE. Выбрать приоритет прерывания с помощью битов T1IP2:T1IP0;
- разрешить работу таймера, установив бит T1ON.
2.2.4. Рекомендации по портированию приложения
- Следует помнить, что при работе от системного тактового генератора частота тактирования таймеров в семействе PIC18 составляет FOSC/4, а в семействе PIC24F – FOSC/2, где FOSC – тактовая частота ядра.
- Возможные значения коэффициента предделителя для всех таймеров семейства PIC24F одинаковы, в отличие от таймеров PIC18. Однако в PIC24F два таймера могут объединяться в один 32-битный. Это позволяет увеличить разрешение и время счета.
- Таймеры семейства PIC24F не имеют постделителей, однако все таймеры могут генерировать прерывание по совпадению значения с регистром периода. Если в исходном приложении на PIC18 используется таймер с постделителем, необходимо пересчитать период таймера при портировании приложения на архитектуру PIC24F.
- При чтении одного байта (младшего или старшего) 16-битного таймера результатом операции будет 0. Обращаться к регистру таймера следует только как к 16-биному слову.