Высокопроизводительное семейство PIC24F было разработано компанией
MICROCHIP с целью дополнения существующей линейки микроконтроллеров.
Предоставляя пользователю широкие вычислительные возможности и
значительно переработанные периферийные модули, семейство PIC24F
позволит увеличить функциональность разрабатываемых устройств. С другой
стороны, микроконтроллеры PIC24F разработаны таким образом, чтобы
сделать переход пользователя с существующих семейств на новое более
легким.
Данный документ представляет собой обзор различий семейств PIC18 и
PIC24F и приводит основные принципы перехода с 8-битной архитектуры
PIC18 на 16-битную PIC24F. Здесь и далее будем подразумевать переход с
одного из последних микроконтроллеров PIC18 - PIC18F8722, имеющего
практически полный набор периферийных модулей и соответствующего
принципам технологии nanoWatt на микроконтроллер PIC24FJ128GAxxx. Однако
все изложенные принципы могут быть применимы при переходе с любого
контроллера PIC18 на PIC24F.
Обзор разделен на два основных раздела. Первый раздел посвящен
различиям в архитектуре контроллеров. Будут рассмотрены общие положения,
позволяющие адаптировать код PIC18, написанный на языке высокого
уровня, для нового семейства.
Вторая часть обзора посвящена отличию периферийных модулей
семейств PIC18 и PIC24F. Приведенные положения позволят быстро перевести
рабочий аппаратно-зависимый код на новую архитектуру. Рассмотрены
только периферийные модули, присутствующие как в PIC18, так и в PIC24F.
Рекомендуем воспользоваться документацией [1] для ознакомления с периферией, отсутствующей в PIC18 (часы реального времени, параллельный порт, и т. д.)
Замечания:
1. Электрические параметры текущих версий кристаллов
PIС24F могут отличаться от приведенных в документации, доступной на
момент публикации данного документа. Это необходимо иметь в виду при
адаптации проекта под текущую версию кристалла PIC24F.
2. Данный документ является адаптированным переводом на русский язык рекомендации DS39764A "PIC18F to PIC24F Migration: An Overview",
изданной Microchip Technology Inc. При разработке новых приложений и
портировании существующих для PIC24F рекомендуется использовать
документацию на семейство PIC24F [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 |
Размер слова инструкции семейства PIС18 - 16 бит (для однословных
инструкций), размер слова инструкции PIC24F - 24 бита. Для получения
более подробной информации см. п. 1.2 "Набор инструкций".
Микроконтроллеры PIC18 и PIC24F выполняют одну инструкцию за
фиксированный интервал времени, кратный периоду тактовой частоты (и
всегда больший этого периода), обозначенный как TCY. Конвейер
выполнения как PIC18, так и PIC24 подразумевает выборку из памяти
одной инструкции с (как правило) одновременным выполнением предыдущей за
время равное 1 TCY. Отличие состоит в том, что в микроконтроллерах семейства PIC18 длительность интервала TCY
равна четырем периодам тактовой частоты (при этом инкремент счетчика
команд происходит по заднему фронту такта генератора), а в PIC24
длительность интервала TCY равна двум периодам тактовой частоты. Инкремент счетчика команд происходит по переднему фронту такта генератора (Рис. 1).
Рис. 1. Отличия конвейеров выполнения инструкций PIC18 и PIC24F
Это отличие важно с позиции кода, в котором критические части
зависят от времени выполнения инструкций. Так же следует обратить
внимание на работу с периферийными модулями, использующими в качестве
тактового интервала TCY.
Микроконтроллеры PIC18 имеют только один рабочий регистр W (WREG ),
который используется в качестве операнда большинства инструкций. Также
регистр W используется для сохранения результата выполнения большинства
инструкций.
Микроконтроллеры PIC24F имеют регистровый файл, состоящий из 16
полностью ортогональных для большинства команд рабочих регистров (W0-W15 ). Некоторые инструкции используют в качестве операнда или результата только регистр W0 , однако большинство инструкций могут работать с любым регистром W0-W15 .
Некоторые рабочие регистры PIC24F имеют специальные функции. Регистры W0-W1 используются для выполнения аппаратного деления, регистры W2 и W3 - как результат аппаратного умножения. Регистр W15 является указателем на программный стек, регистр - W14 - указателем на фрейм стека.
Микроконтроллеры PIC18 имеют только один регистр статуса выполнения
операций в АЛУ. Он содержит флаги выполнения бинарных операций, все
флаги доступны как для чтения, так и для записи.
Семейство PIC24F имеет два статус-регистра, которые содержат
флаги выполнения двоичных операций, а так же биты, управляющие работой
ядра. Регистр STATUS содержит те же флаги, что и регистр STATUS в семействе PIC18, флаг RA , индицирующий работу аппаратного цикла REPEAT , и флаги управления приоритетом ядра IPL2:IPL0 .
Кроме регистра STATUS семейство PIC24 имеет регистр CORCON . Он содержит бит IPL3 ,
позволяющий эффективно управлять разрешением периферийных прерываний, и
бит PSV, разрешающий отображение памяти программ в область памяти
данных (более подробно в п. 1.4 "Память данных").
Семейство PIC18 имеет аппаратный стек для сохранения адреса возврата
при вызове функции. Стек имеет размер 32 уровня, и только верхний
уровень может быть доступен коду пользователя. Помещение адреса и
извлечение адреса производиться только при выполнении соответствующих
инструкций. Может генерироваться сброс при переполнении и опустошении
стека.
Семейство PIC24 имеет полностью программный стек, реализуемый в памяти данных. Рабочий регистр W15 является указателем на вершину стека, рабочий регистр W14
является указателем на фрейм стека, используемый при передаче
параметров в функцию. Стек ограничивается программно (используется
регистр SPLIM ). При переполнении или опустошении стека генерируется исключение (немаскируемое прерывание).
Оба семейства PIC18 и PIC24F имеют в составе АЛУ аппаратный
умножитель. Умножитель PIC18 реализует знаковое, беззнаковое и смешанное
умножение 8 x 8 бит. Для выполнения беззнакового умножения 8 x 8 бит
требуется 1 командный такт. Для выполнения знакового или смешанного
умножения требуется большее количество командных тактов.
Умножитель PIC24 реализует знаковое, беззнаковое и смешанное
умножение 17 x 17 бит. Для выполнения умножения любого типа 16 x 16 бит
требуется 1 командный такт.
Семейство PIC18 не обеспечивает аппаратную поддержку операции деления
целых чисел. Типовая операция деления 16/16 бит и 16/8 бит с
использованием стандартной библиотеки математических функций PIC18
занимает как минимум 38 командных тактов.
Семейство PIC24F не имеет аппаратного делителя как такового.
Однако АЛУ семейства имеет аппаратную поддержку деления (инструкция DIV ). Использование инструкции DIV в сочетании с инструкцией аппаратного цикла REPEAT
позволяет производить итерационную операцию деления 32/16 бит и 16/16
бит за 19 командных тактов. При этом поддерживается знаковое,
беззнаковое, смешанное деление целых чисел и чисел с фиксированной
точкой. Следует заметить, что операция деления занимает всего два слова
программ.
Семейство PIC18 поддерживает циклический сдвиг (младший бит
перемещается в старший) влево или вправо с использование бита переноса (Carry в регистре STATUS ),
или без использования бита переноса. Поэтому алгоритмы, использующие
сдвиг на число бит большее одного можно реализовать только
последовательным вращением со сбросом бита Carry .
АЛУ семейства PIC24F содержит сдвиговый регистр, позволяющий
производить операции простого или циклического сдвига вправо или влево, с
использованием или без использования бита переноса. При этом простой
или циклический сдвиг производятся на произвольное количество бит от 1
до 15.
Набор инструкций ядра PIC24F значительно расширен по сравнению с
набором инструкций микроконтроллеров PIC18. Так как величина слова
инструкции PIC24F составляет 24 бита, увеличено как количество
инструкций, так и методов адресации и поддерживаемых типов данных
(двойное слово данных - 32 бита, слово данных - 16 бит, байт). Основные
различия в наборах инструкций PIС18 и PIC24F приведены в Таблице 2.
Таблица 2. Основные различия в наборах инструкций семейств PIC18 и PIC24F
Параметры | PIC18 | PIC24F |
Величина слова инструкции | 16 бит | 24 бита |
Количество базовых инструкций | 75 | 76 |
Поддерживаемая разрядность данных | Байт | Байт, слово, двойное слово |
Количество операндов | До двух (b = a + b) | До трех (c = a + b) |
Режимы адресаций | Прямая, косвенная (5 видов) | Прямая, косвенная (6 видов) |
Косвенная адресация | Используются регистры косвенной адресации FSR - максимум три указателя. | Как указатель используется любой регистр общего назначения - до 16 указателей. |
Адресация памяти данных | Прямая адресация - ограничено текущим банком. Вся память данных адресуется за несколько инструкций. | Прямая адресация - ограничено областью ближней памяти*. Вся память данных - косвенная адресация. |
* Near Data Space - 8 кБайт |
Набор инструкций ядра PIC24F предоставляет пользователю дополнительные возможности (Таблица 3),
увеличивающие скорость выполнения математических алгоритмов и
обеспечивающие улучшенную поддержку языков программирования высокого
уровня. Последнее связно с гибкой работой с указателями и использованием
программного стека.
Таблица 3. Некоторые инструкции семейства PIC24F, увеличивающие скорость выполнения математических алгоритмов по сравнению с PIC18
Инструкции ядра PIC24F | Описание |
DIV | Деление двух чисел, знаковое и беззнаковое, 32 бита на 16 бит и 16 бит на 16 бит |
LNK и ULNK | Фиксировать и освободить указатель стекового фрейма (W14 ) |
LSR и ASR | Двоичный и
арифметический сдвиг вправо (от 1 до 15 бит). Аргументом, определяющим
величину сдвига, может являться константа или переменная |
MUL.SS, MUL.SU, MUL.UU | Умножение (знаковое, смешанное, беззнаковое) |
PUSH и POP | Обе инструкции
имеют произвольный аргумент, что позволяет сохранять в стеке значение,
отличное от текущего значения счетчика команд |
REPEAT | Повтор следующей инструкции определенное количество раз |
SL | Сдвиг влево (от 1 до 15 бит). Аргументом, определяющим величину сдвига, может являться константа или переменная |
Однако некоторые инструкции ядра PIC18 не могут быть заменены
атомарной инструкцией ядра PIC24F. Как правило, аналогичный (но не
идентичный, вследствие различия флагов в STATUS регистре) результат можно получить, используя одну или две инструкции PIC24F. К таким инструкциям ядра PIC18 относятся:
CPFSEQ
CPFSGT
CPFSLT
MOVSF
MOVSS
INFSNZ
DCFSNZ
DECFSZ
SUBULNK
INCFSZ
TSTFSZ
PUSHL
MOVFF (все режимы, исключая перемещение с использованием косвенной адресации источника и приемника)
SWAPF (все режимы за исключением использования с WREG )
За исключением перечисленных выше, все инструкции PIC18 имеют аналоги
в наборе инструкций PIC24F. Более подробная информация приведена в
приложении А.
Кроме бит-ориентированных инструкций, инструкции ядра PIC18
поддерживают только работу с данными величиной 1 байт. Любые действия с
данными разрядностью более 8 бит требуют корректной последовательности
выполнения нескольких инструкций.
Ядро PIC24F имеет 16-битную шину данных, что определяет основной
формат операндов как 16-битное слово (2 байта). Помимо этого большинство
инструкций могут прозрачно использовать 8-битные и 32-битные операнды.
При использовании ассемблера суффикс мнемоники .b указывает, что операция производится с 8-битными данными, а суффикс .d
- что операция производится с двойным 32-битным словом. Выравнивание,
определяемое разрядностью операнда, производиться автоматически.
В набор инструкций PIC18 входят команды, поддерживающие только
унарные и бинарные операции. Унарная операция подразумевает, что
результат сохраняется непосредственно в операнд (например, инкремент
регистра WREG ). Бинарная операция позволяет производить
действия с двумя операндами (например, сложение) с последующим
сохранением результата в один из операндов.
Набор инструкций PIC24F кроме унарных и бинарных операций
поддерживает команды с тремя операндами. При этом результат операции с
двумя операндами сохраняется в третий. Операции с тремя операндами могут
выполнять большинство математических инструкций и инструкций сдвига.
Основное отличие в системах команд PIC18 и PIC24F заключается в
количестве способов адресации данных и реализации этих способов. PIC18 и
PIC24F поддерживают одни и те же методы адресаций (за исключением
отсутствия в PIC18 косвенной адресации с пре-декрементом).
Архитектура PIC18 позволяет адресовать любой байт из памяти данных.
Однако так как для прямой адресации в большинстве инструкций в качестве
операнда используется 8-битная константа, память данных PIC18 условно
разделена на 16 банков. Текущий банк определяется значением служебного
регистра BSR .
Набор инструкций PIC24F разработан таким образом, чтобы любая
команда, использующая прямую адресацию, имела доступ к первым 8 кБ
памяти данных (NDS - Near Data Space: 0x0000 - 0x1FFF ),
то есть для прямой адресации используется 13-битная константа. Это
позволяет использовать прямую адресацию регистров специального
назначения (которые все расположены в NDS). Память данных, расположенная
выше NDS (адреса, превышающие 0x1FFF ) адресуется косвенно.
В ядре PIC18 для косвенной адресации используется набор регистров
специального назначения (указателей) и набор виртуальных регистров. При
этом в три указателя FSR0, FSR1 и FSR2 может
быть загружена 12-битная константа. Для выполнения косвенной адресации в
качестве операнда используется один из виртуальных регистров. В
зависимости от того, какой из виртуальных регистров является операндом,
может быть выполнена дополнительная операция над указателем, например
инкремент или декремент. Таким образом, только три указателя и
соответствующие им виртуальные регистры могут быть использованы для
косвенной адресации.
В PIC24F в качестве указателя может использоваться любой из 16-и регистров общего назначения W0-W15 .
Ассемблер предусматривает специальный синтаксис записи косвенной
адресации, в том числе и операции над указателем (адресация со
смещением, инкремент и декремент указателя). Помимо пре-инкремента,
пре-декремента, пост-инкремента указателя возможен пре-декремент,
недоступный в архитектуре PIC18 (Таблица 4).
Следует заметить, что при использовании косвенной адресации с
изменением указателя, для байтовых инструкций указатель будет изменен на
1. Для инструкций, оперирующих со словом, указатель будет изменен на 2,
что обеспечивает корректное выравнивание указателя.
Сравнение режимов косвенной адресации и их реализации приведены в Таблице 4. В Примере 1 приведена типовая операция копирования массива для архитектур PIC18 и PIC24F.
Таблица 4. Сравнение режимов косвенной адресации семейств PIC18 и PIC24F
Косвенная адресация | Виртуальный регистр PIC18, используемый в качестве операнда | Синтаксис ассемблера PIC24F | Изменение Wn или FSR |
После байтовой инструкции | После инструкции работы со словом |
Без модификации | INDFx | [Wn] | Wn = Wn | Wn = Wn |
С пре-инкрементом | PREINCx | [++Wn] | Wn = Wn + 1 | Wn = Wn + 2 |
С пре-декрементом | - | [--Wn] | Wn = Wn - 1 | Wn = Wn - 2 |
С пост-инкрементом | POSTINCx | [Wn++] | Wn = Wn + 1 | Wn = Wn + 2 |
С пост-декрементом | POSTDECx | [Wn--] | Wn = Wn - 1 | Wn = Wn - 2 |
Со смещением | PLUSWx | [Wn + Wb] | Wn = Wn | Wn = Wn |
Пример 1. Типовая операция копирования массивов для семейств PIC18 и PIC24F
PIC18 |
LoopSetup MOVLW 0x10, LoopCount ;настроить счётчик цикла
LFSR 0, myArray0 ;настроить указатель 0
LFSR 1, myArray1 ;настроить указатель 1
CopyLoop MOVFF POSTINC0, POSTINC1 ;скопировать myArray1 в myArray0
DECFSZ LoopCount, F ;декрементировать счётчик цикла
BRA CopyLoop
|
PIC24F |
LoopSetup MOV #myArray0, W0 ;настроить указатель 0
MOV #myArray1, W1 ;настроить указатель 1
REPEAT #15 ;повторить следующую операцию 16 раз
MOV [W1++], [W0++] ;скопировать array1 в array
|
Расширенные возможности косвенной адресации в архитектуре PIC24F в
некоторых случаях могут привести к нарушению последовательности
"чтение-модификация-запись". Нарушения возникают в том случае, когда
переменная, необходимая для выполнения инструкции, выборка которой
происходит в данный момент, еще не изменена. В общем случае это
происходит тогда, когда сразу за инструкцией, изменяющей регистр общего
назначения, следует инструкция, использующая этот регистр как указатель (Таблица 5). Ядро PIC24F предусматривает такую опасность, и автоматически выполняет одну или более пустых инструкций (NOP ) до момента завершения операции изменения указателя.
Таблица 5. Правила вставки пустых командных циклов при нарушении последовательности "чтение-модификация-запись"
Метод адресации, используемый в первой инструкции | Метод адресации, используемый во второй инструкции | Количество пустых командных тактов, выполняемых ядром после первой инструкции | Пример (Wn = W2 ) |
прямая | Прямая | 0 | ADD.w W0, W1, W2 MOV.w W2, W3 |
Косвенная | Прямая | 0 | ADD.w W0, W1, [W2] MOV.w W2, W3 |
Косвенная | Косвенная | 0 | ADD.w W0, W1, [W2] MOV.w [W2], W3 |
Косвенная | Косвенная с модификацией указателя | 0 | ADD.w W0, W1, [W2] MOV.w [W2++], W3 |
Косвенная с модификацией указателя | Прямая | 0 | ADD.w W0, W1, [W2++] MOV.w W2, W3 |
Прямая | Косвенная | 1 | ADD.w W0, W1, W2 MOV.w [W2], W3 |
Прямая | Косвенная с модификацией указателя | 1 | ADD.w W0, W1, W2 MOV.w [W2++], W3 |
Косвенная | Косвенная | 1 | ADD.w W0, W1, [W2] MOV.w [W2], W3 ; W2=04h (mapped W2) |
Косвенная | Косвенная с модификацией указателя | 1 | ADD.w W0, W1, [W2] MOV.w [W2++], W3 ; W2=04h (mapped W2) |
Косвенная с модификацией указателя | Косвенная | 1 | ADD.w W0, W1, [W2++] MOV.w [W2], W3 |
Косвенная с модификацией указателя | Косвенная с модификацией указателя | 1 | ADD.w W0, W1, [W2++] MOV.w [W2++], W3 |
PIC18 и PIC24F имеют похожую схему размещения памяти программ и
служебных областей памяти во внутреннем Flash ПЗУ. Отличие заключается в
том, что размер слова инструкции PIC24F составляет 24-бита (16-бит у
PIC18), и существует возможность отображения части памяти программ в
память данных.
Адреса, по которым расположены основные блоки ПЗУ у PIC18 и
PIC24F различны, это следует учитывать при портировании приложения.
Основные различия представлены в Таблице 6.
Таблица 6. Основные различия памяти программ семейств PIC18 и PIC24F
Параметр | PIC18 | PIC24F |
Организация ПЗУ | 16 бит, байтовая адресация | 24 бита, адресация по слову |
Максимальный объем адресуемой памяти | 4 МБ | 16 МБ |
Максимальный объем памяти, доступной пользователю | 2 МБ (0xFFFFF ) | 8 МБ (0x7FFFFF ) |
Загрузочный блок | Большинство устройств | Нет |
Векторы сброса, прерываний, исключений | 0x00, 0x08, 0x18 | Диапазон 0x00 - 0x1FF |
Положение блока конфигурации | Диапазон 0x300000 - 0x30000F | Последние два блока в программной памяти |
Положение блока Device ID | 0x3FFFFE и 0x3FFFFF | 0xFF0000 и 0xFF0002 |
Память программ PIC18 организована в виде 16-битных слов, однако
может адресоваться побайтно. Это означает, что старшее и младшее слово
инструкции могут быть доступны при использовании косвенной адресации.
Память программ выровнена по младшему байту слова, при линейном
выполнении кода программный счетчик всегда увеличивается на 2.
Семейство PIC24F имеет похожую организацию. Физически память
программ представляет собой последовательность 24-битных слов, однако к
ПЗУ возможна адресация по 16-битному слову. Таким образом, инструкцию
можно представить как два 16-битных слова, а не 3 байта. В этом случае
младшее слово инструкции адресуется четным указателем, старшее -
нечетным. Физически инструкции выровнены по четному слову, программный
счетчик увеличивается на 2 в случае линейного выполнения программы.
Так как физически инструкция представляет собой 3 байта, 4-й байт слова всегда равен 0x00 . Физически он отсутствует (Рис. 2).
Рис. 2. Организация памяти программ PIC24F
Несмотря на то, что память программ адресуется 16-битным словами,
каждый байт инструкции может быть индивидуально прочитан и записан.
Инструкции TBLRD и TBLWR набора команд PIC24F
позволяют обращаться к старшему или младшему байту слова инструкции.
Заметим, что старший байт старшего слова всегда будет равен 0x00 и не может быть записан.
Максимальный объем адресуемой памяти как в PIC18, так и в PIC24F определяется разрядностью программного счетчика (PC - Program Counter). Семейство PIC18 использует 22-битный PC , что позволяет адресовать 4 МБ памяти программ, семейство PIC24F использует 24-битный PC , с помощью которого можно адресовать 16 МБ памяти программ.
Обе архитектуры имеют конфигурационное пространство (Configuration Space)
в верхней половине адресуемой памяти программ. В основном это
пространство физически не реализуется, кроме нескольких областей,
предназначенных для конфигурации микроконтроллера и идентификационного
слова Device ID. Таким образом, максимальный объем физически реализуемой
памяти составляет для семейства PIC18 - 2 МБ, для семейства PIC24F - 8
МБ. Однако микроконтроллеров с полностью реализованной памятью программ
не выпускается.
Сравнение карт памяти программ PIC18 и PIC24F приведено на Рис. 3.
Рис. 3. Сравнение карт памяти программ семейств PIC18 и PIC24F
Примечания: карты памяти приведены не в реальном масштабе.
Дополнительные области памяти, входящие в последние кристаллы семейства
PIC18FxxJ - загрузочные (boot) области, и т. п. не приведены.
В семействе PIC18 три слова программы в верхней (с меньшим адресом)
части доступной области памяти зарезервированы для аппаратных векторов
перехода. Это вектор сброса (0x00 ), вектор прерывания низкого приоритета (0x08) и вектор прерывания высокого приоритета (0x18 ).
В семействе PIC24F область, зарезервированная для аппаратных векторов значительно больше - от 0x0000 до 0x01FF . Это вектор сброса (0x0000 ), таблица векторов прерываний (0x0006 - 0x00FF ), альтернативная таблица векторов прерываний (0x0100 - 0x01FF ).
Основная и альтернативная таблица векторов прерываний идентичны и
содержат 118 векторов, из которых 8 - векторы немаскируемых аппаратных
исключений (exceptions). Альтернативная таблица векторов может использоваться, например, для реализации бутлоадера.
Архитектуры PIC18 и PIC24F имеют область конфигурации и область
идентификационного номера Device ID. Область конфигурации семейства
PIC18 расположена в конфигурационном пространстве (диапазон адресов 0x300000 - 0x30000F ).
Область конфигурации семейства PIC24F расположена в доступной области
программ (последние два слова физически реализованной памяти программ).
Большинство микроконтроллеров PIC18 имеют независимый блок памяти,
объемом от 1 тыс. до 4 тыс. слов который может использоваться для
хранения бутлоадера. Этот блок может быть защищен от чтения и табличной
записи из другой части программы индивидуальным битом конфигурации.
Семейство PIC24F не имеют такого блока, однако это не означает
невозможность использования бутлоадера для загрузки пользовательской
программы. Контроллеры PIC24F имеют только один конфигурационный бит
защиты, влияющий на всю доступную физически реализованную память.
Архитектура PIC18 поддерживает использование внешних устройств памяти
в качестве памяти программ. Это обеспечивается наличием в некоторых
микроконтроллерах модуля интерфейса с внешней памятью (EMI - External Memory Interface),
который на самом деле является частью ядра и имеет прямой доступ к шине
адреса программ. Модуль EMI обеспечивает прозрачный доступ к внешней
памяти, которая для пользователя является частью программного
пространства объемом 2 МБ. Поддерживаются различные режимы работы, в том
числе использование только внешней памяти в качестве памяти программ.
Так как модуль EMI представляет собой адресуемую параллельную шину, он
присутствует в микроконтроллерах с количеством выводов более 80.
Микроконтроллеры PIC24F не поддерживают использование внешних
микросхем памяти в качестве памяти программ. Максимальный объем ПЗУ
ограничен Flash памятью, реализованной на кристалле.
В большинство микроконтроллеров семейств PIC18 и PIC24F в качестве
памяти программ используется Flash память с возможностью
перепрограммирования. Доступны следующие основные операции с Flash
памятью у семейств PIC18 и PIC24F:
- возможность перепрограммирования в ходе выполнения программы;
- возможность внутрисхемного программирования микроконтроллера,
смонтированного на печатную плату, по последовательному интерфейсу (ICSP - In Circuit Serial Programming).
Существует возможность перепрограммирования части Flash памяти с
помощью последовательного интерфейса в ходе выполнения программы (EICSP - Enhanced In Circuit Serial Programming);
- использование блокового стирания и записи, а так же алгоритма автоматического стирания перед записью;
- начало процесса записи после заполнения буфера записи (с прерыванием выполнения программы на один или более командных тактов).
Семейства PIC18 и PIC24F используют похожий набор регистров для
работы с Flash памятью в ходе выполнения программы. Различия в названиях
регистров и управляющих битов приведены в Таблице 7.
Таблица 7. Регистры и биты, используемые для работы с Flash памятью в ходе выполнения программы
Управляющий регистр или бит | PIC18 | PIC24F |
Регистр управления | EECON1 | NVMCON |
Защитный регистр | EECON2 | NVMKEY |
Регистр данных EEPROM | EEPGD | - |
Бит выбора EEPROM или Flash | CFGS | - |
Бит разрешения операции стирания | FREE | ERASE |
Основные биты управления записью (WR, WREN, WRERR ) в обоих семействах имеют одинаковые назначения и названия.
В семействе PIC18 адресация Flash памяти производиться с помощью 22-битного указателя TBLPTR , который физически состоит из трех служебных 8-битных регистров TBLPTRL, TBLPTRH и TBLPTRU . Все инструкции табличного чтения и записи используют указатель TBLPTR
в качестве аргумента, таким образом, адресуется вся физически
реализованная Flash память или внешняя память, если используется EMI.
Однако когда старший бит указателя TBLPTR равен 1 (адресуется конфигурационное пространство), доступны только команды табличного чтения.
В семействе PIC24F для работы с памятью программ используется два регистра - 8-битный регистр указания на страницу TBLPAG (который адресует блоки по 64 кБ) и любой из 16-битных регистров общего назначения W0-W15 , адресующий слово в выбранном 64-кБ блоке. Величины двух этих регистров формируют так называемый "эффективный адрес" (Effective Address - EA). Так же как и в семействе PIC18 при обращении к конфигурационному пространству доступны только операции чтения.
Все табличные операции работы с памятью программ в архитектуре PIC18 -
байт-ориентированные. Каждый байт в памяти программ адресуется
независимо, что определяется младшим битом указателя TBLPTR .
Как уже было сказано, табличные инструкции архитектуры PIC24F
могут работать как с байтами, так и с 16-битными словами. В последнем
случае целевое слово указывается с помощью суффикса ассемблерной
мнемоники (TBLRDH/TBLRDL для чтения и TBLWTH/TBLWTL
для записи). Доступ к байту так же организуется прозрачно для
пользователя. Следует помнить, что при чтении старшего байта старшего
слова инструкции результат всегда будет нулевым (см. Рис. 2), а операция записи в старший байт старшего слова будет проигнорирована.
Микроконтроллеры PIC18 имеют побайтный доступ к памяти программ с
помощью табличных инструкций чтения. Такая же возможность есть и у
семейства PIC24F. Однако в дополнении к этому PIC24F имеет возможность
отображения части памяти программ в память данных. Это позволяет
использовать для доступа к ПЗУ стандартные инструкции доступа к ОЗУ
(только для чтения). Более подробно эта возможность будет описана в п. 1.4 "Память данных".
Большинство микроконтроллеров PIC18 имеют на кристалле
энергонезависимую EEPROM память для хранения констант, программных
настроек или записи редко меняющихся данных. Память EEPROM доступна для
чтения и записи, доступ к ней осуществляется при помощи тех же
регистров, которые используются для работы с Flash памятью программ.
Семейство PIC24F не предусматривает размещения на кристалле
EEPROM памяти. Для хранения настроек, констант рекомендуется
использовать не занятую программным кодом Flash память. Данные могут
быть считаны и модифицированы с помощью инструкций табличного чтения и
записи или с помощью отображения памяти программ в память данных.
Организация памяти данных семейства PIC24F значительно отличается от
карты памяти данных микроконтроллеров PIC18. Основные различия
представлены в Таблице 8.
Таблица 8. Различия организации памяти данных семейств PIC18 и PIC24F
Параметр | PIC18 | PIC24F |
Шина адреса памяти данных (адресуемый объем) | 12 бит (максимум 4096 байт) | 16 бит (максимум 65536 байт) |
Сегментация | Линейный доступ, банковая сегментация. Полностью линейный доступ только для некоторых инструкций | Линейный доступ без сегментации |
Области специального доступа | Access RAM (первый и последний банки) | Near Data Space (область ближней памяти - первые 8 кБ) |
Размещение регистров специального назначения | Нижняя половина последнего банка памяти | Размешены в области ближней памяти |
Стек | Аппаратный, 32 уровня, не отображается в память данных | Программный стек. Вершина стека - 0x0800 , глубина стека ограничивается программно |
Доступ к памяти | Побайтный (прямой или косвенный) | Побайтный, доступ к слову (16 бит), доступ к двойному слову (32 бита) - прямой и косвенный |
Аппаратное отображение памяти программ в память данных (PSV - Program Space visibility) | Нет | Да, в верхнюю часть области памяти данных |
Все микроконтроллеры PIC18 могут адресовать до 4 кБ ОЗУ. Теоретически
память данных линейна и может быть прозрачно доступна некоторым
инструкциям. Однако для использования большинства инструкций применяется
сегментная модель памяти данных, разделенной на банки. Это связано с
ограниченным размером машинного кода инструкции - большинство инструкций
имеют 8-битное поле адреса операнда. Таким образом, для этих инструкций
память данных делится на 16 банков по 256 байт. Для обращения к
определенному банку используется служебный регистр выбора банка BSR ,
который содержит четыре старших бита адреса операнда. Максимальный
объем памяти данных для семейства PIC18 составляет 4 кБ, на кристалле
может быть реализована вся или часть адресуемой памяти данных.
Для семейства PIC24F вся память данных может быть представлена
как линейный массив. Большинство инструкций могут адресовать первые 8 кБ
памяти данных, так как слово инструкции содержит 13 бит для прямой
адресации операнда. Остальная часть памяти данных может быть адресована
косвенно. Максимальный адресуемый объем памяти для семейства PIC24F
составляет 64 кБ, память данных может иметь объем 32 кБ. Оставшиеся 32
кБ используются для отображения части программной памяти в ОЗУ (PSV).
Сравнение карт памяти данных для семейств PIC18 и PIC24F приведено на
Рис. 4.
В микроконтроллерах PIC18 регистры специального назначения (регистры
управления ядром, периферией, и т. п.) расположены обычно в самом низу
памяти данных, как правило, по адресам с 0xF60 по 0xFFF включительно.
В микроконтроллерах PIC24F регистры специального назначения расположены в самом верху памяти данных и занимают 2 кБ (адреса с 0x0000 по 0x07FF включительно).
Определенный способ расположения сегментов памяти данных в
архитектуре PIC18 делает возможным быстрый доступ без переключения
банков к регистрам специального назначения и к данным приложения. Это
осуществляется выделением виртуального банка, который называется Access RAM,
и в который входит верхняя половина нулевого банка и нижняя половина
пятнадцатого банка (область SFR). Такая реализация доступа к памяти
позволяет всегда, вне зависимости от значения регистра BSR ,
получать быстрый доступ к регистрам SFR. Для доступа к банку Access RAM
используется специальный синтаксис ассемблера, область доступа (память
данных или Access RAM) задается в машинном коде инструкции.
В микроконтроллерах семейства PIC24F верхняя часть памяти данных объемом 8 кБ (0x0000 - 0x1FFF ) называется Near Data Space
("ближнее пространство данных"). Доступ к этому блоку данных (в который
входят и регистры SFR) может осуществляться с помощью прямой адресации
любой инструкцией (если конечно инструкция имеет возможность прямой
адресации операндов).
Архитектура PIC18 подразумевает доступ к памяти программ с помощью инструкций табличного чтения TBLRD .
Архитектура PIC24F так же имеет инструкции табличного чтения,
однако кроме этого возможно прямое отображение памяти программ в область
памяти данных (PSV - Program Space Visibility). Когда
используется данная опция, сегмент памяти программ объемом 32 кБ может
быть отображен в физически не реализуемый сегмент памяти данных. В этом
случае возможен прозрачный доступ к ПЗУ как к ОЗУ (но только на чтение).
Регистр PSVPAG определяет часть памяти программ, отображаемую в ОЗУ, а бит PSV (CORCON<2> ) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.
Рис. 4. Сравнение карт памяти данных семейств PIC18 и PIC24F
Как было отмечено в пункте 1.1 "Ядро ЦПУ", микроконтроллеры
PIC18 имеют аппаратный стек для сохранения адреса возврата, который не
отображен в память данных и имеет глубину 32 уровня.
В архитектуре PIC24F используется программный стек в области данных. Область стека начинается с адреса 0x800 сразу после области SFR. Стек растет вниз, в качестве указателя стека используется регистр W15 . Размер стека ограничивается программно значением регистра SPLIM . При переполнении стека возникает аппаратное исключение (немаскируемое прерывание).
Как было отмечено в пункте 1.2 "Набор инструкций",
микроконтроллеры PIC18 имеют атомарные инструкции только для работы с
байтами. Микроконтроллеры PIC24 имеют атомарные инструкции как для
работы с байтами, так и для работы со словами (16 бит) и двойными
словами (32 бита).
© PIClist-RUS (piclist.ru), 2007 г.
|