This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

LPC3250 HSUART HELP

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;     */
}


Parents
  • Hi Now i configured for 9600 baud rate. and i sent a text file through hyper terminal. Now i got RDA interrupt but still i got that interrupt for every byte.( which means for each byte program entering into interrupt not for 16 bytes )But expected result is it must be trigger after 16 bytes only (like DMA it has to behave). and one more issue How to read data from buffer if i configured for 16bytes. My doubt is if i read data from buffer after interrupt comes last byte only will display. what abt rest of 15 bytes.

Reply
  • Hi Now i configured for 9600 baud rate. and i sent a text file through hyper terminal. Now i got RDA interrupt but still i got that interrupt for every byte.( which means for each byte program entering into interrupt not for 16 bytes )But expected result is it must be trigger after 16 bytes only (like DMA it has to behave). and one more issue How to read data from buffer if i configured for 16bytes. My doubt is if i read data from buffer after interrupt comes last byte only will display. what abt rest of 15 bytes.

Children
  • "My doubt is if i read data from buffer after interrupt comes last byte only will display."

    Unless the FIFO overruns, you would read the data bytes from the FIFO and you would get the data bytes in the order in which they arrived.

    "But expected result is it must be trigger after 16 bytes only ..."

    So ... accumulate the characters as they arrive (with your interrupt) into a local store. When you have accumulated your 16 bytes, you can trigger your next action. As I said before, it does not then matter whether you then get an interrupt for one character or a few characters.

  • You do not want to get an interrupt after 16 characters in the FIFO, unless the FIFO is larger than 16 characters. There are two reasons for a receive FIFO:
    - less CPU load by picking up multiple characters each time you get into the ISR.
    - support for larger latencies without dropping characters - but that requires that the interrupt gets trigged while the FIFO still has room for more characters.

    But many protocols have messages that are way larger than the size of the receive FIFO, requiring the ISR to move the received data to an intermediary buffer until a full message has been received and can be processed.

  • i want interrupt for trigger level only. if i use DMA i can put less load on CPU. But the UART which i configured is not support DMA on LPC3250(UART6). So i want to use trigger levels for my application. So that if interrupt comes for the trigger level then it will be less load for CPU. Now i am getting interrupt for every character which giving some work for the CPU. i don't want to give job for CPU on this serial port as other processing was running. So please give me solution.

  • Then you need to ensure that the times between characters can never exceed the inter-character timeout!

    Have you actually checked yet whether the inter-character timeout is configurable?

    "it will be less load for CPU"

    If the incoming characters are so widely spaced that you are getting inter-character timeouts, then this is hardly going to be a major load on the CPU - is it?!

  • Hi

    Thanks for earlier support. I'm facing one more issue on GPDMA. I was unable to generate interrupt on DMA.
    1.I configured DMA Channel 0 for UART2 for 4 bytes trigger. But unable to get.

    2.What that channel linked list register will do?

    I have studied the data sheet. But unable to get these things.

    Please help me

    Here i'm attaching the GPDMA configuration what i did.

    GPDMA_SOFT_BREQ |=0x00000100;           // HSUART 2 TX  Selected
            GPDMA_CH0_SRC    =HSU2_RX;      // Selecting Source address
            GPDMA_CH0_DEST   =(unsigned long)&Rx_Buffer_485[0];
            GPDMA_CH0_LLI    =0x00000000;
            GPDMA_CH0_CTRL   = 0x88009001;          // Terminal count interrupt and
                                                    //transfer size 4byts(8bits wide)
            GPDMA_CH0_CFG    |=0x00001008;          // Peripheral to memory trnasaction
            GPDMA_CONFIG     |=0x00000001;          // Enable DMA Controller
    
    

    Thanks
    Eswar