mikrocontroller.net

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


Autor: Mario (Gast)
Datum:

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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Gruß
Thorsten

Autor: Mario (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Rahul (Gast)
Datum:

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

Autor: Mario (Gast)
Datum:

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

Autor: Mario (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Mario (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Mario (Gast)
Datum:

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

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.