Организация памяти данных семейства PIC24F значительно отличается от карты памяти данных микроконтроллеров PIC18. Основные различия представлены в таблице:
Параметр | PIC18 | PIC24F |
---|---|---|
Шина адреса памяти данных (адресуемый объем) | 12 бит (максимум 4096 байт) | 16 бит (максимум 65536 байт) |
Сегментация | Линейный доступ, банковая сегментация. Полностью линейный доступ только для некоторых инструкций | Линейный доступ без сегментации |
Области специального доступа | Access RAM (первый и последний банки) | Near Data Space (область ближней памяти - первые 8 кБ) |
Размещение регистров специального назначения | Нижняя половина последнего банка памяти | Размешены в области ближней памяти |
Стек | Аппаратный, 32 уровня, не отображается в память данных | Программный стек. Вершина стека – 0x0800 , глубина стека ограничивается программно |
Доступ к памяти | Побайтный (прямой или косвенный) | Побайтный, доступ к слову (16 бит), доступ к двойному слову (32 бита) – прямой и косвенный |
Аппаратное отображение памяти программ в память данных (PSV 1)) | Нет | Да, в верхнюю часть области памяти данных |
Все микроконтроллеры PIC18 могут адресовать до 4 кБ ОЗУ. Теоретически, память данных линейна и может быть прозрачно доступна некоторым инструкциям. Однако для использования большинство инструкций применяется сегментная модель памяти данных, разделенной на банки. Это связано с ограниченным размером машинного кода инструкции – большинство инструкций имеют 8-битное поле адреса операнда. Таким образом, для этих инструкций память данных делится на 16 банков по 256 байт. Для обращения к определенному банку используется служебный регистр выбора банка BSR
, который содержит четыре старших бита адреса операнда. Максимальный объем памяти данных для семейства PIC18 составляет 4 кБ, на кристалле может быть реализована вся или часть адресуемой памяти данных.
Для семейства PIC24F вся память данных может быть представлена как линейный массив. Большинство инструкций могут адресовать первые 8 кБ памяти данных, так как слово инструкции содержит 13 бит для прямой адресации операнда. Остальная часть памяти данных может быть адресована косвенно. Максимальный адресуемый объем памяти для семейства PIC24F составляет 64 кБ, память данных может иметь объем 32 кБ. Оставшиеся 32 кБ используются для отображения части программной памяти в ОЗУ (PSV). Сравнение карт памяти данных для семейств PIC18 и PIC24F приведено на рисунке:
В микроконтроллерах 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>
) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.
Как было отмечено в пункте "Ядро", микроконтроллеры PIC18 имеют аппаратный стек для сохранения адреса возврата, который не отображен в память данных и имеет глубину 32 уровня.
В архитектуре PIC24F используется программный стек в области данных. Область стека начинается с адреса 0x800
сразу после области SFR. Стек растет вниз, в качестве указателя стека используется регистр W15
. Размер стека ограничивается программно значением регистра SPLIM
. При переполнении стека возникает аппаратное исключение (прерывание).
Как было отмечено в пункте "Набор инструкций", микроконтроллеры PIC18 имеют атомарные инструкции только для работы с байтами.
Микроконтроллеры PIC24 имеют атомарные инструкции как для работы с байтами, так и для работы со словами (16 бит) и двойными словами (32 бита).