LPCOpen Platform  v1.03
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
uart_8xx.c
Go to the documentation of this file.
1 /*
2  * @brief LPC8xx UART driver
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * All rights reserved.
7  *
8  * @par
9  * Software that is described herein is for illustrative purposes only
10  * which provides customers with programming information regarding the
11  * LPC products. This software is supplied "AS IS" without any warranties of
12  * any kind, and NXP Semiconductors and its licenser disclaim any and
13  * all warranties, express or implied, including all implied warranties of
14  * merchantability, fitness for a particular purpose and non-infringement of
15  * intellectual property rights. NXP Semiconductors assumes no responsibility
16  * or liability for the use of the software, conveys no license or rights under any
17  * patent, copyright, mask work right, or any other intellectual property rights in
18  * or to any products. NXP Semiconductors reserves the right to make changes
19  * in the software without notification. NXP Semiconductors also makes no
20  * representation or warranty that such application will be suitable for the
21  * specified use without further testing or modification.
22  *
23  * @par
24  * Permission to use, copy, modify, and distribute this software and its
25  * documentation is hereby granted, under NXP Semiconductors' and its
26  * licensor's relevant copyrights in the software, without fee, provided that it
27  * is used in conjunction with NXP Semiconductors microcontrollers. This
28  * copyright, permission, and disclaimer notice must appear in all copies of
29  * this code.
30  */
31 
32 #include "chip.h"
33 
34 /*****************************************************************************
35  * Private types/enumerations/variables
36  ****************************************************************************/
37 
38 /*****************************************************************************
39  * Public types/enumerations/variables
40  ****************************************************************************/
41 
42 /*****************************************************************************
43  * Private functions
44  ****************************************************************************/
45 
46 /*****************************************************************************
47  * Public functions
48  ****************************************************************************/
49 
50 /* Initialize the UART peripheral */
52 {
53  /* Clear the interrupt */
55 
56  /* Enable the UART */
57  IP_UART_Init(pUART);
58 }
59 
60 /* Set baud rate for UART */
62 {
63  uint32_t err, uart_fra_multiplier, baudRateGenerator;
64  uint32_t systemCoreClock = Chip_Clock_GetMainClockRate();
65 
66  /* Calculate baudrate generator value */
67  baudRateGenerator = systemCoreClock / (16 * baudrate);
68  err = systemCoreClock - baudRateGenerator * 16 * baudrate;
69  uart_fra_multiplier = (err * 0xFF) / (baudRateGenerator * 16 * baudrate);
70  IP_UART_SetBaudRate(pUART, baudRateGenerator - 1); /*baud rate */
71  Chip_SYSCTL_SetUSARTFRGDivider(0xFF); /* value 0xFF is always used */
72  Chip_SYSCTL_SetUSARTFRGMultiplier(uart_fra_multiplier);
73 }
74 
75 /* Transmit a 8 bits data */
76 Status Chip_UART_SendByte(LPC_USART_T *pUART, uint8_t data)
77 {
78  if (IP_UART_GetStatus(pUART) & (TXRDY)) {
79  IP_UART_Transmit(pUART, data);
80  return SUCCESS;
81  }
82  return ERROR;
83 }
84 
85 /* Receive a 8 bits data */
87 {
88  if (IP_UART_GetStatus(pUART) & (RXRDY)) {
89  *Data = IP_UART_Receive(pUART);
90  return SUCCESS;
91  }
92  return ERROR;
93 }