各位, 我正在 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/