Forum: Mikrocontroller und Digitale Elektronik 64kByte Adressraum nutzen


von Bernd (Gast)


Lesenswert?

Hallo...
Ich versuche ein externes Ram zu adressieren, allerdings habe ich das
Problem beim Atmega 128, dass ich ausschließlich 60kByte ansprechen
kann. Die fehlenden 4kByte werden intern verarbeitet.
Allerdings brauche ich den vollen Adressraum. Da bleibt mir leider
nichts anderes übrig, als über weitere Pins den Adressraum
aufzuwerten.
Wie würdet Ihr dieses Problem lösen ?
Mfg Bernd

von Magnus Müller (Magnetus) (Gast)


Lesenswert?

Gab es da nicht eine APP-Note von Atmel...?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

zwei mal 32k, die oberste Adresse A15 auf einen eigenen Portpin legen

von Magnus Müller (Magnetus) (Gast)


Lesenswert?

Unsinn... Der ganze Spaß steht sogar im Datenblatt. Dazu benötigt man
noch nicht mal zusätzliche Hardware - und nen zusätzlichen Pin muss man
auch nicht opfern.

Seite 33: "Using all Locations of External Memory Smaller than 64
KB"
Seite 35: "Using all 64KB Locations of External Memory"

Gruß,
Magnetus

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

naja ,viel einfacher ist es auch nicht, läuft doch auf Bank-switching
hinaus, nur mit internen "XMM"-Bits statt externen zusätzlichen
Adressbits.
 Ich kannte nur die Möglichkeiten des AT90S8515, der hat noch keine
"XMM"

von Bernd (Gast)


Lesenswert?

@Magnus I
Ich brauche die internen 4Kbyte....von daher kann ich deinen Vorschlag
nicht umsetzen!
Danke für deinen Beitrag..

Nee richtig gute Lösung fällt mir nicht ein....
Ich wäre aber für weitere Vorschlage dankbar !!

von Hagen R. (hagen)


Lesenswert?

"@Magnus I
Ich brauche die internen 4Kbyte....von daher kann ich deinen Vorschlag
nicht umsetzen!
Danke für deinen Beitrag.."

Ah, also hast du die Datenblätter immer noch nicht richtig gelesen,
schade.

Gruß hagen

von Bernd (Gast)


Lesenswert?

@Hagen
Was habe ich denn überlesen?
Wahrscheinlich habe ich mich nur Falsch ausgedrückt !

von Magnus Müller (Magnetus) (Gast)


Lesenswert?

@Bernd:

Du kannst immer auf das interne SRAM mit den üblichen Adressen
zugreifen.

Gruß,
Magnetus

von Hagen R. (hagen)


Lesenswert?

Der Hinweis von Magnus ins Datenblatt beschreibt wie du die unteren 4Kb
externen SRAM der durch das interne Registerfile + SRAM überdeckt wird
(das nennt man Shadow-RAM), ohne zusätzliche Hardware nur über die
Konfiguartion des XMEM Interfaces des AVRs, so in der Addresse
verschieben kannst das du darauf zugreifen kannst. Man verschiebt also
die ersten 4Kb des ext. SRAMs in der Addresse, so das du zb. über
Speicherzugriffe an Adresse >= 0x8000 auf diese 4 Kb zugreifen kannst.
Das steht im Datenblatt.

Gruß Hagen

von Hagen R. (hagen)


Lesenswert?

Dabei wird einfach die Addressleitung A15 manuell auf 0 gesetzt. Im
Programm auf dem AVR wird nun beim Zugriff auf Addressen >= 0x8000 also
A15 denoch immer 0 bleiben und somit die kompletten unteren 32Kb von
Addresse 0x0000 bis 0x7FFF zweimal in den Addressbereich des AVRs
eingeblendet. Nämlich 0x0000 bis 0x7FFF und 0x8000 bis 0xFFFF
addressieren dann den ext. SRAM Addressbereich 0x0000 bis 0x7FFF. Da
mit Speicherzugriffen auf die Addressen 0x0000 bis 0x3FFF immer der
interne SRAM angesprochen wird kannst du nun über die Addresse 0x8000
bis 0xBFFF auf deinen Shadow SRAM zugreifen.

Du hast also AVR einen 64Kb SRAM angeschlossen der logischerweise die
Addressleitungen A0 bis A15 benötigt. Damit der AVR nun weis wie groß
der SRAM ist musst du ihm dieses über die XMEM Register auch sagen.
Abhängig voin dieser Konfiguration wird der AVR nun die
Addressleitungen A8 bis A15 ansteuern. Sagst du ihm das du nur 32Kb
dran hast so wird das XMEM Interface auch nur A8 bis A14 ansteuern und
der Pin des Addressports für A15 kann manuell für andere Dinge benutzt
werden. In deinem Falle konfigurierst du das XMEM einfach so als wären
nur 32Kb dran und der A15 Pin wird immer auf LOW gezogen. Wenn du dann
im Program auf Addresse 0x8000 zugreifst (also A15 eigentlich HIGH) so
greifst du in Wahrheit auf die Addresse 0x0000 im ext. SRAM zu.

Gruß Hagen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.