Forum: Mikrocontroller und Digitale Elektronik UC3 SMC->SDRAM Datenbereich


von Denis (Gast)


Lesenswert?

Hallo

ich versuche derzeit den externen SDRAM des UC3A3 Xplained Boards in 
Betrieb zu nehmen.
Da es kein spezielles Beispiel im ASF für das UC3A3 xPlained Board gibt 
habe ich es mir aus anhand des UC3C-EK Beispiels hergeleitet.
UC3C-EK nutzt MT48LC16M16A2
UC3A3-xpl nutzt MT48LC4M16A2 (nur 8 col Adress-Bits)

Es funktioniert auch alles wie gewünscht bis auf eine Unklarheit.

im UC3C-EK wird der Datenaustausch über den folgenden Pointer realisiert

volatile unsigned long *sdram = ((void *)AVR32_EBI_CS1_0_ADDRESS);

bei unsigned long handelt es sich um 64 bits.
Da der UC3C mit 16 Datenleitungen mit dem SDRAM verbunden ist vermute 
ich dass sdram[0] einen 64bit breiten Datenzugriff auslöst (4x16).
Und somit auch ein 8Bit wert geschrieben nach sdram[0] 64Bit verbraucht.

In meiner Implementierung verwende ich den Pointer als uint16_t und 
vermute, dass der Zugriff mittels sdram[0] zwar nur einen 16Bit Wert 
liefert dafür aber wesentlich performater (1x16).

Ist es korrekt dass die Datentypgröße des Pointers hier quasi eine 
Unterteilung des SDRAM-Speichers bewirkt?

Gruß Denis

von Jim M. (turboj)


Lesenswert?

> bei unsigned long handelt es sich um 64 bits

Das wäre bei 32-Bit Architektur aber eher unüblich, üblich sind 32 Bit. 
Versuche mal rauszubekommen, was sizeof(unsinged long) für einen Wert 
ergibt. Erwartungswert ist vier.

> In meiner Implementierung verwende ich den Pointer als uint16_t [...]

Dann schau mal ins Assembler Listing, welche Instruktionen der Prozessor 
wirklich ausführt, einen 16 Bit Zugriff sollte man deutlich von 32 oder 
gar 64 unterscheiden können.

von ::: (Gast)


Lesenswert?

"unsigned long long" wäre 64 bit.... meine güte.. goooooooogle.

von Denis (Gast)


Lesenswert?

::: schrieb:
> "unsigned long long" wäre 64 bit.... meine güte.. goooooooogle.

Google.de -> unsigned long -> wikipedia - Artikel:
"In Java werden sie als byte (8), short (16), int (32) und long (64 Bit) 
bezeichnet."
Außerdem in den meisten Sprachen des .NET Frameworks usw.

Ich habe das Programmieren aber nicht auf einem ATMega8 erlernt und bin 
daher gewohnt dass Long 64Bit breit ist.

Trotzdem vielen Dank für deinen Beitrag.


Jim Meba schrieb:
> Das wäre bei 32-Bit Architektur aber eher unüblich, üblich sind 32 Bit.
> Versuche mal rauszubekommen, was sizeof(unsinged long) für einen Wert
> ergibt. Erwartungswert ist vier.

Wie erwartet ergibt sizeof(unsigned long) vier für 32Bit.
Das erklärt einiges. Vielen Dank fürs drauf aufmerksam machen.

> Dann schau mal ins Assembler Listing, welche Instruktionen der Prozessor
> wirklich ausführt, einen 16 Bit Zugriff sollte man deutlich von 32 oder
> gar 64 unterscheiden können.

Ein paar Spielereien mit der Disassembly-Ansicht und einem Blick auf die 
Register ergab folgendes

sdram32[2] = 0x0000FFFF;
mov R9, 65535
mov R8, 8
orh R8, 0xd000
st.w R8[0], R9

sdram32 stellt hier den als 32Bit definierten pointer dar.
Der einzige Unterschied zum gleichen Aufruf mit einem 16Bit Pointer ist 
der
st.w R8[0], R9 (Store Word?!?)Befehl der zu
st.h R8[0], R9 (Store Halfwor?!?)wird.

Einen Performance-Unterschied kann ich mit meinen minimalen 
Assembler-Kenntnissen nicht erkennen.
Berichtigt mich aber bitte nur mit konstruktiver Kritik statt, wie oben, 
ein Magengeschwür zu riskieren.

Was die Assembler-Ansicht allerdings beweist ist dass die Breite des 
Datentyps des Pointers eine Unterteilung des SDRAMs bewirkt.

Register R8 bekommt mit (mov R8, 8) den wert 8 für 2*32Bit/8.

Nachprüfen ließ sich das durch den Einsatz zweier Pointer mit 
unterschiedlicher Breite.

Gruß Denis

von Niklas R. (Gast)


Lesenswert?

Lieber Dennis,

Ich wäre unfassbar glücklich, wenn du den Code für den SDRAM-Treiber 
hochladen könntest, denn ich kriege es nicht gebacken und brauche 
dringend hilfe!!!

von Denis (Gast)


Angehängte Dateien:

Lesenswert?

Der Code zur Initialisierung ist nicht sonderlich hübsch gestaltet.

Die angefügte Datei funktioniert mit dem UC3A3 xplained kid.

Viel Spaß Damit.

von Niklas (Gast)


Lesenswert?

Dankeschön.
Tausendfach dank.
Ich hatte schon angst du antwortest auf so einen alten thread nicht 
mehr. ich werde es ausprobieren sobald ich wieder zuhause bin (dauert 
ein paar Tage).

Das mit den Pins habe ich völlig übersprunge. War ja auch im andern 
Beispiel nich angegeben.

Danke nochmal

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.