我正在尝试编写一些基本的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;
}