microchip

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

Архитектура ядра PIC24F

1.1. Ядро ЦПУ

Контроллеры семейства PIC24F имеют 16-разрядную шину данных, поэтому их архитектура значительно отличается от архитектуры семейства PIC18. Основные отличия заключаются в размере слова инструкции, конвейере выполнения инструкций, организации стека, наборе служебных регистров ядра, схемы прерываний, функционировании АЛУ. Основные различия приведены в табл. 1.

Таблица 1. Основные различия архитектуры семейств PIC18 и PIC24F

Параметры

PIC18

PIC24H

Размер слова инструкции

16 бит

24 бита

Частота выполнения инструкций*

FCY = FOSC/4

FCY = FOSC/2

Кол-во регистров общего назначения

1 (WREG)

16 (W0-W15)

Регистры статуса и управления ядром

1 (STATUS)

2 (STATUS и CORCON)

Стек

Аппаратный (31 уровень)

Программный

Аппаратный умножитель

8 x 8 бит

17 x 17 бит

Аппаратный делитель

нет

Аппаратная поддержка деления (с помощью инструкций DIV и REPEAT)

Инструкции сдвига, циклического сдвига

Только циклический сдвиг, влево или вправо на один бит

Сдвиг, циклический сдвиг влево и вправо на произвольное число бит (до 15-и)

Отображение памяти программ в память данных (PSV**)

нет

да

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

** PSV – Program Space Visibility

1.1.1. Размер слова инструкции.

Размер слова инструкции семейства PIС18 – 16 бит (для однословных инструкций), размер слова инструкции PIC24F – 24 бита. Для получения более подробной информации см. п.1.2 «Набор инструкций».

1.1.2. Конвейер выполнения инструкций

Микроконтроллеры PIC18 и PIC24F выполняют одну инструкцию за фиксированный интервал времени, кратный периоду тактовой частоты (и всегда больший этого периода), обозначенный как TCY. Конвейер выполнения как PIC18, так и PIC24 подразумевает выборку из памяти одной инструкции с (как правило) одновременным выполнением предыдущей за время равное 1 TCY. Отличие состоит в том, что в микроконтроллерах семейства PIC18 длительность интервала TCY равна четырем периодам тактовой частоты (при этом инкремент счетчика команд происходит по заднему фронту такта генератора), а в PIC24 длительность интервала TCY равна двум периодам тактовой частоты. Инкремент счетчика команд происходит по переднему фронту такта генератора (рис. 1).

Рис. 1. Отличия конвейеров выполнения инструкций PIC18 и PIC24F

Это отличие важно с позиции кода, в котором критические части зависят от времени выполнения инструкций. Так же следует обратить внимание на работу с периферийными модулями, использующими в качестве тактового интервала TCY.

1.1.3. Рабочие регистры

Микроконтроллеры PIC18 имеют только один рабочий регистр W (WREG), который используется в качестве операнда большинства инструкций. Также регистр W используется для сохранения результата выполнения большинства инструкций.

Микроконтроллеры PIC24F имеют регистровый файл, состоящий из 16 полностью ортогональных для большинства команд рабочих регистров (W0-W15). Некоторые инструкции используют в качестве операнда или результата только регистр W0, однако большинство инструкций могут работать с любым регистром W0-W15.

Некоторые рабочие регистры PIC24F имеют специальные функции. Регистры W0-W1 используются для выполнения аппаратного деления, регистры W2 и W3 – как результат аппаратного умножения. Регистр W15 является указателем на программный стек, регистр – W14 – указателем на фрейм стека.

1.1.4. Регистр статуса

Микроконтроллеры PIC18 имеют только один регистр статуса выполнения операций в АЛУ. Он содержит флаги выполнения бинарных операций, все флаги доступны как для чтения, так и для записи.

Семейство PIC24F имеет два статус-регистра, которые содержат флаги выполнения двоичных операций, а так же биты, управляющие работой ядра. Регистр STATUS содержит те же флаги, что и регистр STATUS в семействе PIC18, флаг RA, индицирующий работу аппаратного цикла REPEAT, и флаги управления приоритетом ядра IPL2:IPL0.

Кроме регистра STATUS семейство PIC24 имеет регистр CORCON. Он содержит бит IPL3, позволяющий эффективно управлять разрешением периферийных прерываний, и бит PSV, разрешающий отображение памяти программ в область памяти данных (более подробно в п. 1.4 «Память данных»)

1.1.5. Стек

Семейство PIC18 имеет аппаратный стек для сохранения адреса возврата при вызове функции. Стек имеет размер 32 уровня, и только верхний уровень может быть доступен коду пользователя. Помещение адреса и извлечение адреса производиться только при выполнении соответствующих инструкций. Может генерироваться сброс при переполнении и опустошении стека.

Семейство PIC24 имеет полностью программный стек, реализуемый в памяти данных. Рабочий регистр W15 является указателем на вершину стека, рабочий регистр W14 является указателем на фрейм стека, используемый при передаче параметров в функцию. Стек ограничивается программно (используется регистр SPLIM). При переполнении или опустошении стека генерируется исключение (немаскируемое прерывание).

1.1.6. Умножитель

Оба семейства PIC18 и PIC24F имеют в составе АЛУ аппаратный умножитель. Умножитель PIC18 реализует знаковое, беззнаковое и смешанное умножение 8 x 8 бит. Для выполнения беззнакового умножения 8 x 8 бит требуется 1 командный такт. Для выполнения знакового или смешанного умножения требуется большее количество командных тактов.

Умножитель PIC24 реализует знаковое, беззнаковое и смешанное умножение 17 x 17 бит. Для выполнения умножения любого типа 16 x 16 бит требуется 1 командный такт.

1.1.7. Делитель

Семейство PIC18 не обеспечивает аппаратную поддержку операции деления целых чисел. Типовая операция деления 16/16 бит и 16/8 бит с использованием стандартной библиотеки математических функций PIC18 занимает как минимум 38 командных тактов.

Семейство PIC24F не имеет аппаратного делителя как такового. Однако АЛУ семейства имеет аппаратную поддержку деления (инструкция DIV). Использование инструкции DIV в сочетании с инструкцией аппаратного цикла REPEAT позволяет производить итерационную операцию деления 32/16 бит и 16/16 бит за 19 командных тактов. При этом поддерживается знаковое, беззнаковое, смешанное деление целых чисел и чисел с фиксированной точкой. Следует заметить, что операция деления занимает всего два слова программ.

1.1.8. Операции сдвига

Семейство PIC18 поддерживает вращение (младший бит перемещается в старший) влево или вправо с использование бита переноса (Carry в регистре STATUS), или без использования бита переноса. Поэтому алгоритмы, использующие сдвиг на число бит большее одного можно реализовать только последовательным вращением со сбросом бита Carry.

АЛУ семейства PIC24F содержит сдвиговый регистр, позволяющий производить операции сдвига или вращения вправо или влево, с использованием или без использования бита переноса. При этом сдвиг или вращение производятся на произвольное количество бит от 1 до 15.

©2007-2024 microchip.com.ru