Benötigen Sie Hilfe beim Verständnis der PIC-Speicherzuordnung?

9

Einige Hintergrundinformationen. Ich benutze MPLABx mit einem PicKit2, um verschiedene Arten von Bildern zu programmieren. Im Moment ist es der 16F887. Ich versuche, mich an die Hi-Tech PICC Lite-Werkzeugkette zu halten, bin aber zunehmend unzufrieden mit der Zusammenstellung einiger Dinge. Operationen, die relativ schnell sein sollten (unter Berücksichtigung des 500-ns-Befehlszyklus bei 8 MHz), benötigen bis zu 20 us. Also habe ich angefangen, meinen eigenen ASM-Code einzufügen, um damit umzugehen.

Ich habe jedoch Schwierigkeiten, die im Datenblatt auf Seite 20 bereitgestellte Speicherzuordnung zu verstehen .

Der Programmspeicher beginnt um 0005h. Seite 23 zeigt jedoch Dateiadressen von Sonderregistern, wie z. B. Port A. Die Adresse von Port A wird als "05h" angezeigt.

Ich bin verwirrt, wie man zwischen einem Speicherort 0005h und dem Sonderregister um 05h unterscheidet. Wie verweise ich auf die Sonderregister?

Ich habe ziemlich umfangreiche Assembler-Programmierung für ältere HC11-Chips durchgeführt, aber dies ist mein erstes Projekt in der PIC-Asm-Codierung. Jede Hilfe hier wäre dankbar.

Michael
quelle

Antworten:

8

Der PIC verwendet eine sogenannte "Harvard-Architektur", dh er verfügt über separate Adressräume für Anweisungen und Daten.

Ob sich eine Adresse auf ein Register oder eine Anweisung bezieht, hängt vom Kontext ab, in dem sie verwendet wird.

Die Diagramme in Abschnitt 2.1 "Programmspeicherorganisation" beziehen sich auf den Programmspeicher oder den Anweisungsadressraum. Die Diagramme in Abschnitt 2.2 "Datenspeicherorganisation" beziehen sich auf Register und Sonderfunktionsregister oder den Datenspeicheradressraum.

Dave Tweed
quelle
Wenn ich also "MOVWF 0x0005" sagen würde, würde der PIC wissen, dass ich auf die Adresse 0x0005 im Datenspeicher verweise und nicht auf den Programmraum?
Michael
@ Michael: Ja. Ob sich die Adresse in einer Anweisung auf einen Programm- oder Datenspeicher bezieht, hängt von der Anweisung ab. Dies wird für jeden Opcode beschrieben. Wenn es sich um Daten wie MOVWF handelt, greift es grundsätzlich auf den Datenspeicher zu. Wenn es sich um Programmadressen wie GOTO handelt, greift es auf den Programmspeicher zu.
Olin Lathrop
Danke. Ich denke, der HC11, in dem ich Assembler gemacht habe, war von Neumann Arch. Ich hatte oft Probleme, meinen Anweisungscode zu überschreiben, als ich gerade lernte. Danke nochmal.
Michael
3

Was Dave gesagt hat, aber ich möchte auch darauf hinweisen, dass der Programmspeicher bei 0 und nicht bei 5 beginnt. Beim Zurücksetzen setzt der Prozessor den PC auf 0 und beginnt zu laufen. Bei einem Interrupt verursacht der Prozessor effektiv einen Aufruf an Position 4 und schaltet das globale Interrupt-Aktivierungsbit aus. Der Programmspeicherplatz 5 ist nicht speziell, außer dass dies die zweite Anweisung der Interruptroutine ist, wenn Sie eine Interruptroutine haben.

Olin Lathrop
quelle
Ja das wird verstanden. Ich meinte 5 ist die erste generische Anweisungsadresse.
Michael
@ Michael: Nein, das ist es auch nicht. Wie gesagt, an Programmspeicherplatz 5 ist nichts Besonderes. Die erste generische Anweisungsadresse des Labels macht dafür keinen Sinn. Die erste Befehlsadresse ist 0, und 4 ist aufgrund von Interrupts ebenfalls etwas Besonderes. Der Rest ist wirklich nichts Besonderes, und "generisch" macht in diesem Zusammenhang keinen Sinn.
Olin Lathrop
Ok, wie wäre es mit der ersten nicht zurückgesetzten, nicht unterbrechungsfreien Vektoradresse? Ich sage, ich verstehe, was Sie sagen wollen.
Michael