Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
9 years ago

operate UART w/ NIOS wo/ HAL

The following code should make a loopback between UART RX and TX (echo).

However, it seems that first N typed chars (from PC towards the board) are not successfully absorbed.

After N characters (few dozens, I guess), it works correctly (I get an echo for each character I type).

Any ideas?

# include "altera_avalon_uart_regs.h"# include "system.h"
typedef unsigned char      u8;
typedef unsigned short     u16;
typedef unsigned int       u32;
# define UART_BASE        UART_0_BASE
int main ()
{
    u8  uart_rx_char;
    u16 uart_st_reg;
    while (1) {
        uart_st_reg = (u16)IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
        if (uart_st_reg & ALTERA_AVALON_UART_STATUS_RRDY_MSK) {
            uart_rx_char = (u8)IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
            IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, uart_rx_char);
        }
    }
    return 0;
}

1 Reply

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi,

    try to check if transmit is ready before you write in your txdata, and clear the status register in the begining of your while.