Einleitung
Programmspeicher
Datenspeicher
EEPROM
Willkommen in der Welt der linearen Adressierung. Wer als Umsteiger aus der Welt der 8-Datenbit-PICs kommt, der vergesse bitte folgende Worte:
Die 16-Bit-PICs haben eine Harvard-Archtitektur, und demzufolge getrennt Programm- und Datenspeicher.
Der Programmspeicher ist 24-Bit
breit,
und wird auch mit einem 24-Bit breiten Adressbus verwaltet. Da aber das
LSB (Bit 0) des Adressbusses immer den Wert 0 hat, können nur die
oberen 23 Bit effektiv zur Adressierung verwendet werden. Es gibt
folglich
im Programmspeicher nur gerade Adressen:
Der Adressbereich geht also von 0x000000 in Zweierschritten bis 0xFFFFFE. Das sind immerhin noch 8388608 Adressen (8 M). Hinter jeder Adresse kann sich eine 24-Bit große Speicherzelle befinden, die einen Befehl für den PIC beinhalten kann. Damit könnte der Programmspeicher insgesamt 24 MByte groß sein. Das ist deutlich mehr als nötig wäre, und so hat man von diesem Adressbereich einiges für PIC-interne Zwecke abgezweigt:
. . |
Der Datenspeicher (RAM) ist
16-Bit breit,
und wird auch mit einem 16-Bit breiten Adressbus verwaltet. Da aber das
LSB (Bit 0) des Adressbusses immer den Wert 0 hat, können nur die
oberen 15 Bit effektiv zur Adressierung verwendet werden. Es gibt
folglich
im Datenspeicher nur 32768 gerade Adressen.
Die kleinsten 16-Bit-PICs haben aber gerade einmal 512 Byte RAM. Der physisch vorhandene RAM liegt am Anfang des Adressbereichs (ab 0x0000). Hinter dem vorhandenen RAM bleibt eine Lücke im Adressraum, bis zur letzten Adresse 0xFFFE. |
Datenspeicher, mehr Infos:
EEPROM
Die meisten dsPIC30Fxxx-Typen
haben einen EEPROM, in dem Daten abgelegt werden können, die beim
Abschalten der Betriebsspannung nicht verloren gehen sollen. Der EEPROM
ist 1 kByte bis 4 kByte groß. Da er aber in 16-Bit-Worten
organisiert
ist, kann man auch von 512 Worten bis 2 kWorten sprechen.
Der EEPROM wird in den Adressbereich des Programmspeichers eingeblendet. Er liegt dort unmittelbar vor der Adresse 0x800000. Da im EEPROM Daten gespeichert werden, wäre es eigentlich logischer, ihn in den Datenspeicher-Adressbereich einzublenden, aber wir konnten oben schon sehen, dass es im Datenspeicher-Adressbereich zukünftig eng werden könnte, während der Programmspeicher-Adressbereich geradezu gigantisch groß ist.
Der PIC kann natürlich aus dem
EEPROM
Daten lesen, wenn auch etwas umständlich. Dafür wird der
Tabel-Read-Befehl
TBLRD
verwendet.
MOV
#LOW_ADDR_WORD, W0 ; Init Pointer
MOV #HIGH_ADDR_WORD,W1 MOV W1,TBLPAG TBLRDL [ W0 ], W4 ; read data EEPROM |
Danach stehen die unteren 16 Bit (nicht vergessen, der Speicher ist theoretisch 24 Bit weit, auch wenn im EEPROM-Bereich davon nur 16 Bit physisch existieren) im Zielregister (im Beispielcode in W4).
Genauso, wie man aus dem EEPROM lesen
kann,
kann man natürlich auch aus dem FLASH lesen. Schließlich
liegen
beide im Programmspeicher-Adressbereich. Dass macht es möglich, im
FLASH (der ja viel größer als der EEPROM ist) beim Brennen
des
PIC große Datenmengen zu speichern.
zurück zu 16-Bit-PICs , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt am: 08.02.2006
letzte Änderung: 08.02.2006
Quelle: Microchip