• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

c/c++ 来源:Damien 8次浏览

我目前使用16550兼容的UART,我希望能够更改FIFO中断触发级别(我在高UART负载下丢弃字节,我想减少门槛 – 这是一个动力不足的嵌入式系统)。当然,我可以在8250_port.c驾驶员改变它,如果我想:从Linux用户空间设置16550A UART硬件FIFO中断级别

[PORT_NS16550A] = { 
    .name  = "NS16550A", 
    .fifo_size = 16, 
    .tx_loadsz = 16, 
    .fcr  = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 
    .flags  = UART_CAP_FIFO | UART_NATSEMI, 
}, 

但它会更方便将其从用户空间的改变而无需重新编译内核。

我希望的following documentation已过时:

截至2000年年末,有没有办法在Linux用户可以设置这些 直接(setserial的不能做到这一点)。虽然许多PC只有1650字节的缓冲区,但更好的UARTS具有更大的缓冲区。

如果这样做(例如一些新十岁上下的ioctl)的手段,那么seterial (8)和stty (1)还没有暴露的接口。


===========解决方案如下:

我认为这个问题的一般解决方案是使用setserial来使uart更改模式。例如,使用Pericom PI7C9X7958,您可以使用多种操作模式,例如“550”和950模式。这些对应于16550或16950标准uart类型。每种模式都有一个与其相关的特定fifo大小和一些其他功能。

所以,如果您的设备支持的话,你可以尝试

的setserial -v的/ dev/UART就是ttyS1 16950

,然后验证

的setserial -g的/ dev /就是ttyS1 的/ dev/ttyS1,UART:16950/954,端口:0xc800,IRQ:16


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)