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 が沈黙を保つことがより良い標準ではないでしょうか?