c - Uart 16c950 linux 速度高于 B4000000 (4Mbps)

标签 c linux uart termios

各位, 我正在 Ubuntu 下使用高速 RS422 pci 板 (OXPCIe958)。 该设备的工作速度可达 15Mbps。我需要以 10Mbps 的速度工作,但我注意到在 Linux 下, 如果我们使用 termois,可以指定的最大速度是 B4000000 (4 Mbps)。

有什么方法可以在 linux 中指定自定义波特率吗??我尝试更改值 在 termois.h 中:

#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017 --> by default this is the last value

#define  B4500000 0010018   --> Added
#define  B5000000 0010020   --> Added
//#define __MAX_BAUD B4000000 --> Default value
#define __MAX_BAUD B10000000

但是改变不起作用。我无法理解分配给 BXXXXXX 的值的含义!

该设备在 linux 上原生运行,无需指定驱动程序。查看设备的数据表,我看到要指定目标波特率,我们必须设置一些寄存器来更改预分频器、锁存器除数和采样时钟。

根据数据表,波特率由下式给出:

Baundrate = inputclok/(sampleClock*divisor*prescaler)

有没有办法在 linux 下设置这个寄存器?驱动程序在 8250.c 和 8250_pci.c 中

提前致谢

最佳答案

This page有一个 Linux 内核补丁,添加了寄存器的直接公开,因此 ioctl() 可用于对自定义波特率进行编程。虽然它很旧,但可能对您有用。

关于c - Uart 16c950 linux 速度高于 B4000000 (4Mbps),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321776/

相关文章:

arrays - 为什么在 char 数组的字符之间插入 "\000"个字符?

c - 将字符串的地址传递给 fscanf() 会阻止不相关的代码块运行

c - 查找 popen 输出更改

c - 错误: unable to handle kernel paging request at ffffffffffffffff

c - 如何使用 C 中的条件测试从数组中删除某些元素?

java - 如何从 .conf 运行 jar?

linux - XKB : Switch Overlay vs HotKeys

linux - 控制台中缺少 Debian 启动消息

c - 从 Linux 用户空间设置 16550A UART 硬件 FIFO 中断级别

C:在超时的阻塞套接字上等待 n 个字符