Я пытаюсь написать некоторые основные функции ввода / вывода: 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;
}