Hi I was unable to get data properly through High Speed uart's. as per my program i was able to get only 64 bytes properly after that not getting. Here i am posting the program Please take a look and give me the Directions Thank You
int main(void) { unsigned char i; init_HSUART1(); while(1) { //HSUART1_senddata(HSUART1_receivedata()); HSUART1_senddata('1'); HSUART1_senddata('2'); HSUART1_senddata('3'); HSUART1_senddata('4'); HSUART1_senddata('5'); } } void init_HSUART1 (void) { HSU1_RATE =192;// baud rate 115200 for 13MHz CLK HSU1_CTRL= 0x00001C00; } /**************************************************************************************** ** DESCRIPTION : This function waits until its receives a character from the terminal. ** ** RETURN : Character received from the terminal *****************************************************************************************/ unsigned char HSUART1_receivedata(void) { unsigned char gch; while((HSU1_RX&0x0100)==0x0100); //cheak for data availability gch = HSU1_RX; // Storing data into temp variable 'gch' return(gch); // Return the data } /************************************************************************************ ** DESCRIPTION : This function transmits the given character to the terminal. * ** * ** RETURN : None * ************************************************************************************/ void HSUART1_senddata(unsigned char pch) { HSU1_TX=pch; // while((HSU1_IIR&0x01)==0x01); // Transmiting data into buffer /* if((HSU1_LEVEL&0xFF00)==0x0400) { while((HSU1_LEVEL&0xFF00)==0x0000); } else{} */ return ; /*if((HSU1_IIR&0x01)==0x01) { HSU1_IIR|=0x01; // Clear or ACK the interrupt HSU1_TX=pch; // Transmiting data into buffer } return; */ }
If you're getting a timeout interrupt, then the characters are coming in with a (relatively large) delay somewhere.
Getting an interrupt like this is useful and you should probably cope with it anyway. Consider what would happen if one of your 4 bytes 'goes missing' (which is not unheard of when using serial communication). You might only receive 3 of your 4 bytes and you will potentially be waiting forever for the 4th byte. So you should implement some sort of timeout check anyway.
It looks like you've got a relatively small amount of communication, so it may be simpler to buffer up characters into a local store as you receive them. Then, it won't matter whether you receive a single interrupt when the FIFO trigger is reached or when you have accumulated your data from a series of interrupts.