Forum: Mikrocontroller und Digitale Elektronik UART Baudrate in C-Programm verändern


von mct (Gast)


Lesenswert?

Hallo µC und Programmierfreunde,

Ich entwickle auf einem WRAP-Board mit einem AMD Geode SC1100 unter 
Linux ein C-Programm.
Der dort vorhandene UART ist ein 16550A.
Ich lege eine Baudrate von 9600 im C-Programm über eine termios Struktur 
fest. Ich möchte gerne über die RS232-Schnittstelle ein 0x00 Byte senden 
und dabei die Bitzeiten verändern. Als Ergebnis sollen ca. 13 Bits über 
eine folgende Ein-Draht-Leitung gehen (LIN-Break).

Beschreibungen zufolge soll dies möglich sein, indem man die Baudrate 
heruntersetzt, das 0x00 Byte sendet und anschließend wieder heraufsetzt.

Genauso habe ich es unter Linux im C-Programm mit den Funktionen 
cfsetospeed(&struktur, B4800) bzw. cfsetspeed(&struktur, B4800) gemacht, 
anschließend mit tcsetattr() gesetzt, das Byte gesendet und wieder auf 
9600 gesetzt. Auf dem Oszi konnte ich nur das Starbit + 8 Bits Low Pegel 
+ Stopbit messen...

Die erste Frage wäre ob jemand das schon mal mit Erfolgt gemacht hat und 
wenn ja wie?

Ist es prizipiell überhaupt mit diesen Funktionen möglich (damit es µC 
unabhängig auf anderen Boards läuft) oder müssen die Register des UART's 
über ihre Adressen ausgelesen werden. Was ich mir dabei vorstelle ist, 
ein bestimmtes Flag aus einem UART Register zu Lesen (Daten wurden 
verschickt) und erst jetzt die Baudrate wieder hoch setzen???
Auf jeden Fall wäre ich über Hinweise zur Lösung (am besten auch mit 
C-Code) dankbar.

Danke

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.