Каталог статей

Главная » Статьи » Мои статьи

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

Введение

Высокопроизводительное семейство 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].

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

1.1. Ядро ЦПУ

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

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

ПараметрыPIC18PIC24H
Размер слова инструкции16 бит24 бита
Частота выполнения инструкций*FCY = FOSC/4FCY = 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).

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

Рис. 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.

1.2. Набор инструкций

Набор инструкций ядра PIC24F значительно расширен по сравнению с набором инструкций микроконтроллеров PIC18. Так как величина слова инструкции PIC24F составляет 24 бита, увеличено как количество инструкций, так и методов адресации и поддерживаемых типов данных (двойное слово данных - 32 бита, слово данных - 16 бит, байт). Основные различия в наборах инструкций PIС18 и PIC24F приведены в Таблице 2.

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

ПараметрыPIC18PIC24F
Величина слова инструкции16 бит24 бита
Количество базовых инструкций7576
Поддерживаемая разрядность данныхБайтБайт, слово, двойное слово
Количество операндовДо двух (b = a + b)До трех (c = a + b)
Режимы адресацийПрямая, косвенная (5 видов)Прямая, косвенная (6 видов)
Косвенная адресацияИспользуются регистры косвенной адресации FSR - максимум три указателя.Как указатель используется любой регистр общего назначения - до 16 указателей.
Адресация памяти данныхПрямая адресация - ограничено текущим банком. Вся память данных адресуется за несколько инструкций.Прямая адресация - ограничено областью ближней памяти*. Вся память данных - косвенная адресация.

* Near Data Space - 8 кБайт
1.2.1. Изменение набора инструкций PIC24F по сравнению с PIC18

Набор инструкций ядра 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. Более подробная информация приведена в приложении А.

1.2.2. Поддерживаемые типы данных

Кроме бит-ориентированных инструкций, инструкции ядра PIC18 поддерживают только работу с данными величиной 1 байт. Любые действия с данными разрядностью более 8 бит требуют корректной последовательности выполнения нескольких инструкций.

Ядро PIC24F имеет 16-битную шину данных, что определяет основной формат операндов как 16-битное слово (2 байта). Помимо этого большинство инструкций могут прозрачно использовать 8-битные и 32-битные операнды. При использовании ассемблера суффикс мнемоники .b указывает, что операция производится с 8-битными данными, а суффикс .d - что операция производится с двойным 32-битным словом. Выравнивание, определяемое разрядностью операнда, производиться автоматически.

1.2.3. Операнды

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

Набор инструкций PIC24F кроме унарных и бинарных операций поддерживает команды с тремя операндами. При этом результат операции с двумя операндами сохраняется в третий. Операции с тремя операндами могут выполнять большинство математических инструкций и инструкций сдвига.

1.2.4. Режимы адресации

Основное отличие в системах команд PIC18 и PIC24F заключается в количестве способов адресации данных и реализации этих способов. PIC18 и PIC24F поддерживают одни и те же методы адресаций (за исключением отсутствия в PIC18 косвенной адресации с пре-декрементом).

1.2.4.1. Прямая адресация

Архитектура PIC18 позволяет адресовать любой байт из памяти данных. Однако так как для прямой адресации в большинстве инструкций в качестве операнда используется 8-битная константа, память данных PIC18 условно разделена на 16 банков. Текущий банк определяется значением служебного регистра BSR.

Набор инструкций PIC24F разработан таким образом, чтобы любая команда, использующая прямую адресацию, имела доступ к первым 8 кБ памяти данных (NDS - Near Data Space: 0x0000 - 0x1FFF), то есть для прямой адресации используется 13-битная константа. Это позволяет использовать прямую адресацию регистров специального назначения (которые все расположены в NDS). Память данных, расположенная выше NDS (адреса, превышающие 0x1FFF) адресуется косвенно.

1.2.4.2. Косвенная адресация

В ядре 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 = WnWn = Wn
С пре-инкрементомPREINCx[++Wn]Wn = Wn + 1Wn = Wn + 2
С пре-декрементом-[--Wn]Wn = Wn - 1Wn = Wn - 2
С пост-инкрементомPOSTINCx[Wn++]Wn = Wn + 1Wn = Wn + 2
С пост-декрементомPOSTDECx[Wn--]Wn = Wn - 1Wn = Wn - 2
Со смещениемPLUSWx[Wn + Wb]Wn = WnWn = 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
1.2.4.3. Нарушение последовательности "чтение-модификация-запись"

Расширенные возможности косвенной адресации в архитектуре PIC24F в некоторых случаях могут привести к нарушению последовательности "чтение-модификация-запись". Нарушения возникают в том случае, когда переменная, необходимая для выполнения инструкции, выборка которой происходит в данный момент, еще не изменена. В общем случае это происходит тогда, когда сразу за инструкцией, изменяющей регистр общего назначения, следует инструкция, использующая этот регистр как указатель (Таблица 5). Ядро PIC24F предусматривает такую опасность, и автоматически выполняет одну или более пустых инструкций (NOP) до момента завершения операции изменения указателя.

Таблица 5. Правила вставки пустых командных циклов при нарушении последовательности "чтение-модификация-запись"

Метод адресации, используемый в первой инструкцииМетод адресации, используемый во второй инструкцииКоличество пустых командных тактов, выполняемых ядром после первой инструкцииПример (Wn = W2)
прямаяПрямая0ADD.w W0, W1, W2
MOV.w W2, W3
КосвеннаяПрямая0ADD.w W0, W1, [W2]
MOV.w W2, W3
КосвеннаяКосвенная0ADD.w W0, W1, [W2]
MOV.w [W2], W3
КосвеннаяКосвенная с модификацией указателя0ADD.w W0, W1, [W2]
MOV.w [W2++], W3
Косвенная с модификацией указателяПрямая0ADD.w W0, W1, [W2++]
MOV.w W2, W3
ПрямаяКосвенная1ADD.w W0, W1, W2
MOV.w [W2], W3
ПрямаяКосвенная с модификацией указателя1ADD.w W0, W1, W2
MOV.w [W2++], W3
КосвеннаяКосвенная1ADD.w W0, W1, [W2]
MOV.w [W2], W3
; W2=04h (mapped W2)
Косвенная Косвенная с модификацией указателя1ADD.w W0, W1, [W2]
MOV.w [W2++], W3
; W2=04h (mapped W2)
Косвенная с модификацией указателяКосвенная1ADD.w W0, W1, [W2++]
MOV.w [W2], W3
Косвенная с модификацией указателяКосвенная с модификацией указателя1ADD.w W0, W1, [W2++]
MOV.w [W2++], W3

1.3. Память программ

PIC18 и PIC24F имеют похожую схему размещения памяти программ и служебных областей памяти во внутреннем Flash ПЗУ. Отличие заключается в том, что размер слова инструкции PIC24F составляет 24-бита (16-бит у PIC18), и существует возможность отображения части памяти программ в память данных.

Адреса, по которым расположены основные блоки ПЗУ у PIC18 и PIC24F различны, это следует учитывать при портировании приложения. Основные различия представлены в Таблице 6.

Таблица 6. Основные различия памяти программ семейств PIC18 и PIC24F

ПараметрPIC18PIC24F
Организация ПЗУ16 бит, байтовая адресация24 бита, адресация по слову
Максимальный объем адресуемой памяти4 МБ16 МБ
Максимальный объем памяти, доступной пользователю2 МБ (0xFFFFF)8 МБ (0x7FFFFF)
Загрузочный блокБольшинство устройствНет
Векторы сброса, прерываний, исключений0x00, 0x08, 0x18Диапазон 0x00 - 0x1FF
Положение блока конфигурацииДиапазон 0x300000 - 0x30000FПоследние два блока в программной памяти
Положение блока Device ID0x3FFFFE и 0x3FFFFF0xFF0000 и 0xFF0002
1.3.1. Организация памяти программ

Память программ PIC18 организована в виде 16-битных слов, однако может адресоваться побайтно. Это означает, что старшее и младшее слово инструкции могут быть доступны при использовании косвенной адресации. Память программ выровнена по младшему байту слова, при линейном выполнении кода программный счетчик всегда увеличивается на 2.

Семейство PIC24F имеет похожую организацию. Физически память программ представляет собой последовательность 24-битных слов, однако к ПЗУ возможна адресация по 16-битному слову. Таким образом, инструкцию можно представить как два 16-битных слова, а не 3 байта. В этом случае младшее слово инструкции адресуется четным указателем, старшее - нечетным. Физически инструкции выровнены по четному слову, программный счетчик увеличивается на 2 в случае линейного выполнения программы.

Так как физически инструкция представляет собой 3 байта, 4-й байт слова всегда равен 0x00. Физически он отсутствует (Рис. 2).

Организация памяти программ PIC24F

Рис. 2. Организация памяти программ PIC24F

Несмотря на то, что память программ адресуется 16-битным словами, каждый байт инструкции может быть индивидуально прочитан и записан. Инструкции TBLRD и TBLWR набора команд PIC24F позволяют обращаться к старшему или младшему байту слова инструкции. Заметим, что старший байт старшего слова всегда будет равен 0x00 и не может быть записан.

1.3.2. Адресуемая и доступная память программ

Максимальный объем адресуемой памяти как в PIC18, так и в PIC24F определяется разрядностью программного счетчика (PC - Program Counter). Семейство PIC18 использует 22-битный PC, что позволяет адресовать 4 МБ памяти программ, семейство PIC24F использует 24-битный PC, с помощью которого можно адресовать 16 МБ памяти программ.

Обе архитектуры имеют конфигурационное пространство (Configuration Space) в верхней половине адресуемой памяти программ. В основном это пространство физически не реализуется, кроме нескольких областей, предназначенных для конфигурации микроконтроллера и идентификационного слова Device ID. Таким образом, максимальный объем физически реализуемой памяти составляет для семейства PIC18 - 2 МБ, для семейства PIC24F - 8 МБ. Однако микроконтроллеров с полностью реализованной памятью программ не выпускается.

Сравнение карт памяти программ PIC18 и PIC24F приведено на Рис. 3.

Сравнение карт памяти программ семейств PIC18 и PIC24F

Рис. 3. Сравнение карт памяти программ семейств PIC18 и PIC24F

Примечания: карты памяти приведены не в реальном масштабе. Дополнительные области памяти, входящие в последние кристаллы семейства PIC18FxxJ - загрузочные (boot) области, и т. п. не приведены.

1.3.3. Векторы сброса, прерываний, исключений

В семействе PIC18 три слова программы в верхней (с меньшим адресом) части доступной области памяти зарезервированы для аппаратных векторов перехода. Это вектор сброса (0x00), вектор прерывания низкого приоритета (0x08) и вектор прерывания высокого приоритета (0x18).

В семействе PIC24F область, зарезервированная для аппаратных векторов значительно больше - от 0x0000 до 0x01FF. Это вектор сброса (0x0000), таблица векторов прерываний (0x0006 - 0x00FF), альтернативная таблица векторов прерываний (0x0100 - 0x01FF). Основная и альтернативная таблица векторов прерываний идентичны и содержат 118 векторов, из которых 8 - векторы немаскируемых аппаратных исключений (exceptions). Альтернативная таблица векторов может использоваться, например, для реализации бутлоадера.

1.3.4. Область конфигурации и Device ID

Архитектуры PIC18 и PIC24F имеют область конфигурации и область идентификационного номера Device ID. Область конфигурации семейства PIC18 расположена в конфигурационном пространстве (диапазон адресов 0x300000 - 0x30000F). Область конфигурации семейства PIC24F расположена в доступной области программ (последние два слова физически реализованной памяти программ).

1.3.5. Поддержка загрузочного (boot) блока

Большинство микроконтроллеров PIC18 имеют независимый блок памяти, объемом от 1 тыс. до 4 тыс. слов который может использоваться для хранения бутлоадера. Этот блок может быть защищен от чтения и табличной записи из другой части программы индивидуальным битом конфигурации.

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

1.3.6. Использование внешней памяти программ

Архитектура PIC18 поддерживает использование внешних устройств памяти в качестве памяти программ. Это обеспечивается наличием в некоторых микроконтроллерах модуля интерфейса с внешней памятью (EMI - External Memory Interface), который на самом деле является частью ядра и имеет прямой доступ к шине адреса программ. Модуль EMI обеспечивает прозрачный доступ к внешней памяти, которая для пользователя является частью программного пространства объемом 2 МБ. Поддерживаются различные режимы работы, в том числе использование только внешней памяти в качестве памяти программ. Так как модуль EMI представляет собой адресуемую параллельную шину, он присутствует в микроконтроллерах с количеством выводов более 80.

Микроконтроллеры PIC24F не поддерживают использование внешних микросхем памяти в качестве памяти программ. Максимальный объем ПЗУ ограничен Flash памятью, реализованной на кристалле.

1.3.7. Операции с 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 памятью в ходе выполнения программы

Управляющий регистр или битPIC18PIC24F
Регистр управленияEECON1NVMCON
Защитный регистрEECON2NVMKEY
Регистр данных EEPROMEEPGD-
Бит выбора EEPROM или FlashCFGS-
Бит разрешения операции стиранияFREEERASE

Основные биты управления записью (WR, WREN, WRERR) в обоих семействах имеют одинаковые назначения и названия.

1.3.7.1. Адресация Flash памяти

В семействе 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 при обращении к конфигурационному пространству доступны только операции чтения.

1.3.7.2. Типы данных в инструкциях работы с памятью

Все табличные операции работы с памятью программ в архитектуре PIC18 - байт-ориентированные. Каждый байт в памяти программ адресуется независимо, что определяется младшим битом указателя TBLPTR.

Как уже было сказано, табличные инструкции архитектуры PIC24F могут работать как с байтами, так и с 16-битными словами. В последнем случае целевое слово указывается с помощью суффикса ассемблерной мнемоники (TBLRDH/TBLRDL для чтения и TBLWTH/TBLWTL для записи). Доступ к байту так же организуется прозрачно для пользователя. Следует помнить, что при чтении старшего байта старшего слова инструкции результат всегда будет нулевым (см. Рис. 2), а операция записи в старший байт старшего слова будет проигнорирована.

1.3.7.3. Чтение памяти программ в ходе выполнения.

Микроконтроллеры PIC18 имеют побайтный доступ к памяти программ с помощью табличных инструкций чтения. Такая же возможность есть и у семейства PIC24F. Однако в дополнении к этому PIC24F имеет возможность отображения части памяти программ в память данных. Это позволяет использовать для доступа к ПЗУ стандартные инструкции доступа к ОЗУ (только для чтения). Более подробно эта возможность будет описана в п. 1.4 "Память данных".

1.3.8. Энергонезависимая память EEPROM

Большинство микроконтроллеров PIC18 имеют на кристалле энергонезависимую EEPROM память для хранения констант, программных настроек или записи редко меняющихся данных. Память EEPROM доступна для чтения и записи, доступ к ней осуществляется при помощи тех же регистров, которые используются для работы с Flash памятью программ.

Семейство PIC24F не предусматривает размещения на кристалле EEPROM памяти. Для хранения настроек, констант рекомендуется использовать не занятую программным кодом Flash память. Данные могут быть считаны и модифицированы с помощью инструкций табличного чтения и записи или с помощью отображения памяти программ в память данных.

1.4. Память данных

Организация памяти данных семейства PIC24F значительно отличается от карты памяти данных микроконтроллеров PIC18. Основные различия представлены в Таблице 8.

Таблица 8. Различия организации памяти данных семейств PIC18 и PIC24F

ПараметрPIC18PIC24F
Шина адреса памяти данных (адресуемый объем)12 бит (максимум 4096 байт)16 бит (максимум 65536 байт)
СегментацияЛинейный доступ, банковая сегментация. Полностью линейный доступ только для некоторых инструкцийЛинейный доступ без сегментации
Области специального доступаAccess RAM (первый и последний банки)Near Data Space (область ближней памяти - первые 8 кБ)
Размещение регистров специального назначенияНижняя половина последнего банка памятиРазмешены в области ближней памяти
СтекАппаратный, 32 уровня, не отображается в память данныхПрограммный стек. Вершина стека - 0x0800, глубина стека ограничивается программно
Доступ к памятиПобайтный (прямой или косвенный)Побайтный, доступ к слову (16 бит), доступ к двойному слову (32 бита) - прямой и косвенный
Аппаратное отображение памяти программ в память данных (PSV - Program Space visibility)НетДа, в верхнюю часть области памяти данных
1.4.1. Адресуемый объем и сегментация

Все микроконтроллеры PIC18 могут адресовать до 4 кБ ОЗУ. Теоретически память данных линейна и может быть прозрачно доступна некоторым инструкциям. Однако для использования большинства инструкций применяется сегментная модель памяти данных, разделенной на банки. Это связано с ограниченным размером машинного кода инструкции - большинство инструкций имеют 8-битное поле адреса операнда. Таким образом, для этих инструкций память данных делится на 16 банков по 256 байт. Для обращения к определенному банку используется служебный регистр выбора банка BSR, который содержит четыре старших бита адреса операнда. Максимальный объем памяти данных для семейства PIC18 составляет 4 кБ, на кристалле может быть реализована вся или часть адресуемой памяти данных.

Для семейства PIC24F вся память данных может быть представлена как линейный массив. Большинство инструкций могут адресовать первые 8 кБ памяти данных, так как слово инструкции содержит 13 бит для прямой адресации операнда. Остальная часть памяти данных может быть адресована косвенно. Максимальный адресуемый объем памяти для семейства PIC24F составляет 64 кБ, память данных может иметь объем 32 кБ. Оставшиеся 32 кБ используются для отображения части программной памяти в ОЗУ (PSV). Сравнение карт памяти данных для семейств PIC18 и PIC24F приведено на Рис. 4.

1.4.2. Расположение регистров специального назначения (SFR)

В микроконтроллерах PIC18 регистры специального назначения (регистры управления ядром, периферией, и т. п.) расположены обычно в самом низу памяти данных, как правило, по адресам с 0xF60 по 0xFFF включительно.

В микроконтроллерах PIC24F регистры специального назначения расположены в самом верху памяти данных и занимают 2 кБ (адреса с 0x0000 по 0x07FF включительно).

1.4.3. Области специального доступа

Определенный способ расположения сегментов памяти данных в архитектуре PIC18 делает возможным быстрый доступ без переключения банков к регистрам специального назначения и к данным приложения. Это осуществляется выделением виртуального банка, который называется Access RAM, и в который входит верхняя половина нулевого банка и нижняя половина пятнадцатого банка (область SFR). Такая реализация доступа к памяти позволяет всегда, вне зависимости от значения регистра BSR, получать быстрый доступ к регистрам SFR. Для доступа к банку Access RAM используется специальный синтаксис ассемблера, область доступа (память данных или Access RAM) задается в машинном коде инструкции.

В микроконтроллерах семейства PIC24F верхняя часть памяти данных объемом 8 кБ (0x0000 - 0x1FFF) называется Near Data Space ("ближнее пространство данных"). Доступ к этому блоку данных (в который входят и регистры SFR) может осуществляться с помощью прямой адресации любой инструкцией (если конечно инструкция имеет возможность прямой адресации операндов).

1.4.4. Аппаратное отображение памяти программ в память данных

Архитектура PIC18 подразумевает доступ к памяти программ с помощью инструкций табличного чтения TBLRD.

Архитектура PIC24F так же имеет инструкции табличного чтения, однако кроме этого возможно прямое отображение памяти программ в область памяти данных (PSV - Program Space Visibility). Когда используется данная опция, сегмент памяти программ объемом 32 кБ может быть отображен в физически не реализуемый сегмент памяти данных. В этом случае возможен прозрачный доступ к ПЗУ как к ОЗУ (но только на чтение). Регистр PSVPAG определяет часть памяти программ, отображаемую в ОЗУ, а бит PSV (CORCON<2>) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.

Сравнение карт памяти данных семейств PIC18 и PIC24F

Рис. 4. Сравнение карт памяти данных семейств PIC18 и PIC24F

1.4.5. Программный стек

Как было отмечено в пункте 1.1 "Ядро ЦПУ", микроконтроллеры PIC18 имеют аппаратный стек для сохранения адреса возврата, который не отображен в память данных и имеет глубину 32 уровня.

В архитектуре PIC24F используется программный стек в области данных. Область стека начинается с адреса 0x800 сразу после области SFR. Стек растет вниз, в качестве указателя стека используется регистр W15. Размер стека ограничивается программно значением регистра SPLIM. При переполнении стека возникает аппаратное исключение (немаскируемое прерывание).

1.4.6. Доступ к данным

Как было отмечено в пункте 1.2 "Набор инструкций", микроконтроллеры PIC18 имеют атомарные инструкции только для работы с байтами. Микроконтроллеры PIC24 имеют атомарные инструкции как для работы с байтами, так и для работы со словами (16 бит) и двойными словами (32 бита).

© PIClist-RUS (piclist.ru), 2007 г.
Категория: Мои статьи | Добавил: MAS (25.11.2012)
Просмотров: 987 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Мои статьи [51]
Справочные данные [165]
Справочные данные
Наш опрос
Оцените мой сайт
Всего ответов: 30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Баннер
$$
Друзья сайта
  • Спортсменам
  • Огородникам СЮД(А
  • Строим вместе
  • Мир развлечений
  • Кто хочет похудеть
  • Здоровье у нас одно
  • Юмор
  • Кулинарные рецепты
  • Картинки_Заставки_Демотивоторы
  • Семья
  • Кто на мальчишник
  • Металлообработка
  • Кто на девишник
  • Блоки питания
  • Смерть соседям
  • Радиомедведь
  • Кибермедведь
  • Радиосайт
  • Деревообработка
  • Поиск