UART_getc () не работает правильно с символом новой строки - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь написать некоторые основные функции ввода / вывода: UART_getc, UART_putc, UART_gets и UART_puts. UART_getc и putc работают хорошо, пока я не введу символ новой строки. Вместо обычной новой строки (курсор находится в самой левой части строки), она создает новую строку и пробел позади нее, поэтому курсор находится в середине экрана (рисунок) фотография Не могли бы вы показать мне, что не так с моим кодом и как это исправить?

    #include <uart.h>

    // ======================================================================

    #define IO_READ(addr)           (*(volatile unsigned int *)(addr))
    #define IO_WRITE(addr, val)     (*(volatile unsigned int *)(addr) = (val))

    // ======================================================================

    #define UART1_RHR_REG   0x44e09000      // UART1 Receive holding register
    #define UART1_THR_REG   0x44e09000      // UART1 Transmit holding register
    #define UART1_LSR_REG   0x44e09014      // UART1 Line status register

    #define LSR_RX_FIFO_E   0x01    // LSR receive fifo empty
    #define LSR_TX_FIFO_E   0x20    // LSR transmit fifo empty

    // ======================================================================

    int UART_getc(void)
    {
    unsigned int c;

    while((IO_READ(UART1_LSR_REG) & LSR_RX_FIFO_E) == 0);  //if fifo is 
                                                           //empty, wait

    c = IO_READ(UART1_RHR_REG);                            //if not empty

    UART_putc(c);

    return (int)c;
    }
    //====================================================================
    int UART_putc(int c)
    {
    while(IO_READ(UART1_LSR_REG) & (LSR_TX_FIFO_E) == 0);  //if fifo is 
                                                           //full, wait

    IO_WRITE(UART1_THR_REG, c);                            //if not full

    return c;
    }
...