LINUX.ORG.RU

Произвольная скорость USART (RS-232)


0

0

Знатоки ioctl'ов USART'а!

Как можно установить произвольную скорость? В интернете нашел только такой вариант:

struct serial_struct nuts, old_extra_term; int RB;
    ioctl(comfd, TIOCGSERIAL, &old_extra_term);
    nuts = old_extra_term;
    nuts.baud_base = Baudrate; // вариант 1
    nuts.custom_divisor = 1; // вариант 1
        // вариант 2:
        // nuts.custom_divisor = nuts.baud_base / Baudrate;
    //if (!(nuts.custom_divisor)) nuts.custom_divisor = 1;
    nuts.flags &= ~ASYNC_SPD_MASK;
    nuts.flags |= ASYNC_SPD_CUST;
    ioctl(comfd, TIOCSSERIAL, &nuts);
    ioctl(comfd, TIOCGSERIAL, &nuts);
    RB = nuts.baud_base / nuts.custom_divisor;
    printf("Target baudrate=%d, real baudrate=%d\n", Baudrate, RB);
printf пишет, что скорость установилась нужная (правда, во втором варианте nuts.baud_base = 115200), однако, данные через канал не идут. Ошибка точно не со стороны контроллера, т.к. если выставляю таким способом стандартную скорость 9600бод, компьютер контроллер не видит.

P.S. Кажется мне, в офтопике можно было задавать произвольный бодрейт, так что проблема не аппаратная.

☆☆☆☆☆
Ответ на: комментарий от pathfinder

Это и есть поле custom_divisor.

Хочется установить реальный baud_base, например, по ссылке http://osdir.com/ml/distributions.gumstix.general/2005-02/msg00002.html Baud_base=921600.

Как узнать, чему равна частота кварца USART'а (а отсюда и максимальный Baud_base)?

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

O_o А думал там частота одна и та же для PC.

Note that these values only hold for a PC compatible system where a clock frequency of 1.8432 MHz is used.

Ну ладно. Не знаю. Наверное надо читать мануал на конкретный тип UART

pathfinder ★★★★
()

Если чип стандартный 16550A, то больше 115200 выставить не получится. Советую для начала проверить с помощью stty, echo и cat.

frey ★★
()
Ответ на: комментарий от frey

Если чип стандартный 16550A, то больше 115200 выставить не получится.

Да я уже понял. Максимальная скорость, доступная для работы с имеющимся контроллером - 19200бод. Пробовал 115200, но из-за большой разницы со 125000 ничего не получается.

Ладно, буду ждать осциллограф и дешифровать руками :(

Eddy_Em ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.