Потрібна допомога в розумінні карти пам'яті PIC


9

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

Однак у мене виникають труднощі з розумінням карти пам’яті, наданої у таблиці даних на сторінці 20.

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

Мене бентежить, як розрізняти місце пам'яті 0005h та реєстр спеціального призначення, розташований о 05h. Як посилатися на регістри спеціального призначення?

Я зробив досить масштабне програмування асемблера для старих мікросхем HC11, але це моє перше зайняття кодуванням PIC asm. Будь-яка допомога тут буде вдячна.

Відповіді:


8

PIC використовує те, що називається "Гарвардська архітектура", а це означає, що він має окремі адресні простори для інструкцій та даних.

Будь адреса посилається на реєстр чи інструкцію, залежить від контексту, в якому вона використовується.

Діаграми в розділі 2.1 "Організація пам'яті програми" стосуються пам'яті програми або адресного простору інструкцій. Діаграми в розділі 2.2 "Організація пам'яті даних" - це регістри та регістри спеціальних функцій або адресний простір пам'яті даних.


Отже, якби я сказав "MOVWF 0x0005", PIC буде знати, що я посилаюсь на адресу 0x0005 в пам'яті даних, а не на програмний простір?
Майкл

@Michael: Так. Будь-яка адреса в інструкції стосується програми або пам'яті даних, залежить від інструкції. Це описано для кожного коду. В основному, якщо він має справу з даними, такими як MOVWF, то він отримає доступ до пам'яті даних. Якщо він має справу з адресами програм, як-от GOTO, він отримає доступ до пам'яті програми.
Олін Латроп

Дякую. Я здогадуюсь, що HC11, в якому я раніше робив асемблер, був аркою фон Неймана. У мене часто виникали питання над написанням коду інструкцій, коли я тільки вчився. Ще раз дякую вам.
Майкл

3

Що сказав Дейв, але я також хочу зазначити, що пам'ять програми починається з 0, а не 5. Після скидання процесор встановлює ПК на 0 і починає працювати. Під час переривання процесор ефективно викликає виклик до місця 4 та вимикає глобальний біт включення переривання. Місце пам’яті програми 5 не є спеціальним, окрім цього, це буде друга інструкція програми переривання, якщо у вас є програма переривання.


Так, це зрозуміло. Я мав на увазі 5 - це перша загальна адреса інструкції.
Майкл

@Michael: Ні, це теж не так. Як я вже говорив, немає нічого особливого в розташуванні пам'яті програми 5. Перша загальна адреса інструкції для етикетки не має сенсу. Перша адреса інструкції дорівнює 0, а 4 теж трохи особлива через перерви. Решта насправді не особливі, і "загальне" в цьому контексті не має сенсу.
Олін Латроп

Гаразд, як щодо його першої нерегульованої, неперервної векторної адреси? Що я кажу, я розумію, що ти намагаєшся сказати.
Майкл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.