Forum: Mikrocontroller und Digitale Elektronik Probleme beim Senden SC16c550


von Holger H. (holgi1972)


Lesenswert?

Hallo,

ich habe folgendes Problem beim Senden mit dem SC16C550 von Philips:

Ich schreibe das erste Zeichen in den Puffer und es wird gesendet. Das
Zeichen kommt korrekt auf meinem Terminalprogramm an. Wenn ich aber
dann das zweite Zeichen in den Puffer schreibe, empfängt mein
Terminalprogramm das vorherige (!!) Zeichen und das aktuelle, also 2
Zeichen. Und so weiter und so weiter.

Ich steuere den Modembaustein mit einem M32C84 Controller von Renesas
an  über einen "künstlichen" Datenbus mit Portpins. Vom Timing her
liege ich weit im sicheren Bereich. Und über den Bus wird auch immer
nur das nächste zu sendende Zeichen an den Modembaustein verschickt.

Lese ich den jeweiligen Status des THR und TSR Registers (im LSR
Register) nach dem Senden aus bekomme ich die Rückmeldung, dass beide
Register leer sind. Und trotzdem sendet er mir dann wieder das
vorherige Zeichen mit!

Muss ich da nach jedem Zeichen, dass ich in den Puffer schreibe noch
irgendein Register bedienen? Ich habe keine wirkliche Idee warum das so
passiert. Und die Antwort von Philips auf meine Anfrage steht noch aus.

von Bernhard S. (bernhard)


Lesenswert?

Hallo Holger,

hab gerade mal gegoogelt. Konnte aber über den SC16C550 nichts
aufschlussreiches finden.

Vielleicht könntest Du uns mal einige Unterlagen zur Verfügung
stellen(Datenblatt, Schaltplan usw.) damit wir Dir besser helfen
können?

Bernhard

von Holger Hofmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bernhard,

hier ist erstmal das Datenblatt des Bausteins. Die anderen Unterlagen
reiche ich nach.
Der Unterschied zu den üblichen 16550 liegt wohl in erweiterten
Registern: "Enhanced Register Set". Ich habe leider mit den
"ursprünglichen" 16550 noch nicht gearbeitet.

Gruß
Holger

von Bernhard S. (bernhard)


Lesenswert?

Probier doch mal folgendes aus:

Du sendest fortlaufend verschiedene Zeichen (0,1,2 ...255) ,

wenn es einen Zeichen-Puffer gäbe, müsste er irgend wann voll sein.

Oder liegt es vielleicht an Deinem Terminal-Programm?

Trenne doch mal die RX-Leiung vom SC16C550?

Bernhard

von Holger Hofmann (Gast)


Lesenswert?

Hallo Bernhard,

ich glaube ich habe das Problem gefunden!! Und zwar habe ich bei der
Ansteuerung des 16C550 mit meinem künstlichen Daten- und Adressbus
Verzögerungen eingebaut.
Das WriteEnable-Signal (High-Aktiv) hatte ich dadurch für 12,5us
anstehen. Damit ist der Baustein bei zunehmender Geschwindigkeit
(ab19200Bd) nicht klargekommen (und ich hatte es immer  mit 115200Bd
laufen!!!). Aufgefallen ist es mir als bei 2400Bd kein
Übertragungsfehler vorkam.
Ohne die Verzögerung des Enable-Signals klappt alles wunderbar.

Danke nochmal für Deine Bemühungen.

Gruß
Holger

von Bernhard S. (bernhard)


Lesenswert?

Gern geschehen ;)

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.