Нужна помощь в понимании карты памяти PIC

9

Некоторый фон. Я использую MPLABx с PicKit2 для программирования различных типов фотографий. На данный момент это 16F887. Я стараюсь придерживаться цепочки инструментов Hi-Tech PICC Lite, но я все больше и больше недоволен тем, как собираются некоторые вещи. Операции, которые должны быть относительно быстрыми (учитывая цикл инструкций 500 нс при 8 МГц), требуют до 20 мсек. Поэтому я начал вставлять свой собственный код ASM, чтобы справиться с ним.

Однако у меня возникают трудности с пониманием карты памяти, представленной в таблице на стр. 20.

Память программы начинается в 0005h. Однако на странице 23 показаны адреса файлов регистров специального назначения, например, порта А. Адрес порта A отображается как «05h».

Я запутался, как различать ячейку памяти 0005h и регистр специального назначения, расположенный в 05h. Как я могу ссылаться на регистры специального назначения?

Я выполнил довольно обширное программирование на ассемблере для старых чипов HC11, но это мое первое занятие по кодированию ассемблера PIC. Любая помощь здесь будет оценена.

Майкл
источник

Ответы:

8

PIC использует так называемую «Гарвардскую архитектуру», что означает, что он имеет отдельные адресные пространства для инструкций и данных.

Относится ли адрес к регистру или инструкции, зависит от контекста, в котором он используется.

Диаграммы в разделе 2.1 «Организация памяти программ» относятся к памяти программ или адресному пространству команд. Диаграммы в разделе 2.2 «Организация памяти данных» касаются регистров и регистров специальных функций или адресного пространства памяти данных.

Дэйв Твид
источник
Поэтому, если бы я сказал «MOVWF 0x0005», PIC знал бы, что я ссылаюсь на адрес 0x0005 в памяти данных, а не на пространство программы?
Майкл
@ Майкл: Да. Относится ли адрес в инструкции к программе или памяти данных, зависит от инструкции. Это описано для каждого кода операции. По сути, если он имеет дело с данными, такими как MOVWF, он получит доступ к памяти данных. Если он имеет дело с адресами программ, такими как GOTO, то он получит доступ к памяти программ.
Олин Латроп
Спасибо. Я полагаю, что HC11, в котором я работал, был аркой фон Неймана. У меня часто возникали проблемы с переписыванием кода инструкции, когда я только учился. Еще раз спасибо
Майкл
3

Что сказал Дейв, но я также хочу отметить, что память программы начинается с 0, а не с 5. При перезагрузке процессор устанавливает ПК на 0 и начинает работать. В случае прерывания процессор эффективно вызывает вызов в местоположение 4 и отключает бит разрешения глобального прерывания. Расположение в памяти программ 5 не является особенным, кроме того, что это будет вторая инструкция подпрограммы прерывания, если у вас есть подпрограмма прерывания.

Олин Латроп
источник
Да, это понятно. Я имел в виду 5 это первый общий адрес инструкции.
Майкл
@ Майкл: Нет, это тоже не так. Как я уже сказал, в расположении памяти программ нет ничего особенного. Адрес первой обобщенной инструкции метки для этого не имеет смысла. Первый адрес инструкции равен 0, а 4 тоже немного особенный из-за прерываний. Остальные на самом деле не особенные, и «универсальный» не имеет смысла в этом контексте.
Олин Латроп
Хорошо, как насчет первого не сбрасываемого, не прерываемого векторного адреса? То, что я говорю, я понимаю, что ты пытаешься сказать.
Майкл