PIC18 и PIC24F имеют похожую схему размещения памяти программ и служебных областей памяти во внутреннем Flash ПЗУ. Отличие заключается в том, что размер слова инструкции PIC24F составляет 24-бита (16-бит у PIC18), и существует возможность отображения части памяти программы в память данных.
Адреса, по которым расположены основные блоки ПЗУ у 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
. Физически он отсутствует:
Несмотря на то, что память программ адресуется 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 приведено на рисунке1):
В семействе 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:
Семейства PIC18 и PIC24F используют похожий набор регистров для работы с 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-кБ блоке. Величины двух этих регистров формируют так называемый «эффективный адрес» (EA - Effective Address). Так же как и в семействе PIC18 при обращении к конфигурационному пространству доступны только операции чтения.
Все табличные операции работы с памятью программ в архитектуре PIC18 – байт-ориентированные. Каждый байт в памяти программ адресуется независимо, что определяется младшим битом указателя TBLPTR
.
Как уже было сказано, табличные инструкции архитектуры PIC24F могут работать как с байтами, так и с 16-битными словами. В последнем случае целевое слово указывается с помощью суффикса ассемблерной мнемоники (TBLRDH
/TBLRDL
для чтения и TBLWTH
/TBLWTL
для записи). Доступ к байту так же организуется прозрачно для пользователя. Следует помнить, что при чтении старшего байта старшего слова инструкции результат всегда будет нулевым, а операция записи в старший байт старшего слова будет проигнорирована.
Микроконтроллеры PIC18 имеют побайтный доступ к памяти программ с помощью табличных инструкций чтения. Такая же возможность есть и у семейства PIC24F. Однако в дополнении к этому PIC24F имеет возможность отображения части памяти программ в память данных. Это позволяет использовать для доступа к ПЗУ стандартные инструкции доступа к ОЗУ (только для чтения). Более подробно эта возможность будет описана в п. "Память данных").
Большинство микроконтроллеров PIC18 имеют на кристалле энергонезависимую EEPROM память для хранения констант, программных настроек или записи медленно меняющихся данных. Память EEPROM доступна для чтения и записи, доступ к ней осуществляется при помощи тех же регистров, которые используются для работы с Flash памятью программ.
Семейство PIC24F не предусматривает размещения на кристалле EEPROM памяти. Для хранения настроек, констант рекомендуется использовать не занятую программным кодом Flash память. Данные могут быть считаны и модифицированы с помощью инструкций табличного чтения и записи, или с помощью отображения памяти программ в память данных.