/var/log/messages

Apr 28, 2014 - 1 minute read - Comments - programming

UART 入力とか出力とか (2)

どうも enter が ‘\r’ (0x0d) なのが微妙、という話になっていたり。

文字列を入力して改行契機で出力、な例がありまして

    do {
        while(*UART0_FR & (1 << 4));
            c = * UART0_DR ;
            echo[length] = c & 0xff ;
            length ++;
    } while(c != '\n' && i < 256);

ここで改行を ‘\n’ (0x0a) としてますが自分が使ってる環境だと screen でも minicom でも ‘\r’ (0x0d) になってました。

とりあえず、windows では ‘\n’ が、という話があるので今、以下なカンジになっちゃってます。

    char echo[256];
    int i, c, length;
    while(1) {
        length = 0;
        do {
            while(is_fifo_enable());
            c = uart_getc();
            echo[length] = c & 0xff;
            length++;

            if (c == '\r' || '\n') {
                break;
            }

        } while(length < 256);

        for(i = 0; i < length; i++) {
            uart_putc(echo[i]);
            if (echo[i] == '\r')
                uart_putc('\n');
        }
    }

動作試験はしてないです。諸々確認して追記の方向。

動作試験

これ、minicom だと改行付加な設定すれば良いのかも。と言いつつ盛り込んで動作確認してみたのですが、いちいち文字が出力されてます。ちなみに改行ですが、minicom では C-a a で Add linefeed を on にしとけば ‘\r’ が出力されました。

ちなみに入力ループの脱出な条件を以下なことしてて

            if (c == '\r' || '\n') {
                break;
            }

一文字づつ出力、になってました。とほほ。

とりあえず

U-boot が云々、という話があったりするのでそちら確認してみようかなと思ってます。