Исходный код управления скоростью последовательного порта

Предположим, что у нас есть последовательное устройство / dev / ttyS0 с глухой скоростью 9600 бит / с.

Скажем, мы изменили его скорость, например, на 4800 бит / с, используя cfsetospeed .

Теперь скорость записи в сеть должна быть ниже.

Где исходный код, выполняющий эту операцию? Какая часть операционной системы контролирует эту скорость? Кастомный драйвер, драйвер tty что ли? А как, выставив тактовую частоту или задержку?

Может быть, в драйвере, но я не нашел. Например, может ли кто-нибудь показать мне место в драйвере RocketPort ?

Я также не смог найти в драйвере tty .

0
30.07.2017, 18:28
1 ответ

Скорость последовательного порта обычно определяется самим оборудованием и настраивается драйвером оборудования.

Таким образом, следующей цепочкой будет вызов TCSETSioctl, который вызывает tty_set_termios()в tty_ioctl.c. Если вы проследите эту цепочку, то в драйвере RocketPort он вызовет rp_set_termios(), который сам вызывает configure_r_port().

Выполняется некоторый расчет параметров конфигурации для отправки на микросхему RocketPort (, например. установка делителя ), которая в конечном итоге вызывает sSetBaud(, определенную в rocket_int.h), которая просто выводит байты на микросхему.

Таким образом, ядро ​​само по себе не выполняет "битовую перестановку" последовательных линий для определения скорости передачи данных; Чип UART делает всю эту тяжелую работу за нас. Нам просто нужно запрограммировать чип:-)

1
28.01.2020, 02:45

Теги

Похожие вопросы