mikrocontroller.net

Forum: Compiler & IDEs AVR32-Linux_Serial_Non-conform-Baudrate


Autor: Peter P. (peter-p)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte unter Linux 2.6.23.atmel.4 mit dem Avr32AP7000, die Baudrate 
von 1,25Mb einstellen. Mit termios stelle ich zuerst 38400Bd ein und 
dann versuche ich über ioctl den custom divisor einzustellen. Leider 
kommt im Kernel (serial_core.c) das Flag: ASYNC_SPD_CUST nicht an. Wenn 
ich die Struktur "struct serials" vom Kernel lesen will, dann werden mir 
ebenfalls nicht die richtigen Werte zurückgegeben. Dafür ist die 
Funktion im Kernel "copy_to_user" in der Funktion "static int 
uart_get_info" in serial_core.c" zuständig. Kennt jemand dieses 
Phänomen. Der Kerenel trägt die baud_base von 2500000 in seine Struktur 
im Kerenlbereich ein. Im Userbereich kommt dies aber leider nicht an. 
Zum Test habe ich den custom divisor von 260 gewählt, damit sich 9600Bd 
ergeben. Wenn das laufen würde, dann könnte ich meine Wunschbaudzahl 
(s.o.) setzten. Aber leider hakt es an der Übergabe vom Userbereich in 
den Kernel und umgedreht. Das merkwürdige ist, dass an anderer Stelle im 
Code das Kommando TIOCGSERIAL an den Kernel übergeben wird. Die 
Zielhardware ist dem STK1000 ähnlich.
Über zündende Ideen würde ich mich sehr freuen.



Hier  der kleine Code-Ausschnitt:
fd=open_port();

struct termios newtio;
struct serial_struct new_serdrvinfo;


// Set baudrate to 38400:
cfsetispeed(&newtio, B38400);
cfsetospeed(&newtio, B38400);
tcsetattr(fd, TCSANOW, &newtio );

// Change serial driver settings:
ioctl(fd, TIOCGSERIAL, &new_serdrvinfo);

// custom  Baudrate=9600
// set custom divisor (2,500,000Mhz/9600Bd = 260;
new_serdrvinfo.custom_divisor = 260;
new_serdrvinfo.flags |= ASYNC_SPD_CUST;
ioctl(fd, TIOCSSERIAL, &new_serdrvinfo);
close(fd);

printf("custom_divisor = %d \n", new_serdrvinfo.custom_divisor);
printf("baud_base = %d \n", new_serdrvinfo.baud_base);

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]
  • [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.