hallo, ich habe einen quaduartbaustein an meinen ATmega128 angeschlossen und zwar an die Leitungen für Externes RAM mittels Multiplexschaltung. Mein ATmaga läuft mit 8MHz, der Baustein nur mit 1,7MHz. Die frage ist nu ob ich Probleme bei der Übertragung bekomme. Fals einer mit sowas schon Erfahrung gesammelt, wäre ich froh um eine Antwort. Ich kann zwar sagen der Prozessor soll noch 2 Waitstates ausführe. Bin mir aber nicht sicher ob das so hinhaut... danke , Sascha
quaduartbaustein -- ich bin nicht drauf gekommen. Google hat's für mich auseinandergenommen: Quad UART -- meinst Du ebendieses? Anyway, guck ins Datenblatt dieses Bausteins, was sie als Timing erreichen, vergleiche es mit dem Datenblatt des ATmega128. Meine Kristallkugel ist gerade zur Reparatur, daher weiß ich nicht, was für einen »quaduartbaustein« Du benutzt.
von Texas Instruments den TL16C754BFN naja das ist die hauptnummer es geht noch weiter : 3BA3E7WFB so der ist das. tut mir leid um deine Kristallkugel ich hoffe sie ist bald wieder in Ordnung.... Timing, meinst du die Zeitdiagramme : aus denen werd ich leider nicht besonders schlau ! die Frage ist auch ob sowas prinzipiell funktionieren kann ...
Sicher kann das prinzipiell funktionieren. Das nennt man "memory mapped I/O" und ist bei nicht-8080-artigen Prozessoren völlig normal. 8080-Prozessoren (und deren Nachfolger, wie Z80 und die x86-Reihe) unterscheiden zwischen Speicher- und I/O-Adressierung. Auch die Zugriffsgeschwindigkeit des AVR stellt hier kein Problem dar; die 1.7 MHz (das sollten eigentlich 1.8432 sein) haben nichts mit dem I/O-Timing der UART zu tun. 16C745 ist ein Nachfolger des 16C554, der wiederum eine Vierfach-Ausführung des aus PCs bekannten 16C550 ist. Poste doch mal einen Schaltplan, der zeigt, wie Du Dir den Anschluss an das ext. Speicherinterface des AVR vorstellst. Es kann im übrigen hilfreich sein, Timingdiagramme lesen zu lernen ...
ist gerade nicht verfügbar :( werde sehn, daß ich dir heute abend was nachliefer... danke schon mal ...
moin , so hab mal ein schaltbild und quellcode für euch. Ich weiss echt nicht mehr weiter. Habe inzwischen folgen baiteile drauf: ATmega128 (im 128-mode); SN74ALS573CN (Latch); TL 16C754BFN (QUAD UART); habe alles wie im schaltbild angeschlossen. und beim ATmeag128 den Exterenen RAM initialisiert. Über Constanten berechne ich welchen der 4 UARTS ich ansprechen will und wie die Adressleitungen gesetzt werden. die soll der Latch dann halten (ALE). danach Datenlesen und über einen eigens geschrieben Softuart ausgeben. Die ausgabe klappt einwandfrei. Leider bekomme ich nur 0x00 zurück. Eigenltich sollte alles klappen. Wär schön wenn mir einer helfen kann. Ich bin schon ganz verzweifelt.. danke, Sascha
hier noch der Quellcode mit dem ich alles handle. ich hab auch schon versucht den Externen Ram auszulassen und alles über ein Assemblerprogramm selbst zu steuern mit dem gleichen Erfolg :( . Sascha
Das sieht im Ansatz nicht schlecht aus. Naja, um auf Nummer Sicher zu gehen, daß niemals mehr als eine der /CSn-Leitungen aktiv ist, solltest Du noch einen '138 verwenden, der zwischen das Latch und die QUART gehängt wird. Drei Adressleitungen oberhalb A2 gehen dann an den '138, und vier seiner Ausgänge sind mit den /CSn-Eingängen der QUART verbunden. Du könntest noch /RD und /WR verXORen und an einen der Active-Low-Eingänge des '138 anlegen, dann wird /CSn erst dann aktiv, wenn auch tatsächlich ein Lese- oder Schreibzugriff stattfindet. Zum Testen kannst Du mit einer einfachen Routine eines der Register der UARTs verwenden - das sogenannte "scratch pad"-Register hat keine technische Funktion, außer, daß der hineingeschriebene Wert auch wieder gelesen werden kann. Bei meiner oben beschriebenen Beschaltung wiederholt sich das Scratchpad-Register alle 8 Bytes (jede UART belegt 8 Bytes). Dein Sourcecode wird vermutlich verständlicher, wenn Du die Basisadressen der UARTs als Konstanten definierst, und die einzelnen Register als Offset-Konstanten. Dann würde Deine "ReadUart" und "WriteUart"-Funktion etwas leichter lesbar. Da bei der gegebenen Schaltung die QUART die ersten 32 Byte des XRAM belegt, kannst Du daher definieren #define XRAM_BASE 0xEE00 // Startadresse XRAM #define UART_BASE_0 (XRAM_BASE + 0) #define UART_BASE_1 (XRAM_BASE + 8) #define UART_BASE_2 (XRAM_BASE + 16) #define UART_BASE_3 (XRAM_BASE + 24) Du solltest zunächst mal nur versuchen, das von mir erwähnte "scratchpad register" zu beschreiben und lesen - wenn bereits das nicht klappt, dann solltest Du ein Oszilloskop zur Hilfe nehmen und einer Testroutine, die bespielsweise in einer Endlosschleife abwechselnd liest und schreibt, auf die Finger gucken ... Als nächstes könntest Du, ohne Dich mit Baudratenteilern und ähnlichem 'rumzuschlagen, mal ausprobieren, ob Du die Handshakeleitungen zu sinnvollen Aktionen bewegen kannst. An die Ausgänge könntest Du beispielsweise Low-Current-LEDs (mit Vorwiderstand) hängen, und testen, ob Du die ein- und ausschalten kannst. Näheres über die Programmierung der 8250 (das ist der "Urvater" der vier einzelnen UARTs Deiner QUART) solltest Du problemlos im Netz finden - achte darauf. daß Du C-Quelltext für DOS suchst. Da sehen zwar die "Speicherzugriffe" auf die UART etwas seltsam aus, da beim PC die UART nicht im normalen Speicher auftaucht, sondern im I/O-Adressbereich, aber wenn Du irgendwo Zugriffe auf Adressen um 0x3f8-0x3ff und 0x2f8-0x2ff findest, dann glänzt das sprichwörtliche Gold schon ganz gut. Viel Erfolg!
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.