This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Linux
你(们)好
目标系统:BeagleBone Green
操作系统:Linux 内核4.9
问题:
首先、我们在禁用 UART DMA 支持的情况下编译内核(CONFIG_SERIAL_8250_DMA)。 UART 工作正常。
然后、我们启用 UART DMA 支持、并在 DTS 中设置以下行:
uart4:串行@481a8000{
兼容="ti、am3352-uart"、"ti、omap3-uart";
ti、hwmods ="uart5";
时钟频率=<48000000>;
reg =<0x481a8000 0x2000>;
中断=<45>;
STATUS ="禁用";
DMA =<&EDMA 30 0>、<&EDMA 31 0>;
dma-names ="TX"、"Rx";
};
而 UART 不起作用。
永远不会调用通过内核进行的跟踪 OMAP-8250_DMA_TX_COMPLETE ()。
此外、在 am33xx.dtsi 中、只有 UART 0-2具有指定的 DMA 通道。 其他则不是。 这是由硬件限制造成的吗?
谢谢
你(们)好
我没有看到使用这些 DMA 通道的任何其他模块(实际上、我从另一个未使用的 UART 剪切和粘贴)。
启动期间没有错误、但"dmesg | grep serial"报告说每个器 件都标识为8250、而不是16c750s、这正是 AM335x 使用的(根据此处的 www.ti.com/.../spruh73)。 这意味着在8250_port.c 中、使用 port_8250而不是 port_16570。 不过、对 PORT16570进行硬编码未解决此问题。
静态 const struct serial8250_config uart_config[]={ [port_unknown]={ .name="未知", .fifo_size= 1, .TX_loadsz= 1, }, [port_8250]={ .name="8250", .fifo_size= 1, .TX_loadsz= 1, .................} [PORT_16750]={ .name="TI16750"、 .fifo_size= 64、 .TX_loadsz= 64、 .FCR= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 | UART_FCR7_64byte、 .rxtrig_bytes={1、16、32、56} flags= UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE、 }、
嗯、至少我可以通过以下代码了解为什么将 UART 标识为8250:
/*
*它声称是16C750兼容的、但它有一点不同。
*它具有 EFR 并且没有 FCR7_64byte 位。 AFE (它声称对此进行了处理
*已经)通过 EFR 而不是 MCR 启用。 类型在此设置为8250
*让事情变得更好。 未知不起作用的原因有几个和
*我们不需要自己的类型,因为我们不使用8250的 set_termios()
*或 PM 回调。
*
也就是说、仍然无法使该 DMA 模式正常工作。 (它是否可以是 RS485特定的?