Altera_Forum
Honored Contributor
16 years agoUART not sending characters
I started with the Cylcone 2 development a few months back. If I send a string of 800 characters some of them are not received at the host even at 9600. I tried three different UARTs. Tha avalon version and 2 from open cores same issue. The project was put on hold and we got Cyclone 3 development board. I am having the same issue with the open cores version we decided to use. Now if I add some rather long delays it works. Anyone see anything wrong?
Thanks in advance void SendChar(char TheChar) { int i;# ifdef AVALON_UART i = IORD_ALTERA_AVALON_UART_STATUS (UART_A_BASE); while ((i & 0x40) == 0) { i = IORD_ALTERA_AVALON_UART_STATUS (UART_A_BASE); } IOWR_ALTERA_AVALON_UART_TXDATA (UART_A_BASE, TheChar);# else while ((IORD_8DIRECT(UART_A_BASE, UARTxLSR) & 0x40) == 0) { } IOWR_8DIRECT(UART_A_BASE, UARTxTHR, TheChar);# endif } int main(void) { int delay_count = 0;# ifdef USE_DELAY while(delay_count < 0x000500000) { delay_count++; } delay_count = 0; while(delay_count < 0x000500000) { delay_count++; }# endif# ifdef AVALON_UART# else // set line control reg to allow writing to baud divisor IOWR_8DIRECT (UART_A_BASE, 3, 0x80); // baud divisor = (clk) div (baud) div (16) // 50M/115200/16 = 27.127 = 0x001B // 30M/115200/16 = 16.276 = 0x0010 // 30M/9300/16 = 195 IOWR_8DIRECT (UART_A_BASE, 1, 0x00); // baud div hi IOWR_8DIRECT (UART_A_BASE, 0, 16); // baud div lo // set line control reg for 8 n IOWR_8DIRECT (UART_A_BASE, 3, 0x03);# endif // sent some lines as fast as you can SendChar(10); SendChar(13); SendChar(10); SendChar(13); SendChar(10); SendChar(13); for (int j = 0; j < 10; j++) { SendChar(0x30 + j); SendChar(' '); for (int i = 0; i < 26; i++) { SendChar(65 + i); SendChar(65 + i); SendChar(65 + i); } }# ifdef USE_DELAY delay_count = 0; while(delay_count < 0x000500000) { delay_count++; }# endif SendChar(10); SendChar(13); for (int j = 0; j < 10; j++) {# ifdef USE_DELAY delay_count = 0; while(delay_count < 0x00050000) { delay_count++; }# endif SendChar(0x30 + j); SendChar(' '); for (int i = 0; i < 26; i++) { SendChar(65 + i); SendChar(65 + i); SendChar(65 + i); } } // end while(1) loop while(1) { } return(0); } Typical output with delay. I had to replace the space with a . to try and keep formatting as displaed on 80 character terminal 0.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 1.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 2.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 3.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 4.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 7.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 8.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 9.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 0.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 1.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 2.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 3.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 4.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 5.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 6.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 7.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 8.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 9.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ Typical output without delay 0.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 1.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 2.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 3.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ 4.AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSST2.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ3.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ4.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ5.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ6.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ7.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ8.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ9.AAABBBCCCDDDEEEFFFGGG HHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ