www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 64kByte Adressraum nutzen


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Magnetus) (Gast)
Datum:

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

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zwei mal 32k, die oberste Adresse A15 auf einen eigenen Portpin legen

Autor: Magnus Müller (Magnetus) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !!

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd (Gast)
Datum:

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

Autor: Magnus Müller (Magnetus) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernd:

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

Gruß,
Magnetus

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.