2011-02-10 46 views
4

Linux上のARM AT91SAM9260ボード用のRS485ドライバを作成しています。UARTの初期化:UARTによるRTSのプルアップの防止

UARTを初期化すると、RTS信号線がハイ(1)になります。私はこれがRS232動作モードの標準的な動作でなければならないと思います。しかしRS485モードでは、これは望ましくない。

私はUARTを初期化するためにarm-archセクションによって提供される標準機能を使用しています。そのための重要なステップは次のとおりです。

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のためのより良い標準ではないでしょうか?

答えて

3

初期化後の高いRTS信号は、多くのプラットフォームで標準的な動作であるようです。マンチェスターは、どのシリアル動作モードが起動ルーチンによってインタフェースに予期されるかに依存します。

Linuxを実行するATMEL AT91SAM9260ボードでRTS-highを防止するには、ピンをmuxしてデバイスを登録する前に、UARTを適切なモードにする必要があります。

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); 

今のピンがその役割

at91_set_X_periphを多重化することができます(RTS_PIN、0);