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
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
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"
@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 !!
"@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
@Hagen Was habe ich denn überlesen? Wahrscheinlich habe ich mich nur Falsch ausgedrückt !
@Bernd: Du kannst immer auf das interne SRAM mit den üblichen Adressen zugreifen. Gruß, Magnetus
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.