www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 + ext. SRAM: ein paar Unklarheiten


Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen ATmega128 und werde ein externes SRAM (128k x 8) 
anschließen.

Die Hardware ist fast soweit klar bis auf eine Sache:
Kann ich das /CS vom RAM dauerhaft auf Low legen (keine weitere 
Komponente am Bus)? Oder muß ich das Signal mit irgendeinem speziellen 
Controllerpin schalten?

So, nun zur Software. Hier gibt es auch diverse Unklarheiten:

* mit dem SRE-Bit im Register MCUCR sage ich dem Controller, daß ein 
externes RAM dran hängt. Soweit noch kar.

* Nun gibt es ja aber auch die Möglichkeit Wait-states anzugeben. Hier 
würde ich am Anfang mal 2 Wait-states angeben und später mal mit dem 
Oszi schauen, wie weit man runter gehen kann.

* mit den Bits XMM2...XMM0 im Register XMCRB wähle ich aus, wie viele 
Adreßleitungen in benötige (ich brauche alle, daher alle Bits auf Null 
setzen). Soweit auch noch klar.

* Was ist den das mit dem Bus-keeper (Bit XMBK im Register XMCRB)?

* Das mit den Bits SRL2...SRL0 im Register XMCRB ist mir auch nicht ganz 
klar.

Und wie spreche ich das externe SRAM mittels C-Code mit dem GNU-Compiler 
an (ich möchte mehrere lange Strings dort ablegen)?
Was muß ich im Makefile angeben, daß ich ein externes RAM habe? Der 
Compiler muß das doch auch irgendwie wissen, daß ich externes RAM habe.

Vielleicht hat jemand zufällig ein kleines Testprogramm vom Ansprechen 
eines externen RAM´s.

Gruß
Martin

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab so ziemlich die selben Fragen. Allerdings habe ich ein 8Mbit SRAM 
und dadurch hab ich noch ein paar Portleitungen als Adressleitung im 
einsatz. Was aber rein programmtechnisch keinen all zu großen 
unterschied macht.

Greetings, Alex

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein 8Mbit SRAM kannst du aber nicht am XMEM Interface anschließen (So 
wie Martin).

Autor: Dirk Broßwick (sharandac)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin,

Der Buskeeper ist hier in der Anwendung uninteressant, er sorgt nur 
dafür das die Daten/Adressleitung auch bei Nichtbenutzung ihren zustand 
behalten.

Mit den Register kannst du die Speicherbereiche aufteilen und ihnen je 
andere waitstates zuordnen, praktisch wenn man mehre Speicherbausteine 
am Bus hat, oder z.b. ein Display  Memorymapped mit eingebunden hat, 
welches aber langsamer ist.

Um den Speicher mit dem GCC nutzen zu können brauchst du in dein 
makefile eigentlich nur bei den Linkoptions folgende Zeile hinzufügen:

LDFLAGS += 
-Wl,--section-start,.data=0x801200,--defsym=__heap_end=0x80ffff

Das sagt dem Linker das der Heap bei 0x1200 anfängt und bei 0xffff 
aufhört. Dann legt er alle Variablen bis auf die die im Stack landen im 
externen Speicher ab. Der Stack befindet sich dabei im internen RAM, und 
sollte dort auch bleiben, da das interne RAM schneller ist. Schau 
einfach mal in die Doku der avr-libc, dort ist das nochmal sehr gut 
erklärt.

Wichtig ist auch, da du 128Kx8 benutzt, das A16 auch irgendwie 
verdrahtet wird, und nicht in der Luft hängt. Speziell wenn du A16 an 
den Controller mit anschließt, sorge dafür das der entsprechende PIN 
auch ein Ausgang ist, bei einen Eingang kommt es sonst zu Fehlern da der 
PIN sonst in der Luft hängt. Ich habe Stunden damit verbracht den Fehler 
zu finden :-).

CA Dirk

Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dirk:

danke für dei Infos. In der Zwischenzeit habe ich das RAM zum laufen 
gebracht. Wenn man es richtig herum auf das Starterkit auflötet, dann 
funktioniert es auch grins. Daß es falsch herum drauf ist, habe ich 
nur dadurch rausgefunden, daß ich mir ein paar RAM-Routinen selbst 
geschrieben habe. Wenns geraucht hätte, hätte ich den Fehler Tage zuvor 
schon gefunden....

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.