UART_getc()无法与换行符一起正常使用

时间:2019-05-20 22:00:15

标签: c input output uart

我正在尝试编写一些基本的I / O函数:UART_getc,UART_putc,UART_gets和UART_puts。在输入新的换行符之前,UART_getc和putc都可以正常工作。而不是普通的换行符(光标位于该行的最左端),它创建了一个新行,并在其后面留有空白,因此光标位于屏幕的中间(图片) picture 您能告诉我我的代码有什么问题以及如何解决吗?

    #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;
    }

0 个答案:

没有答案