gpt4 book ai didi

linux - UART 初始化 : Prevent UART to pull RTS high

转载 作者:IT王子 更新时间:2023-10-29 00:32:19 28 4
gpt4 key购买 nike

我正在为 Linux 上的 ARM AT91SAM9260 板编写 RS485 驱动程序。

当我初始化 UART 时,RTS 信号线变高 (1)。我想这会而且应该是 RS232 操作模式下的标准行为。然而,在 RS485 模式下,这是不需要的。

我正在使用 arm-arch 部分提供的标准函数来初始化 UART。因此,重要的步骤是:

at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
//consisting of:

// >> configure/mux the pins
at91_set_A_periph(AT91_PIN_PB10, 1); /* TXD */
at91_set_A_periph(AT91_PIN_PB11, 0); /* RXD */

if (pins & ATMEL_UART_RTS)
at91_set_B_periph(AT91_PIN_PC8, 0); /* RTS */
if (pins & ATMEL_UART_CTS)
at91_set_B_periph(AT91_PIN_PC10, 0); /* CTS */

// >> associate the clock
axm_clock_associate("usart3_clk", &pdev->dev, "usart");

// >> et voilà

如你所见

at91_set_B_periph(AT91_PIN_PC8, 0);

RTS 引脚上的上拉电阻未激活。

  • 为什么 UART 将 RTS 设置为高电平?只是因为这将是标准RS232 模式下的行为?

  • 这不是一个更好的标准吗UART保持沉默直到
    明确设置了操作模式?

最佳答案

初始化后的高 RTS 信号似乎是许多平台上的标准行为。这主要取决于启动例程预期接口(interface)采用哪种串行操作模式。

为了防止运行 Linux 的 ATMEL AT91SAM9260 板上的 RTS-high,您必须先将 UART 置于正确的模式,然后再使用 at91_set_X_periph() 引脚并注册设备。

从 Linux 内核版本 2.6.35 开始,ATMEL serial driver支持RS485模式。在此驱动程序中,在将引脚 (GPIO) 设置为该角色之前正确配置了 UART。

对于运行较旧 Linux 版本的嵌入式设备,我使用以下代码行解决了问题:

/* write control flags */

control |= ATMEL_US_RTSEN;
mode |= ATMEL_US_USMODE_RS485;

UART_PUT(uartbaseaddr, ATMEL_US_CR, control);
UART_PUT(uartbaseaddr, ATMEL_US_MR,mode);

现在可以将 Pin 图与它们的角色混合使用

at91_set_X_periph(RTS_PIN, 0);

关于linux - UART 初始化 : Prevent UART to pull RTS high,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4956379/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com