Forum: Mikrocontroller und Digitale Elektronik "Gerät" am XMEM-Interface


von Michi (Gast)


Lesenswert?

Hallo,

ich habe mir mittlerweile schon etliche Beiträge zum Thema durchgelesen, 
bin mir nicht sicher ob ich alles verstanden habe.

Ich möchte an das XMEM-Interface vom AT90CAN128 ein Gerät (z.B. ein LCD 
oder SRAM) anschliessen. Das angeschlossene Gerät hat 64kB Speicher. 
Programmiert wird mit WinAVR.

Hardware-technisch ist soweit alles klar, also mit HC573 als Latch (wie 
im AT90CAN128-Datenblatt, Seite 26).

Ich möchte nun dass alle Variablen, der Heap und der Stack im internen 
RAM bleiben und ich vom Programm aus direkt auf den kompletten externen 
Speicherbereich zugreifen kann.

Um 64kB an externem Speicher komplett adressieren zu können, gibt es ja 
den "Workaround" mit den XMMx-Bits (siehe z.B. AT90CAN128-Datenblatt, 
Seite 32).

Nun zur vorgehensweise im Programm:
- ich aktiviere SRE, also das externe Interface
- greife dann über Zeiger auf den externen Speicher zu (wie z.B. hier 
Beitrag "Re: Variablen im RAM positionieren" beschrieben)
- wenn die Adresse nun unter 0x1100 liegt, arbeite ich zusätzlich mit 
den XMMx-Bits
- die EXMEMOPTS im Makefile lasse ich wie sie sind
- die Steuerleitungen werden vom uC selbst (automatisch) "bedient"

Stimmt das so? Muss ich noch etwas beachten oder habe ich noch etwas 
vergessen?

von Michi (Gast)


Lesenswert?

push

von Tobias P. (hubertus)


Lesenswert?

Aber aber, immer mit der Ruhe.
push ist, glaube ich, nicht wirklich nett... Also schön geduldig sein.
Zu deiner Frage: Ich kenne die AT90* nicht, aber eins ist klar:

Wenn du den externen Bus aktivierst, bedient der uC die Steuerleitungen 
(RD, WR, R/W oder wie die Leitungen auch immer heissen mögen) 
automatisch. Sonst wäre es ja ein Witz, wenn du die "von Hand" setzen 
und löschen müsstest.

Auf deine anderen Fragen kann ich dir leider nicht kompetent Auskunft 
geben, aber wenn du das mit diesen Bits so aus dem Datenblatt hast, 
wirds wohl so sein. Versuchs doch einfach... Du brauchst ja kein 
externes "Gerät" angeschlossen zu haben; du kannst deinen Code ja in 
einem existierenden System ausprobieren und dann einfach mit dem Scope 
schauen, ob die RD und WR Signale korrekt geschaltet werden. So würde 
ich es jedenfalls versuchen, wenn das Datenblatt nicht weiterhilft. Wie 
man so schnön sagt: probieren geht über studieren ;)

von Michi (Gast)


Lesenswert?

Danke für deine Antwort und Entschuldigung! Ich hatte Angst, dass meine 
Frage in der Versenkung verschwindet - darum habe ich "gepusht".

Ich werde das dann morgen mal probieren wie du es beschrieben hast.

von Michi (Gast)


Lesenswert?

Also es funktioniert so wie im ersten Post beschrieben.

Ich verodere alle Adressen, die extern liegen mit 0x8000 und setze XMM0 
auf 1. A15 vom Gerät lege ich auf GND.

Damit lassen sich zwar nur 32k adressieren, das reicht mir aber im 
Moment. Die vollen 64k ließen sich dann mit etwas mehr Software-Aufwand 
adressieren.

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.