www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Linux + UART im FPGA


Autor: Lisa G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
# setserial -a /dev/ttyS1

/dev/ttyS1, Line 1, UART: 16550A, Port: 0x1900, IRQ: 3
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test auto_irq

In der Datei /etc/inittab habe ich folgendes eingetragen, um die 
serielle Schnittstelle zu initialisieren:
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):
kernel /boot/vmlinuz-2.6.30 root=UUID=xxxxxxxxxx ro console=tty0 console=ttyS1,38400

Die Schnittstelle ist laut stty auf 38400 Baud eingestellt:
# stty -F /dev/ttyS1
speed 38400 baud; line = 0;
kill = ^X; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke


Nun zu meinem Problem:

Ich will mittels
# 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
# 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
# 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):
/*
 * This assumes you have a 1.8432 MHz clock for your UART.
 *
 * It'd be nice if someone built a serial card with a 24.576 MHz
 * clock, since the 16550A is capable of handling a top speed of 1.5
 * megabits/second; but this requires the faster clock.
 */
#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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist nach Deiner Beschreibung noch nicht klar, wo Dein 
Terminalprogramm und wo Dein Linux läuft.

Hier die funktionierenden Werte:
57 * 57600 = 3283200
342 * 9600 = 3283200

Also scheint da intern irgendwo was mit 3.283 MHz zu laufen. Was sind 
denn da für Quarze im System verbaut?

Allerdings passt das gar nicht zu den anderen Werten:
1843200 / 16 = 115200

Duke

Autor: Lisa G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die schnelle Antwort! Mein Terminalprogramm läuft auf 
einem normalen Windows-Rechner, das über ein serielles Kabel mit dem 
Target verbunden ist. Hier mal eine der Versuch das Ganze bildlich 
darzustellen:


              RS232                      LPC-Bus
Windows-Host ------- LineDriver----FPGA----------Target-CPU


Das FPGA wird mit 25 MHz getaktet.

Autor: Keller Thomas (fabito)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe gerade das Problem UART über PCIe mit dem Ziel Modem Leitungen 
zu testen.
Hier meine Frage ist:

               /dev/ttyS1, Line 1, UART: 16550A, Port: 0x1900, IRQ: 3

Ist das eine IO /Port Adresse oder Memory Map Adresse ???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.