Forum: Mikrocontroller und Digitale Elektronik Adress-/Daten - Bus


von Mario (Gast)


Lesenswert?

Hallo,

ich habe an meinen ATMEGA128 1MByte externes sRAM angeschlossen und
steuer den Speicher über den Adress-/Date - Bus bzw. weitere
Adressleitungen an.
Nun meine Frage. Kann ich den A/D - Bus über die Headerdatei mem.h vom
CodeVision programmieren oder wie programmier ich den Bus sonst am
besten?

Danke Mario

von Thorsten (Gast)


Lesenswert?

Hi,

zu deinem Problem kann ich leider nichts sagen, mich würde aber
interessieren, wie du den Bereich > 64kByte ansprichst.

Gruß
Thorsten

von Mario (Gast)


Lesenswert?

Hallo,

den ATMEGA stellt mir ja 16 Adressleitungen zu Verfügung und die
restlichen 4 Adressleitungen bilde ich mir einfach selber aus einem der
anderen Ports.

Kann mir jemand helfen in Bezug auf die Programmierung des AD-Busses?

von Sebastian (Gast)


Lesenswert?

Hallo,

also ich bin dabei mir ein Interface zu bauen. Ich habe dabei ein 512KB
SRam an nen Mega162 gebastelt. Ich habe das mit ASM gemacht und so kann
ich dir nur ein paar meiner Probleme schildern. Wenn du alle Leitungen
nutzt, gehen dir leider 4KB Ram "verloren". Dies ist der interne
Addressraum. Ich habe per Register 32Kb externen RAM eingestellt. Die
restlichen 4 Leitungen habe ich auch an nen extra Port angesteckt. Ich
wähle dann immer eine von 16 Speicherbänken aus und kann dann
reinschreiben. So kann ich auch die gesamten 4Mbit nutzen.

seb

von crazy horse (Gast)


Lesenswert?

so isses, die unteren 4k jeder 64k-Speicherbank sind futsch, sprich auf
den internen Adressraum gespiegelt.
Ansonsten brauchst du nichts weiter, als die entsprechenden
Einstellungen in MCUCR und XMCRA.

von Rahul (Gast)


Lesenswert?

Ist das immer so? Oder nur bei CodeVision?
Bin gerade zu faul zum Suchen, wüsste jetzt auch nicht, wo ich suchen
müsste,ausserdem ist es derzeit nur interessehalber.

Gruß Rahul

von Mario (Gast)


Lesenswert?

Also hast du statt 64kB nur einen Speicherbereich von 32kB eingestellt?
Dann spricht ja der AD-Bus die höchste Adressleitung nicht an bzw.
berücksichtigt diese nicht. Dann müsste man die ja ebenfalls extern
ansteuern oder?

Hat noch keiner Erfahrungen mit dem Programmieren des AD-Busses in C
(CodeVision)? Gibt es entsprechende AVR-Libray's dafür?

von Mario (Gast)


Lesenswert?

Habe gerade im Datenblatt des ATMEGA128 eine Vorschlag gefunden, wie man
den kompletten 64k Adressraum anspricht. Verstehe nur noch nicht ganz,
wie das Funktion. jemand ne Ahnung?

von Sebastian (Gast)


Lesenswert?

Hab mir grad mal das Datenblatt angeschaut aber ich habe keine Ahnung
was du meinst. Falls du dich auf Seite 25 beziehst, da steht was ganz
anderes. Im Codevision Handbuch steht auf Seite 82 oben, man kann für
mega128 maximal 64K für Variablen verwenden. Problem des ganzen ist
einfach, das die Befehle (LDS,STS,...)der Megas nur 64K Addressieren
können. Also von 0x0000 bis 0xFFFF. 0x10FF hast du die I/O Ports und
den Internen SRAM. Wenn du also an eine Adresse zwischen 0x1100 und
0xFFFF schreibst ist das der Externe SRAM. Wenn du nun alle externen
Adressleitungen belegst, werden 64k angesprochen aber du verlierst 4K.
Du müsstest also das 1MB in Fenster a 64kb zerlegen. Das macht dann
1024kb/64kb=16 Fenster. Damit verliert man aber 16*4kb(64kb). Ich habe
das Fenster kleiner gewählt, denn die 32kb passen problemlos hinter die
4kb intern.

Wenn du nun in den Ram schreibst, musst du also erst eins von den 16
Fenstern auswählen(die oberen 4 Addressleitungen), dann kannst du deine
Daten im Ram ablegen. Ist das Fenster voll, nimm das nächste und schreib
einfach wieder ab 0x1100 rein.

von Mario (Gast)


Lesenswert?

@Sebastian:

Danke erstmals für deine Erklärung, hat mir einige Sachen gut zu
verstehen gegeben.
Habe im Datenblatt nachgesehen, auf Seite 33 ist ne Erklärung wie man
die vollen 64k ansprechen kann. Man setzt dabei die XMMn Bits im
XMCRB-Register so, dass der Bus die oberen Adressleitunge nicht
verwendet und setzt sie dann selbst. Warum man dann aber mehr als 64k
adressieren kann, ist mir nicht klar? Man würde ja über den internen
RAM bzw. I/O-Bereich schreiben....

von Sebastian (Gast)


Lesenswert?

So wie ich das verstanden habe, macht der dasselbe. Nur das hier von
0x00 bis 0xff also 256kb ansprechbar sind. Die oberen Adressbit muss
man auch hier selber setzten und man muss ständig XMMn Bits verändern.

von Mario (Gast)


Lesenswert?

Eigentlich sehr aufwendig. Bei meiner Anwendung kann ich damit leben,
ein paar kB einzubüßen. Werde das also mitn AD-Bus und den 4 externen
Adressleitunge versuchen.
Wenn ich was Neues erfahre oder es funktioniert, poste ich es hier!

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.