我正在为Linux AT91SAM9260板编写一个AT91SAM9260驱动程序。
当我初始化UART时,RTS信号线会变得很高(1)。我想这将而且应该是RS232操作模式中的标准行为。然而,在RS485模式下,这是不需要的。
我使用的标准功能提供的手臂拱部分,以初始化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引脚上的拉力没有启动。
发布于 2011-03-07 09:52:57
初始化后的高RTS信号似乎是许多平台上的标准行为。它很大程度上取决于启动例程所期望的接口的串行操作模式。
为了防止在运行Linux的ATMEL AT91SAM9260板上出现right,您必须在修改at91_set_X_periph() Pins并注册设备之前将UART置于正确的模式中。
由于LinuxKernel2.6.35版本,ATMEL串行驱动程序支持RS485模式。在此驱动程序中,在将Pins (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);现在Pins们可以把他们的角色屏蔽掉了
at91_set_X_periph(RTS_PIN,0);
https://stackoverflow.com/questions/4956379
复制相似问题