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
> 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.
::: 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
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!!!
Der Code zur Initialisierung ist nicht sonderlich hübsch gestaltet. Die angefügte Datei funktioniert mit dem UC3A3 xplained kid. Viel Spaß Damit.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.