Hallo zusammen,
Meine CPU ist über den LPC-Bus mit einem UART in einem FPGA (Adresse
0x1900) verbunden. Der Kernel erkennt den UART wie folgt:
1 | # setserial -a /dev/ttyS1
|
2 |
|
3 | /dev/ttyS1, Line 1, UART: 16550A, Port: 0x1900, IRQ: 3
|
4 | Baud_base: 115200, close_delay: 50, divisor: 0
|
5 | closing_wait: 3000
|
6 | Flags: spd_normal skip_test auto_irq
|
In der Datei /etc/inittab habe ich folgendes eingetragen, um die
serielle Schnittstelle zu initialisieren:
1 | T1:2345:respawn:/sbin/getty -L ttyS1 38400 vt100
|
Der Kernel wird mit Hilfe von Grub legacy wie folgt gestartet (Auszug
aus /boot/grub/menu.lst):
1 | kernel /boot/vmlinuz-2.6.30 root=UUID=xxxxxxxxxx ro console=tty0 console=ttyS1,38400
|
Die Schnittstelle ist laut stty auf 38400 Baud eingestellt:
1 | # stty -F /dev/ttyS1
|
2 | speed 38400 baud; line = 0;
|
3 | kill = ^X; min = 1; time = 0;
|
4 | -brkint -icrnl -imaxbel
|
5 | -opost -onlcr
|
6 | -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
|
Nun zu meinem Problem:
Ich will mittels
1 | # while [ 1 ]; do `echo "hallo" > /dev/ttyS1 `; done
|
"hallo" auf der der empfangenden Konsole ausgeben und bekomme nur
Hieroglyphen zurück.
Erst wenn ich mittels
1 | # setserial -a /dev/ttyS1 spd_cust divisor 57
|
den Divisor verändere und das empfangende Terminalprogramm auf 57600
Baud einstelle, dann bekomme ich das richtige gesendet.
Das klappt im übrigen auch mit
1 | # setserial -a /dev/ttyS1 spd_cust divisor 342
|
und der Einstellung 9600 Baud im empfangenden Terminalprogramm.
Im Kernelquellcode bin ich auf folgendes gestoßen
(arch/x86/include/asm/serial.h):
1 | /*
|
2 | * This assumes you have a 1.8432 MHz clock for your UART.
|
3 | *
|
4 | * It'd be nice if someone built a serial card with a 24.576 MHz
|
5 | * clock, since the 16550A is capable of handling a top speed of 1.5
|
6 | * megabits/second; but this requires the faster clock.
|
7 | */
|
8 | #define BASE_BAUD ( 1843200 / 16 )
|
Kann mir jemand sagen, welche Einstellung ich hier (oder vielleicht auch
irgendwo anders) vornehmen muss, damit mein UART auch schon während des
Bootvorgangs und nicht erst nach Ändern des Divisors korrekte Meldungen
ausgibt?
Vielen Dank im Voraus
Lisa