Linux UART初始化:防止UART拉高RTS
我正在为Linux上的ARM AT91SAM9260板编写RS485驱动程序 当我初始化UART时,RTS信号线变高(1)。我想这应该是RS232操作模式下的标准行为。然而,在RS485模式下,这是不需要的 我正在使用arm arch部分提供的标准函数初始化UART。因此,重要的步骤是:Linux UART初始化:防止UART拉高RTS,linux,serial-port,arm,uart,Linux,Serial Port,Arm,Uart,我正在为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: // >>
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引脚PC8,0
RTS引脚上的上拉未激活
- 为什么UART将RTS设置为高? 就因为这是标准 RS232模式下的行为
- 这不是一个更好的标准吗 UART将保持沉默,直到 是否明确设置了操作模式
/* 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);
现在,可以将管脚与它们的角色混合
at91_设置_X_外围(RTS_引脚,0)