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

how to set LPC_UART1->LCR value

i am using lpc 1768 but i dont know how to set how to set LPC_UART1->LCR=?? value for 4800 baud,8 data bits,odd parity,1 stop.I hope that someone help me. Thank you.

Parents
  • \mcb1700.code_.bundle.lpc17xx.keil_\keil_examples\UART

    /****************************************************************************
     *   $Id:: uart.c 5751 2010-11-30 23:56:11Z usb00423                        $
     *   Project: NXP LPC17xx UART example
     *
     *   Description:
     *     This file contains UART code example which include UART initialization,
     *     UART interrupt handler, and APIs for UART access.
     *
     ****************************************************************************
     * Software that is described herein is for illustrative purposes only
     * which provides customers with programming information regarding the
     * products. This software is supplied "AS IS" without any warranties.
     * NXP Semiconductors assumes no responsibility or liability for the
     * use of the software, conveys no license or title under any patent,
     * copyright, or mask work right to the product. NXP Semiconductors
     * reserves the right to make changes in the software without
     * notification. NXP Semiconductors also make no representation or
     * warranty that such application will be suitable for the specified
     * use without further testing or modification.
    ****************************************************************************/
    
    /*****************************************************************************
    ** Function name:               UARTInit
    **
    ** Descriptions:                Initialize UART port, setup pin select,
    **                                              clock, parity, stop bits, FIFO, etc.
    **
    ** parameters:                  portNum(0 or 1) and UART baudrate
    ** Returned value:              true or false, return false only if the
    **                                              interrupt handler can't be installed to the
    **                                              VIC table
    **
    *****************************************************************************/
    uint32_t UARTInit( uint32_t PortNum, uint32_t baudrate )
    {
      uint32_t Fdiv;
      uint32_t pclkdiv, pclk;
    
      if ( PortNum == 0 )
      {
            LPC_PINCON->PINSEL0 &= ~0x000000F0;
            LPC_PINCON->PINSEL0 |= 0x00000050;  /* RxD0 is P0.3 and TxD0 is P0.2 */
            /* By default, the PCLKSELx value is zero, thus, the PCLK for
            all the peripherals is 1/4 of the SystemFrequency. */
            /* Bit 6~7 is for UART0 */
            pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
            switch ( pclkdiv )
            {
              case 0x00:
              default:
                    pclk = SystemFrequency/4;
                    break;
              case 0x01:
                    pclk = SystemFrequency;
                    break;
              case 0x02:
                    pclk = SystemFrequency/2;
                    break;
              case 0x03:
                    pclk = SystemFrequency/8;
                    break;
            }
    
        LPC_UART0->LCR = 0x83;           /* 8 bits, no Parity, 1 Stop bit */
            Fdiv = ( pclk / 16 ) / baudrate ;       /*baud rate */
        LPC_UART0->DLM = Fdiv / 256;
        LPC_UART0->DLL = Fdiv % 256;
            LPC_UART0->LCR = 0x03;               /* DLAB = 0 */
        LPC_UART0->FCR = 0x07;           /* Enable and reset TX and RX FIFO. */
    
            NVIC_EnableIRQ(UART0_IRQn);
    
        LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;   /* Enable UART0 interrupt */
        return (TRUE);
      }
      else if ( PortNum == 1 )
      {
            LPC_PINCON->PINSEL4 &= ~0x0000000F;
            LPC_PINCON->PINSEL4 |= 0x0000000A;   /* Enable RxD1 P2.1, TxD1 P2.0 */
    
            /* By default, the PCLKSELx value is zero, thus, the PCLK for
            all the peripherals is 1/4 of the SystemFrequency. */
            /* Bit 8,9 are for UART1 */
            pclkdiv = (LPC_SC->PCLKSEL0 >> 8) & 0x03;
            switch ( pclkdiv )
            {
              case 0x00:
              default:
                    pclk = SystemFrequency/4;
                    break;
              case 0x01:
                    pclk = SystemFrequency;
                    break;
              case 0x02:
                    pclk = SystemFrequency/2;
                    break;
              case 0x03:
                    pclk = SystemFrequency/8;
                    break;
            }
    
        LPC_UART1->LCR = 0x83;           /* 8 bits, no Parity, 1 Stop bit */
            Fdiv = ( pclk / 16 ) / baudrate ;       /*baud rate */
        LPC_UART1->DLM = Fdiv / 256;
        LPC_UART1->DLL = Fdiv % 256;
            LPC_UART1->LCR = 0x03;               /* DLAB = 0 */
        LPC_UART1->FCR = 0x07;           /* Enable and reset TX and RX FIFO. */
    
            NVIC_EnableIRQ(UART1_IRQn);
    
        LPC_UART1->IER = IER_RBR | IER_THRE | IER_RLS;   /* Enable UART1 interrupt */
        return (TRUE);
      }
      return( FALSE );
    }
    

Reply
  • \mcb1700.code_.bundle.lpc17xx.keil_\keil_examples\UART

    /****************************************************************************
     *   $Id:: uart.c 5751 2010-11-30 23:56:11Z usb00423                        $
     *   Project: NXP LPC17xx UART example
     *
     *   Description:
     *     This file contains UART code example which include UART initialization,
     *     UART interrupt handler, and APIs for UART access.
     *
     ****************************************************************************
     * Software that is described herein is for illustrative purposes only
     * which provides customers with programming information regarding the
     * products. This software is supplied "AS IS" without any warranties.
     * NXP Semiconductors assumes no responsibility or liability for the
     * use of the software, conveys no license or title under any patent,
     * copyright, or mask work right to the product. NXP Semiconductors
     * reserves the right to make changes in the software without
     * notification. NXP Semiconductors also make no representation or
     * warranty that such application will be suitable for the specified
     * use without further testing or modification.
    ****************************************************************************/
    
    /*****************************************************************************
    ** Function name:               UARTInit
    **
    ** Descriptions:                Initialize UART port, setup pin select,
    **                                              clock, parity, stop bits, FIFO, etc.
    **
    ** parameters:                  portNum(0 or 1) and UART baudrate
    ** Returned value:              true or false, return false only if the
    **                                              interrupt handler can't be installed to the
    **                                              VIC table
    **
    *****************************************************************************/
    uint32_t UARTInit( uint32_t PortNum, uint32_t baudrate )
    {
      uint32_t Fdiv;
      uint32_t pclkdiv, pclk;
    
      if ( PortNum == 0 )
      {
            LPC_PINCON->PINSEL0 &= ~0x000000F0;
            LPC_PINCON->PINSEL0 |= 0x00000050;  /* RxD0 is P0.3 and TxD0 is P0.2 */
            /* By default, the PCLKSELx value is zero, thus, the PCLK for
            all the peripherals is 1/4 of the SystemFrequency. */
            /* Bit 6~7 is for UART0 */
            pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
            switch ( pclkdiv )
            {
              case 0x00:
              default:
                    pclk = SystemFrequency/4;
                    break;
              case 0x01:
                    pclk = SystemFrequency;
                    break;
              case 0x02:
                    pclk = SystemFrequency/2;
                    break;
              case 0x03:
                    pclk = SystemFrequency/8;
                    break;
            }
    
        LPC_UART0->LCR = 0x83;           /* 8 bits, no Parity, 1 Stop bit */
            Fdiv = ( pclk / 16 ) / baudrate ;       /*baud rate */
        LPC_UART0->DLM = Fdiv / 256;
        LPC_UART0->DLL = Fdiv % 256;
            LPC_UART0->LCR = 0x03;               /* DLAB = 0 */
        LPC_UART0->FCR = 0x07;           /* Enable and reset TX and RX FIFO. */
    
            NVIC_EnableIRQ(UART0_IRQn);
    
        LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;   /* Enable UART0 interrupt */
        return (TRUE);
      }
      else if ( PortNum == 1 )
      {
            LPC_PINCON->PINSEL4 &= ~0x0000000F;
            LPC_PINCON->PINSEL4 |= 0x0000000A;   /* Enable RxD1 P2.1, TxD1 P2.0 */
    
            /* By default, the PCLKSELx value is zero, thus, the PCLK for
            all the peripherals is 1/4 of the SystemFrequency. */
            /* Bit 8,9 are for UART1 */
            pclkdiv = (LPC_SC->PCLKSEL0 >> 8) & 0x03;
            switch ( pclkdiv )
            {
              case 0x00:
              default:
                    pclk = SystemFrequency/4;
                    break;
              case 0x01:
                    pclk = SystemFrequency;
                    break;
              case 0x02:
                    pclk = SystemFrequency/2;
                    break;
              case 0x03:
                    pclk = SystemFrequency/8;
                    break;
            }
    
        LPC_UART1->LCR = 0x83;           /* 8 bits, no Parity, 1 Stop bit */
            Fdiv = ( pclk / 16 ) / baudrate ;       /*baud rate */
        LPC_UART1->DLM = Fdiv / 256;
        LPC_UART1->DLL = Fdiv % 256;
            LPC_UART1->LCR = 0x03;               /* DLAB = 0 */
        LPC_UART1->FCR = 0x07;           /* Enable and reset TX and RX FIFO. */
    
            NVIC_EnableIRQ(UART1_IRQn);
    
        LPC_UART1->IER = IER_RBR | IER_THRE | IER_RLS;   /* Enable UART1 interrupt */
        return (TRUE);
      }
      return( FALSE );
    }
    

Children
  • Dear Friends

    Thank for your replies. i have datasheet,usermanual,keil sample code etc see here i used UART based sensor. that datasheet was gave 4800 baud ,8data bytes,1stop bit for receive that values

    first i tried in hyperterminal everything is fine i modify the keil receiver code. according to that LPC_UART0->LCR = 0xb8. i got data but that value was different compare than microcontroller