2017-03-09 9 views
-1

私はUART(FPGA上に実装された)上で文字列を送信して受信するドライバを作成しようとしています。 UARTのレジスタマップの画像を示します。 enter image description here 文字列を送信する関数を記述することができました。ステータスレジスタの送信リードビット(trdy)をチェックし、セットされている場合は、データをtxdataレジスタに格納します。ドライバがレジスタマップを使用してUART経由でデータを文字列で読み取る

#define UART_BASE 0x00021000 

int putstring(char *str) { 

    volatile uint32_t *uart = (volatile uint32_t*) UART_BASE; 

    while (1) 
    { 
     while (*str != '\0') 
     { 
      while ((uart[2] & (1<<6)) == 0); 
      uart[1] = *str; 
      str++; 
      } 
     } 
} 

私の質問は、今は文字列を読み込もうとしていますが、私はロジックに苦しんでいます。私はそれがユーザーがEnterを押すまで文字を読み続けることを望みます。これはメニューのためのものです。

私は誰かが助言できるかどうか疑問に思っていましたか?

void getstring(char *str) { 

volatile uint32_t *uart = (volatile uint32_t*) UART_BASE; 

char c = 0; 
do 
{ 
    while ((uart[2] & (1<<5)) == 0); 
    c = uart[0]; 
    *str++ = c; 
} 
while (c!='\0'); 


} 

これは私の主な機能です。 "test"という単語をコンソールに出力します。その後、abCtrl - @と入力してから、コンソールにabと表示されることを期待していましたが、動作しません。

私は何か愚かな間違っているのですか?

おかげ

int main(void) 
{ 
    char output[] = "Test"; 
    char input[2]; 

    putstring(output); 

    getstring(input); 

    putstring(input); 

    return 0; 
} 
+0

複数の同じ質問をしないでください。質問に追加する情報がある場合は、質問を編集します。 – duskwuff

答えて

0

これはstrのに文字列をお読みください。シンボル「\ 0」が受信されるまで

char c = 0; 
do 
{ 
     while ((uart[2] & (1<<5)) == 0); 
     c = uart[0]; 
     *str++ = c; 
} while (c!='\0'); 
+0

ご協力いただきありがとうございます。私は元の質問を更新しました。私は 'main()'で 'getstring()'と 'putstring()'の両方を使ってコンソールに入力をエコーし​​ようとしています。何か案は? – scalauser

関連する問題