PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Externes RAM an Atmega162



BlackDevil
05.04.2009, 12:06
Servus

Wir haben demletzt das oben angesprochene Thema in der Vorlesung besprochen. Ist auch im Prinzip kein Problem. Da hier die Bits 7:0 von Daten- und Adressbus die selben Pins besetzen, setze ich genau für diese ein Latch ein um die Adresse festzuhalten um danach die Daten rauszuschieben. Soweit ist alles einleuchten. Laut dem Datenblatt auf Seite 27 ist die verbindung auch direkt (Also A15 an A15(RAM), A14 an A14(RAM) etc).

Das bestätigte der Dozent auch noch. Aber:


2. Erstellen Sie einen Schaltplan , der (L¨ osung auf Seite ??)
• ein 32 KByte RAM und
• ein 8 KByte ROM enth¨ alt.
Das ROM soll am Ende des Adressraumes von 64 KByte liegen, das RAM direkt davor.

Die Lösung dieser Aufgabe ist recht dünn. Er hat das ROM mit den Adressleitungen A15, A14 und A13 versorgt, das RAM mit den Adressleitungen A12, A11, A10, A9 und A8. A8 hat er auf das Ende vom RAM gelegt, A9,A10,A11 und A12 von RAM Adresse 1 bis 3. Er sagte das das besser für die Binäre Darstellung sei. Er sagte aber auch im selben Satz das es eigentlich egal ist wo man was hinlegt, wenn ich auf die Adresse 0xA000 schreibe und lese ist es egal wo es im RAM abgelegt wird ich erhalte ja die richtigen Daten.
Wo ist mein Denkfehler? Und kann ich nicht einfach durchverbinden?

Grüße

Besserwessi
05.04.2009, 15:29
Wenn ich das richtig verstehe geht um ein vertauschen der Addressleitungen. Bei den RAM / ROM Bausteinen sind die Addressleitungen eher wilkürlich mit A0 ... A14 benannt. Man kann ohne Probleme die Leitungen auch Vertauschen. Da dies ja fürs lesen und schreiben gilt, werden dann nur die Speicherstellen umsortiert. Beim ROM muß man das natürlich auch bein Programmieren berücksichtigen, denn da geschieht ja in der Regel nicht in der Schaltung.


Die Forderung das ROM an den oberren Addressbereich zu legen ist logisch, denn viel (8bit) CPUs haben da ihren Reset Vektor und entsprechend muß da ROM sein. Das RAM direkt darunter zu legen ist etwas schierig, einfacher wäre die untere Hälfte.
Die normale Lösung wäre es die Adressleitunge A15,A14, A13 per Adressdecoder aufzuteilen und damit das Chip Select signal des ROMs zu steuern. Für nur den oberen Bereich würde auch ein NAND Gatter reichen.
Das ROM bekommt die Adressleitungen A14..A13 dann nicht mehr direkt. Das RAM könnte man dann mit dem inversen Cipselekt vom ROM ansteuern. Dann hätte man das RAM überall, nur nicht da wo ROM ist. Ein großteil des RAMs wäre dann 2 mal eingebunden, aber das stört in der Regel nicht.

BlackDevil
05.04.2009, 19:17
Irgendwie verwirrt mich das ganze Thema total. Ich seh halt einfach nich das Problem das ganze straight forward (also A0 an A0, A1 an A1) zu verbinden und mit einem Latch die Adresse festzuhalten wenn die daten kommen. Wenn ich ein RAM und ein ROM oder mehrere RAMs/ROMs verwenden möchte muss ich mir eben zusätzlich gedanken darum machen welchen Adressraum ich welchem Chip zuordne und mit einem Adressdecoder (der würde dann A13, A14, A15 bekommen) dann eben den CE steuern. Gut, ich weis auch leider nicht wie das ganze Software/Hardwareseitig im Prozessor aussieht, das haben wir nicht gesagt bekommen weil das letztes Semester behandelt wurde (bei jedem, nur bei unserer Gruppe nich -.-). Vll ist da mein Denkfehler.

Der Adressraum des AVR ist ja in mehrere Bereiche eingeteilt: Der Reset auf 0, dann der Vektor für die Interrupts (bis 40 glaube), dann kommt das Programm und dann der Datenspeicher. Der Datenspeicher ist mit dem Adress- und Datenbus nach ausen verbunden richtig?

BlackDevil
06.04.2009, 20:04
So ich hab den guten Herrn heute gefragt und er sagte "Im Prinzip haben Sie recht das man die immer durchverbinden kann wenn sich beide Bausteine mit dem Mapping verstehen. Tuen Sie das nicht, wie hier, dann muss man das eben Softwareseitig drehen oder hart verdrahten."
Aufgabe: http://img3.imagebanana.com/view/9mvyjeks/Untitled1.jpg

Jetzt im erstne Laborversuch heist es

Das externe RAM ist ab Adresse 0x0500 zu finden:
Erzeugen Sie ein neues Testprogramm, dass eine Schreiboperation auf das externe RAM f¨ ur die
Adresse 0x0500+XXX in einer Endlosschleife durchf¨ uhrt. Dabei setzen Sie f¨ ur XXX die 3 letzten
Ziffern Ihrer Matrikelnummer ein. Programmieren Sie das externe Memory Interface (MCUCR,
SFIOR) so, dass die Adressleitungen A15-A12 (PC7..4) nicht verwendet werden, denn diese werden
f¨ ur das JTAG-Interface gebraucht.

Heist also das ich auch hier einfach durchverbinden kann. Im ersten Teil des versuches ohne Adresslatch im zweiten Teil mit Adresslatch. Für das Timing bedeutet es doch nur das die Adresse am RAM nicht die gaze Zeit anliegt und damit die Daten wo anders hingepackt werden als eigentlich verlangt oder?