hi ! ich möchte gerne beim atmega128 die oberen Signale, um einen externes sram zu aktivieren. allerdings bekomme ich keinen zugriff auf diese pins. ich programmiere mit dem code v avr. kann mir jemand helfen, damit mein compiler diese signale generiert?? danke schon mal
>ich möchte gerne beim atmega128 die oberen Signale, um einen >externes sram zu aktivieren. Was möchtest du? >code v avr. Codevision? Bildlich gesprochen: Versuch mal die Zähne auseinander zu kriegen! In der Regel muß man, um das Interface für externen Speicher, dem Compiler dort einen bestimmten Speicherbereich zuweisen. Sowas ist IMHO im Handbuch beschrieben.
oh....man welch ein deutsch.....! sorry....! also bitte noch einmal von vorne! wie kann ich denn das ALE signal aktivieren ? IMHO Handbuch habe ich noch nie gehört ?
>wie kann ich denn das ALE signal aktivieren?
Du greifst auf eine Adresse im Datenbereich zu für die sich das externe
Speicherinterface zuständig fühlt.
Das ExtMEM Interface ist eine Hardware und kann demzufolge nicht durch den Compiler autom. erzeugt werden. Schau ins Datenblatt unter ExtMEM und du wirst einige Register finden die du korrekt einstellen musst. Dem Compiler selber musst du nun sagen das ein externer SRAM vorhanden ist. Meistens wird das im Makefile oder Linkerscript eingestellt. Ich kenne mich nur mit WinAVR-gcc aus. Gruß Hagen
>IMHO Handbuch
IMHO oder Handbuch?
(Beides mal bei google, wikipedia oder etwas anderem zum nachschlagen
eingeben).
Verwende einfach den Code Generation Wizard und sage dem Compiler, wie viel externen Speicher Du verwenden willst. In der Library mem.h stehen vier Funktionen zum Zugriff auf eben diesen Speicher (pokeb, pokew, peekb und peekw).
jou danke erstmal für eure beiträge..! dann versuche ich mal mein glück...! @johnny.m wie kann ich die signale ale /rd /wr ansprechen? bitadressierbar ist der PORTG ja nicht! kannst du mir da noch weiterhelfen
Nochmal, DU sprichst diese Signale immer nur indirekt an. Bei einem Speicherzugriff auf eine Addresse im externen SRAM wird die MCU in Hardware autom. und selbständig diese Pins ansprechen, vollkommen transparent für dich und nichts manuell. Gruß Hagen
Ach jetzt klickert es... Dann muss ich ja nur noch die Adressierung, auf dem Port A und Port C vornehmen. Wie erkennt denn das Daten Signal ob ich die Daten lesen oder schreiben will? Dafür gibt es das RD und WR Signale..muss ich diese im Adressbus mit integrieren ? Danke schon mal für Eure Hilfen!
>Dann muss ich ja nur noch die Adressierung, auf dem Port A und Port C >vornehmen. Nein, du musst überhaupt nichts "vornehmen", bis auf das Aktivieren des externen Speichers. Wenn selbiger aktiviert ist greift du z.B. mit unsigned char *ptr = 0x1015; *ptr = 100; auf den externen Speicher zu. Der AVR macht dabei folgendes SELBER: - Adresse 0x1015 auf AD0-7 und A8-15 anlegen - ALE setzten (dein externes Latch muss sich hier die Adresse zwischenspeichern) - ALE zurücksetzten - Daten (100) auf AD0-7 anleden - WR setzten - WR zurücksetzten Obigen Code sollte man aber besser so nicht verwenden, es ist besser wenn sich der Compiler selbst um den Speicherzugriff kümmert. Wenn du die Linkerparameter so einstellst dass statische Variablen im externen Speicher liegen wird mit unsigned char c; c = 100; automatisch der externe Speicher verwendet. Falls du nur den Heap ins externe SRAM legst, wird der externe SRAM nur für mit malloc alloziierten Speicher benutzt. Bitte im Forum und vor allem in der AVR_LIBC-Doku suchen, da ist der Speicheraufbau recht gut beschrieben. Stefan
Danke Stefan, sehr hilfreiche Info´s für mich ! So langsam bekomme ich eine Übersicht von dem Thema. Falls ich Daten aus einem SRAM lesen möchte, wie gehe ich da vor ? WR ist ja schreiben der Daten an eine Speicherstelle
und statt WR steuert die AVR nun das RD Signal entsprechend, die MCU weis ja ob die schreibend oder lesend auf eine Speicherzelle zugreifen möchtest. Gruß Hagen
ahhh, die anweisung spielt die wichtige rolle ?? habe ich doch richtig verstanden ? *ptr = 100; lesen 100 = *ptr; schreiben
> WR ist ja schreiben der Daten an eine Speicherstelle
WR ist ein SIGNAL, das Dein µC benutzt, um auf den Speicher
zuzugreifen. Du als Programmierer hast mit diesem Signal nichts zu tun!
Stefan schreibt in seinem Beispiel etwas in eine Variable. Es dürfte
dann ja wohl kein großes Problem darstellen, etwas aus einer Variable
zu lesen, oder?
Mit dem ersten Beispiel:
unsigned char *ptr = 0x1015;
unsigned char x;
*ptr = 100; // Das ist ein Schreibzugriff...
x = *ptr; // ...und das ein Lesezugriff...
> 100 = *ptr; schreiben
Das ist natürlich völliger Unsinn. Du kannst der '100' doch keinen
Wert zuweisen!
Oh man, ich habe es verstanden. @ all Wirklich besten Dank für Eure Mithilfe !!!!
Und den Latch-Baustein nicht vergessen. SRAM direkt an den AVR geht nicht, oder gibt es SRAMs mit integriertem Address-latch ? Wäre mir neu... Stefan
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.