- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I'm new to to this forum and here's a UART related question. Im using a polling loop like this one to read a byte from the UART register: 1. status = IORD_ALTERA_AVALON_UART_STATUS(UART_DEBUG_BASE); if (status == 0x60) then goto step# 2 else go back to step# 1 2. ch = (char)IORD_ALTERA_AVALON_UART_RXDATA(UART_DEBUG_BASE); 3. What do I do here to reset something in the UART before going back to step# 1 so as NOT to get the last character that I just read in step# 2?Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Try this:
int uart_read(int base, char *ptr, int len, int flags){
int block;
unsigned int status;
block = 1;//!(flags & O_NONBLOCK);
do{
status = IORD_ALTERA_AVALON_UART_STATUS(base);
/* clear any error flags */
IOWR_ALTERA_AVALON_UART_STATUS(base, 0);
if (status & ALTERA_AVALON_UART_CONTROL_RRDY_MSK){
ptr = IORD_ALTERA_AVALON_UART_RXDATA(base);
if (!(status & (ALTERA_AVALON_UART_STATUS_PE_MSK |
ALTERA_AVALON_UART_STATUS_FE_MSK))){
return 1;
}
}
}while (block);
return 0;
}
It's not a completed function but I believe it illustrates what you're missing.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page