Портирование приложений с PIC18 на PIC24F. 1. 4. Память данных.

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

Организация памяти данных семейства 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)

Нет

Да, в верхнюю часть области памяти данных

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>) используется для разрешения/запрещения отображения ПЗУ в ОЗУ.

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

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

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

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

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

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