Портирование приложений с PIC18 на PIC24F. 1. 3. Память программ.

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

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

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

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

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

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

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

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

Управляющий регистр или бит

PIC18

PIC24F

Регистр управления

EECON1

NVMCON

Защитный регистр

EECON2

NVMKEY

Регистр данных EEPROM

EEPGD

-

Бит выбора EEPROM или Flash

CFGS

-

Бит разрешения операции стирания

FREE

ERASE

Основные биты управления записью (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 память. Данные могут быть считаны и модифицированы с помощью инструкций табличного чтения и записи, или с помощью отображения памяти программ в память данных.