Matt Lloyd
/
DMA_UART_example
Example of UART-DMA transfers taken form the npx cmsis driver libary
lpc17xx_uart.c@0:7480abd3b63b, 2010-09-30 (annotated)
- Committer:
- dpslwk
- Date:
- Thu Sep 30 20:13:24 2010 +0000
- Revision:
- 0:7480abd3b63b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dpslwk | 0:7480abd3b63b | 1 | /***********************************************************************//** |
dpslwk | 0:7480abd3b63b | 2 | * @file lpc17xx_uart.c |
dpslwk | 0:7480abd3b63b | 3 | * @brief Contains all functions support for UART firmware library on LPC17xx |
dpslwk | 0:7480abd3b63b | 4 | * @version 3.0 |
dpslwk | 0:7480abd3b63b | 5 | * @date 18. June. 2010 |
dpslwk | 0:7480abd3b63b | 6 | * @author NXP MCU SW Application Team |
dpslwk | 0:7480abd3b63b | 7 | ************************************************************************** |
dpslwk | 0:7480abd3b63b | 8 | * Software that is described herein is for illustrative purposes only |
dpslwk | 0:7480abd3b63b | 9 | * which provides customers with programming information regarding the |
dpslwk | 0:7480abd3b63b | 10 | * products. This software is supplied "AS IS" without any warranties. |
dpslwk | 0:7480abd3b63b | 11 | * NXP Semiconductors assumes no responsibility or liability for the |
dpslwk | 0:7480abd3b63b | 12 | * use of the software, conveys no license or title under any patent, |
dpslwk | 0:7480abd3b63b | 13 | * copyright, or mask work right to the product. NXP Semiconductors |
dpslwk | 0:7480abd3b63b | 14 | * reserves the right to make changes in the software without |
dpslwk | 0:7480abd3b63b | 15 | * notification. NXP Semiconductors also make no representation or |
dpslwk | 0:7480abd3b63b | 16 | * warranty that such application will be suitable for the specified |
dpslwk | 0:7480abd3b63b | 17 | * use without further testing or modification. |
dpslwk | 0:7480abd3b63b | 18 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 19 | |
dpslwk | 0:7480abd3b63b | 20 | /* Peripheral group ----------------------------------------------------------- */ |
dpslwk | 0:7480abd3b63b | 21 | /** @addtogroup UART |
dpslwk | 0:7480abd3b63b | 22 | * @{ |
dpslwk | 0:7480abd3b63b | 23 | */ |
dpslwk | 0:7480abd3b63b | 24 | |
dpslwk | 0:7480abd3b63b | 25 | /* Includes ------------------------------------------------------------------- */ |
dpslwk | 0:7480abd3b63b | 26 | #include "lpc17xx_uart.h" |
dpslwk | 0:7480abd3b63b | 27 | #include "lpc17xx_clkpwr.h" |
dpslwk | 0:7480abd3b63b | 28 | |
dpslwk | 0:7480abd3b63b | 29 | /* If this source file built with example, the LPC17xx FW library configuration |
dpslwk | 0:7480abd3b63b | 30 | * file in each example directory ("lpc17xx_libcfg.h") must be included, |
dpslwk | 0:7480abd3b63b | 31 | * otherwise the default FW library configuration file must be included instead |
dpslwk | 0:7480abd3b63b | 32 | */ |
dpslwk | 0:7480abd3b63b | 33 | #ifdef __BUILD_WITH_EXAMPLE__ |
dpslwk | 0:7480abd3b63b | 34 | #include "lpc17xx_libcfg.h" |
dpslwk | 0:7480abd3b63b | 35 | #else |
dpslwk | 0:7480abd3b63b | 36 | #include "lpc17xx_libcfg_default.h" |
dpslwk | 0:7480abd3b63b | 37 | #endif /* __BUILD_WITH_EXAMPLE__ */ |
dpslwk | 0:7480abd3b63b | 38 | |
dpslwk | 0:7480abd3b63b | 39 | |
dpslwk | 0:7480abd3b63b | 40 | #ifdef _UART |
dpslwk | 0:7480abd3b63b | 41 | |
dpslwk | 0:7480abd3b63b | 42 | /* Private Functions ---------------------------------------------------------- */ |
dpslwk | 0:7480abd3b63b | 43 | |
dpslwk | 0:7480abd3b63b | 44 | static Status uart_set_divisors(LPC_UART_TypeDef *UARTx, uint32_t baudrate); |
dpslwk | 0:7480abd3b63b | 45 | |
dpslwk | 0:7480abd3b63b | 46 | |
dpslwk | 0:7480abd3b63b | 47 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 48 | * @brief Determines best dividers to get a target clock rate |
dpslwk | 0:7480abd3b63b | 49 | * @param[in] UARTx Pointer to selected UART peripheral, should be: |
dpslwk | 0:7480abd3b63b | 50 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 51 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 52 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 53 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 54 | * @param[in] baudrate Desired UART baud rate. |
dpslwk | 0:7480abd3b63b | 55 | * @return Error status, could be: |
dpslwk | 0:7480abd3b63b | 56 | * - SUCCESS |
dpslwk | 0:7480abd3b63b | 57 | * - ERROR |
dpslwk | 0:7480abd3b63b | 58 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 59 | static Status uart_set_divisors(LPC_UART_TypeDef *UARTx, uint32_t baudrate) |
dpslwk | 0:7480abd3b63b | 60 | { |
dpslwk | 0:7480abd3b63b | 61 | Status errorStatus = ERROR; |
dpslwk | 0:7480abd3b63b | 62 | |
dpslwk | 0:7480abd3b63b | 63 | uint32_t uClk = 0; |
dpslwk | 0:7480abd3b63b | 64 | uint32_t calcBaudrate = 0; |
dpslwk | 0:7480abd3b63b | 65 | uint32_t temp = 0; |
dpslwk | 0:7480abd3b63b | 66 | |
dpslwk | 0:7480abd3b63b | 67 | uint32_t mulFracDiv, dividerAddFracDiv; |
dpslwk | 0:7480abd3b63b | 68 | uint32_t diviser = 0 ; |
dpslwk | 0:7480abd3b63b | 69 | uint32_t mulFracDivOptimal = 1; |
dpslwk | 0:7480abd3b63b | 70 | uint32_t dividerAddOptimal = 0; |
dpslwk | 0:7480abd3b63b | 71 | uint32_t diviserOptimal = 0; |
dpslwk | 0:7480abd3b63b | 72 | |
dpslwk | 0:7480abd3b63b | 73 | uint32_t relativeError = 0; |
dpslwk | 0:7480abd3b63b | 74 | uint32_t relativeOptimalError = 100000; |
dpslwk | 0:7480abd3b63b | 75 | |
dpslwk | 0:7480abd3b63b | 76 | /* get UART block clock */ |
dpslwk | 0:7480abd3b63b | 77 | if (UARTx == (LPC_UART_TypeDef *)LPC_UART0) |
dpslwk | 0:7480abd3b63b | 78 | { |
dpslwk | 0:7480abd3b63b | 79 | uClk = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_UART0); |
dpslwk | 0:7480abd3b63b | 80 | } |
dpslwk | 0:7480abd3b63b | 81 | else if (UARTx == (LPC_UART_TypeDef *)LPC_UART1) |
dpslwk | 0:7480abd3b63b | 82 | { |
dpslwk | 0:7480abd3b63b | 83 | uClk = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_UART1); |
dpslwk | 0:7480abd3b63b | 84 | } |
dpslwk | 0:7480abd3b63b | 85 | else if (UARTx == LPC_UART2) |
dpslwk | 0:7480abd3b63b | 86 | { |
dpslwk | 0:7480abd3b63b | 87 | uClk = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_UART2); |
dpslwk | 0:7480abd3b63b | 88 | } |
dpslwk | 0:7480abd3b63b | 89 | else if (UARTx == LPC_UART3) |
dpslwk | 0:7480abd3b63b | 90 | { |
dpslwk | 0:7480abd3b63b | 91 | uClk = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_UART3); |
dpslwk | 0:7480abd3b63b | 92 | } |
dpslwk | 0:7480abd3b63b | 93 | |
dpslwk | 0:7480abd3b63b | 94 | |
dpslwk | 0:7480abd3b63b | 95 | uClk = uClk >> 4; /* div by 16 */ |
dpslwk | 0:7480abd3b63b | 96 | /* In the Uart IP block, baud rate is calculated using FDR and DLL-DLM registers |
dpslwk | 0:7480abd3b63b | 97 | * The formula is : |
dpslwk | 0:7480abd3b63b | 98 | * BaudRate= uClk * (mulFracDiv/(mulFracDiv+dividerAddFracDiv) / (16 * (DLL) |
dpslwk | 0:7480abd3b63b | 99 | * It involves floating point calculations. That's the reason the formulae are adjusted with |
dpslwk | 0:7480abd3b63b | 100 | * Multiply and divide method.*/ |
dpslwk | 0:7480abd3b63b | 101 | /* The value of mulFracDiv and dividerAddFracDiv should comply to the following expressions: |
dpslwk | 0:7480abd3b63b | 102 | * 0 < mulFracDiv <= 15, 0 <= dividerAddFracDiv <= 15 */ |
dpslwk | 0:7480abd3b63b | 103 | for (mulFracDiv = 1 ; mulFracDiv <= 15 ;mulFracDiv++) |
dpslwk | 0:7480abd3b63b | 104 | { |
dpslwk | 0:7480abd3b63b | 105 | for (dividerAddFracDiv = 0 ; dividerAddFracDiv <= 15 ;dividerAddFracDiv++) |
dpslwk | 0:7480abd3b63b | 106 | { |
dpslwk | 0:7480abd3b63b | 107 | temp = (mulFracDiv * uClk) / ((mulFracDiv + dividerAddFracDiv)); |
dpslwk | 0:7480abd3b63b | 108 | |
dpslwk | 0:7480abd3b63b | 109 | diviser = temp / baudrate; |
dpslwk | 0:7480abd3b63b | 110 | if ((temp % baudrate) > (baudrate / 2)) |
dpslwk | 0:7480abd3b63b | 111 | diviser++; |
dpslwk | 0:7480abd3b63b | 112 | |
dpslwk | 0:7480abd3b63b | 113 | if (diviser > 2 && diviser < 65536) |
dpslwk | 0:7480abd3b63b | 114 | { |
dpslwk | 0:7480abd3b63b | 115 | calcBaudrate = temp / diviser; |
dpslwk | 0:7480abd3b63b | 116 | |
dpslwk | 0:7480abd3b63b | 117 | if (calcBaudrate <= baudrate) |
dpslwk | 0:7480abd3b63b | 118 | relativeError = baudrate - calcBaudrate; |
dpslwk | 0:7480abd3b63b | 119 | else |
dpslwk | 0:7480abd3b63b | 120 | relativeError = calcBaudrate - baudrate; |
dpslwk | 0:7480abd3b63b | 121 | |
dpslwk | 0:7480abd3b63b | 122 | if ((relativeError < relativeOptimalError)) |
dpslwk | 0:7480abd3b63b | 123 | { |
dpslwk | 0:7480abd3b63b | 124 | mulFracDivOptimal = mulFracDiv ; |
dpslwk | 0:7480abd3b63b | 125 | dividerAddOptimal = dividerAddFracDiv; |
dpslwk | 0:7480abd3b63b | 126 | diviserOptimal = diviser; |
dpslwk | 0:7480abd3b63b | 127 | relativeOptimalError = relativeError; |
dpslwk | 0:7480abd3b63b | 128 | if (relativeError == 0) |
dpslwk | 0:7480abd3b63b | 129 | break; |
dpslwk | 0:7480abd3b63b | 130 | } |
dpslwk | 0:7480abd3b63b | 131 | } /* End of if */ |
dpslwk | 0:7480abd3b63b | 132 | } /* end of inner for loop */ |
dpslwk | 0:7480abd3b63b | 133 | if (relativeError == 0) |
dpslwk | 0:7480abd3b63b | 134 | break; |
dpslwk | 0:7480abd3b63b | 135 | } /* end of outer for loop */ |
dpslwk | 0:7480abd3b63b | 136 | |
dpslwk | 0:7480abd3b63b | 137 | if (relativeOptimalError < ((baudrate * UART_ACCEPTED_BAUDRATE_ERROR)/100)) |
dpslwk | 0:7480abd3b63b | 138 | { |
dpslwk | 0:7480abd3b63b | 139 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 140 | { |
dpslwk | 0:7480abd3b63b | 141 | ((LPC_UART1_TypeDef *)UARTx)->LCR |= UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 142 | ((LPC_UART1_TypeDef *)UARTx)->/*DLIER.*/DLM = UART_LOAD_DLM(diviserOptimal); |
dpslwk | 0:7480abd3b63b | 143 | ((LPC_UART1_TypeDef *)UARTx)->/*RBTHDLR.*/DLL = UART_LOAD_DLL(diviserOptimal); |
dpslwk | 0:7480abd3b63b | 144 | /* Then reset DLAB bit */ |
dpslwk | 0:7480abd3b63b | 145 | ((LPC_UART1_TypeDef *)UARTx)->LCR &= (~UART_LCR_DLAB_EN) & UART_LCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 146 | ((LPC_UART1_TypeDef *)UARTx)->FDR = (UART_FDR_MULVAL(mulFracDivOptimal) \ |
dpslwk | 0:7480abd3b63b | 147 | | UART_FDR_DIVADDVAL(dividerAddOptimal)) & UART_FDR_BITMASK; |
dpslwk | 0:7480abd3b63b | 148 | } |
dpslwk | 0:7480abd3b63b | 149 | else |
dpslwk | 0:7480abd3b63b | 150 | { |
dpslwk | 0:7480abd3b63b | 151 | UARTx->LCR |= UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 152 | UARTx->/*DLIER.*/DLM = UART_LOAD_DLM(diviserOptimal); |
dpslwk | 0:7480abd3b63b | 153 | UARTx->/*RBTHDLR.*/DLL = UART_LOAD_DLL(diviserOptimal); |
dpslwk | 0:7480abd3b63b | 154 | /* Then reset DLAB bit */ |
dpslwk | 0:7480abd3b63b | 155 | UARTx->LCR &= (~UART_LCR_DLAB_EN) & UART_LCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 156 | UARTx->FDR = (UART_FDR_MULVAL(mulFracDivOptimal) \ |
dpslwk | 0:7480abd3b63b | 157 | | UART_FDR_DIVADDVAL(dividerAddOptimal)) & UART_FDR_BITMASK; |
dpslwk | 0:7480abd3b63b | 158 | } |
dpslwk | 0:7480abd3b63b | 159 | errorStatus = SUCCESS; |
dpslwk | 0:7480abd3b63b | 160 | } |
dpslwk | 0:7480abd3b63b | 161 | |
dpslwk | 0:7480abd3b63b | 162 | return errorStatus; |
dpslwk | 0:7480abd3b63b | 163 | } |
dpslwk | 0:7480abd3b63b | 164 | |
dpslwk | 0:7480abd3b63b | 165 | /* End of Private Functions ---------------------------------------------------- */ |
dpslwk | 0:7480abd3b63b | 166 | |
dpslwk | 0:7480abd3b63b | 167 | |
dpslwk | 0:7480abd3b63b | 168 | /* Public Functions ----------------------------------------------------------- */ |
dpslwk | 0:7480abd3b63b | 169 | /** @addtogroup UART_Public_Functions |
dpslwk | 0:7480abd3b63b | 170 | * @{ |
dpslwk | 0:7480abd3b63b | 171 | */ |
dpslwk | 0:7480abd3b63b | 172 | /* UART Init/DeInit functions -------------------------------------------------*/ |
dpslwk | 0:7480abd3b63b | 173 | /********************************************************************//** |
dpslwk | 0:7480abd3b63b | 174 | * @brief Initializes the UARTx peripheral according to the specified |
dpslwk | 0:7480abd3b63b | 175 | * parameters in the UART_ConfigStruct. |
dpslwk | 0:7480abd3b63b | 176 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 177 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 178 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 179 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 180 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 181 | * @param[in] UART_ConfigStruct Pointer to a UART_CFG_Type structure |
dpslwk | 0:7480abd3b63b | 182 | * that contains the configuration information for the |
dpslwk | 0:7480abd3b63b | 183 | * specified UART peripheral. |
dpslwk | 0:7480abd3b63b | 184 | * @return None |
dpslwk | 0:7480abd3b63b | 185 | *********************************************************************/ |
dpslwk | 0:7480abd3b63b | 186 | void UART_Init(LPC_UART_TypeDef *UARTx, UART_CFG_Type *UART_ConfigStruct) |
dpslwk | 0:7480abd3b63b | 187 | { |
dpslwk | 0:7480abd3b63b | 188 | uint32_t tmp; |
dpslwk | 0:7480abd3b63b | 189 | |
dpslwk | 0:7480abd3b63b | 190 | // For debug mode |
dpslwk | 0:7480abd3b63b | 191 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 192 | CHECK_PARAM(PARAM_UART_DATABIT(UART_ConfigStruct->Databits)); |
dpslwk | 0:7480abd3b63b | 193 | CHECK_PARAM(PARAM_UART_STOPBIT(UART_ConfigStruct->Stopbits)); |
dpslwk | 0:7480abd3b63b | 194 | CHECK_PARAM(PARAM_UART_PARITY(UART_ConfigStruct->Parity)); |
dpslwk | 0:7480abd3b63b | 195 | |
dpslwk | 0:7480abd3b63b | 196 | #ifdef _UART0 |
dpslwk | 0:7480abd3b63b | 197 | if(UARTx == (LPC_UART_TypeDef *)LPC_UART0) |
dpslwk | 0:7480abd3b63b | 198 | { |
dpslwk | 0:7480abd3b63b | 199 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 200 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART0, ENABLE); |
dpslwk | 0:7480abd3b63b | 201 | } |
dpslwk | 0:7480abd3b63b | 202 | #endif |
dpslwk | 0:7480abd3b63b | 203 | |
dpslwk | 0:7480abd3b63b | 204 | #ifdef _UART1 |
dpslwk | 0:7480abd3b63b | 205 | if(((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 206 | { |
dpslwk | 0:7480abd3b63b | 207 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 208 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART1, ENABLE); |
dpslwk | 0:7480abd3b63b | 209 | } |
dpslwk | 0:7480abd3b63b | 210 | #endif |
dpslwk | 0:7480abd3b63b | 211 | |
dpslwk | 0:7480abd3b63b | 212 | #ifdef _UART2 |
dpslwk | 0:7480abd3b63b | 213 | if(UARTx == LPC_UART2) |
dpslwk | 0:7480abd3b63b | 214 | { |
dpslwk | 0:7480abd3b63b | 215 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 216 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART2, ENABLE); |
dpslwk | 0:7480abd3b63b | 217 | } |
dpslwk | 0:7480abd3b63b | 218 | #endif |
dpslwk | 0:7480abd3b63b | 219 | |
dpslwk | 0:7480abd3b63b | 220 | #ifdef _UART3 |
dpslwk | 0:7480abd3b63b | 221 | if(UARTx == LPC_UART3) |
dpslwk | 0:7480abd3b63b | 222 | { |
dpslwk | 0:7480abd3b63b | 223 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 224 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART3, ENABLE); |
dpslwk | 0:7480abd3b63b | 225 | } |
dpslwk | 0:7480abd3b63b | 226 | #endif |
dpslwk | 0:7480abd3b63b | 227 | |
dpslwk | 0:7480abd3b63b | 228 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 229 | { |
dpslwk | 0:7480abd3b63b | 230 | /* FIFOs are empty */ |
dpslwk | 0:7480abd3b63b | 231 | ((LPC_UART1_TypeDef *)UARTx)->/*IIFCR.*/FCR = ( UART_FCR_FIFO_EN \ |
dpslwk | 0:7480abd3b63b | 232 | | UART_FCR_RX_RS | UART_FCR_TX_RS); |
dpslwk | 0:7480abd3b63b | 233 | // Disable FIFO |
dpslwk | 0:7480abd3b63b | 234 | ((LPC_UART1_TypeDef *)UARTx)->/*IIFCR.*/FCR = 0; |
dpslwk | 0:7480abd3b63b | 235 | |
dpslwk | 0:7480abd3b63b | 236 | // Dummy reading |
dpslwk | 0:7480abd3b63b | 237 | while (((LPC_UART1_TypeDef *)UARTx)->LSR & UART_LSR_RDR) |
dpslwk | 0:7480abd3b63b | 238 | { |
dpslwk | 0:7480abd3b63b | 239 | tmp = ((LPC_UART1_TypeDef *)UARTx)->/*RBTHDLR.*/RBR; |
dpslwk | 0:7480abd3b63b | 240 | } |
dpslwk | 0:7480abd3b63b | 241 | |
dpslwk | 0:7480abd3b63b | 242 | ((LPC_UART1_TypeDef *)UARTx)->TER = UART_TER_TXEN; |
dpslwk | 0:7480abd3b63b | 243 | // Wait for current transmit complete |
dpslwk | 0:7480abd3b63b | 244 | while (!(((LPC_UART1_TypeDef *)UARTx)->LSR & UART_LSR_THRE)); |
dpslwk | 0:7480abd3b63b | 245 | // Disable Tx |
dpslwk | 0:7480abd3b63b | 246 | ((LPC_UART1_TypeDef *)UARTx)->TER = 0; |
dpslwk | 0:7480abd3b63b | 247 | |
dpslwk | 0:7480abd3b63b | 248 | // Disable interrupt |
dpslwk | 0:7480abd3b63b | 249 | ((LPC_UART1_TypeDef *)UARTx)->/*DLIER.*/IER = 0; |
dpslwk | 0:7480abd3b63b | 250 | // Set LCR to default state |
dpslwk | 0:7480abd3b63b | 251 | ((LPC_UART1_TypeDef *)UARTx)->LCR = 0; |
dpslwk | 0:7480abd3b63b | 252 | // Set ACR to default state |
dpslwk | 0:7480abd3b63b | 253 | ((LPC_UART1_TypeDef *)UARTx)->ACR = 0; |
dpslwk | 0:7480abd3b63b | 254 | // Set Modem Control to default state |
dpslwk | 0:7480abd3b63b | 255 | ((LPC_UART1_TypeDef *)UARTx)->MCR = 0; |
dpslwk | 0:7480abd3b63b | 256 | // Set RS485 control to default state |
dpslwk | 0:7480abd3b63b | 257 | ((LPC_UART1_TypeDef *)UARTx)->RS485CTRL = 0; |
dpslwk | 0:7480abd3b63b | 258 | // Set RS485 delay timer to default state |
dpslwk | 0:7480abd3b63b | 259 | ((LPC_UART1_TypeDef *)UARTx)->RS485DLY = 0; |
dpslwk | 0:7480abd3b63b | 260 | // Set RS485 addr match to default state |
dpslwk | 0:7480abd3b63b | 261 | ((LPC_UART1_TypeDef *)UARTx)->ADRMATCH = 0; |
dpslwk | 0:7480abd3b63b | 262 | //Dummy Reading to Clear Status |
dpslwk | 0:7480abd3b63b | 263 | tmp = ((LPC_UART1_TypeDef *)UARTx)->MSR; |
dpslwk | 0:7480abd3b63b | 264 | tmp = ((LPC_UART1_TypeDef *)UARTx)->LSR; |
dpslwk | 0:7480abd3b63b | 265 | } |
dpslwk | 0:7480abd3b63b | 266 | else |
dpslwk | 0:7480abd3b63b | 267 | { |
dpslwk | 0:7480abd3b63b | 268 | /* FIFOs are empty */ |
dpslwk | 0:7480abd3b63b | 269 | UARTx->/*IIFCR.*/FCR = ( UART_FCR_FIFO_EN | UART_FCR_RX_RS | UART_FCR_TX_RS); |
dpslwk | 0:7480abd3b63b | 270 | // Disable FIFO |
dpslwk | 0:7480abd3b63b | 271 | UARTx->/*IIFCR.*/FCR = 0; |
dpslwk | 0:7480abd3b63b | 272 | |
dpslwk | 0:7480abd3b63b | 273 | // Dummy reading |
dpslwk | 0:7480abd3b63b | 274 | while (UARTx->LSR & UART_LSR_RDR) |
dpslwk | 0:7480abd3b63b | 275 | { |
dpslwk | 0:7480abd3b63b | 276 | tmp = UARTx->/*RBTHDLR.*/RBR; |
dpslwk | 0:7480abd3b63b | 277 | } |
dpslwk | 0:7480abd3b63b | 278 | |
dpslwk | 0:7480abd3b63b | 279 | UARTx->TER = UART_TER_TXEN; |
dpslwk | 0:7480abd3b63b | 280 | // Wait for current transmit complete |
dpslwk | 0:7480abd3b63b | 281 | while (!(UARTx->LSR & UART_LSR_THRE)); |
dpslwk | 0:7480abd3b63b | 282 | // Disable Tx |
dpslwk | 0:7480abd3b63b | 283 | UARTx->TER = 0; |
dpslwk | 0:7480abd3b63b | 284 | |
dpslwk | 0:7480abd3b63b | 285 | // Disable interrupt |
dpslwk | 0:7480abd3b63b | 286 | UARTx->/*DLIER.*/IER = 0; |
dpslwk | 0:7480abd3b63b | 287 | // Set LCR to default state |
dpslwk | 0:7480abd3b63b | 288 | UARTx->LCR = 0; |
dpslwk | 0:7480abd3b63b | 289 | // Set ACR to default state |
dpslwk | 0:7480abd3b63b | 290 | UARTx->ACR = 0; |
dpslwk | 0:7480abd3b63b | 291 | // Dummy reading |
dpslwk | 0:7480abd3b63b | 292 | tmp = UARTx->LSR; |
dpslwk | 0:7480abd3b63b | 293 | } |
dpslwk | 0:7480abd3b63b | 294 | |
dpslwk | 0:7480abd3b63b | 295 | if (UARTx == LPC_UART3) |
dpslwk | 0:7480abd3b63b | 296 | { |
dpslwk | 0:7480abd3b63b | 297 | // Set IrDA to default state |
dpslwk | 0:7480abd3b63b | 298 | UARTx->ICR = 0; |
dpslwk | 0:7480abd3b63b | 299 | } |
dpslwk | 0:7480abd3b63b | 300 | |
dpslwk | 0:7480abd3b63b | 301 | // Set Line Control register ---------------------------- |
dpslwk | 0:7480abd3b63b | 302 | |
dpslwk | 0:7480abd3b63b | 303 | uart_set_divisors(UARTx, (UART_ConfigStruct->Baud_rate)); |
dpslwk | 0:7480abd3b63b | 304 | |
dpslwk | 0:7480abd3b63b | 305 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 306 | { |
dpslwk | 0:7480abd3b63b | 307 | tmp = (((LPC_UART1_TypeDef *)UARTx)->LCR & (UART_LCR_DLAB_EN | UART_LCR_BREAK_EN)) \ |
dpslwk | 0:7480abd3b63b | 308 | & UART_LCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 309 | } |
dpslwk | 0:7480abd3b63b | 310 | else |
dpslwk | 0:7480abd3b63b | 311 | { |
dpslwk | 0:7480abd3b63b | 312 | tmp = (UARTx->LCR & (UART_LCR_DLAB_EN | UART_LCR_BREAK_EN)) & UART_LCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 313 | } |
dpslwk | 0:7480abd3b63b | 314 | |
dpslwk | 0:7480abd3b63b | 315 | switch (UART_ConfigStruct->Databits){ |
dpslwk | 0:7480abd3b63b | 316 | case UART_DATABIT_5: |
dpslwk | 0:7480abd3b63b | 317 | tmp |= UART_LCR_WLEN5; |
dpslwk | 0:7480abd3b63b | 318 | break; |
dpslwk | 0:7480abd3b63b | 319 | case UART_DATABIT_6: |
dpslwk | 0:7480abd3b63b | 320 | tmp |= UART_LCR_WLEN6; |
dpslwk | 0:7480abd3b63b | 321 | break; |
dpslwk | 0:7480abd3b63b | 322 | case UART_DATABIT_7: |
dpslwk | 0:7480abd3b63b | 323 | tmp |= UART_LCR_WLEN7; |
dpslwk | 0:7480abd3b63b | 324 | break; |
dpslwk | 0:7480abd3b63b | 325 | case UART_DATABIT_8: |
dpslwk | 0:7480abd3b63b | 326 | default: |
dpslwk | 0:7480abd3b63b | 327 | tmp |= UART_LCR_WLEN8; |
dpslwk | 0:7480abd3b63b | 328 | break; |
dpslwk | 0:7480abd3b63b | 329 | } |
dpslwk | 0:7480abd3b63b | 330 | |
dpslwk | 0:7480abd3b63b | 331 | if (UART_ConfigStruct->Parity == UART_PARITY_NONE) |
dpslwk | 0:7480abd3b63b | 332 | { |
dpslwk | 0:7480abd3b63b | 333 | // Do nothing... |
dpslwk | 0:7480abd3b63b | 334 | } |
dpslwk | 0:7480abd3b63b | 335 | else |
dpslwk | 0:7480abd3b63b | 336 | { |
dpslwk | 0:7480abd3b63b | 337 | tmp |= UART_LCR_PARITY_EN; |
dpslwk | 0:7480abd3b63b | 338 | switch (UART_ConfigStruct->Parity) |
dpslwk | 0:7480abd3b63b | 339 | { |
dpslwk | 0:7480abd3b63b | 340 | case UART_PARITY_ODD: |
dpslwk | 0:7480abd3b63b | 341 | tmp |= UART_LCR_PARITY_ODD; |
dpslwk | 0:7480abd3b63b | 342 | break; |
dpslwk | 0:7480abd3b63b | 343 | |
dpslwk | 0:7480abd3b63b | 344 | case UART_PARITY_EVEN: |
dpslwk | 0:7480abd3b63b | 345 | tmp |= UART_LCR_PARITY_EVEN; |
dpslwk | 0:7480abd3b63b | 346 | break; |
dpslwk | 0:7480abd3b63b | 347 | |
dpslwk | 0:7480abd3b63b | 348 | case UART_PARITY_SP_1: |
dpslwk | 0:7480abd3b63b | 349 | tmp |= UART_LCR_PARITY_F_1; |
dpslwk | 0:7480abd3b63b | 350 | break; |
dpslwk | 0:7480abd3b63b | 351 | |
dpslwk | 0:7480abd3b63b | 352 | case UART_PARITY_SP_0: |
dpslwk | 0:7480abd3b63b | 353 | tmp |= UART_LCR_PARITY_F_0; |
dpslwk | 0:7480abd3b63b | 354 | break; |
dpslwk | 0:7480abd3b63b | 355 | default: |
dpslwk | 0:7480abd3b63b | 356 | break; |
dpslwk | 0:7480abd3b63b | 357 | } |
dpslwk | 0:7480abd3b63b | 358 | } |
dpslwk | 0:7480abd3b63b | 359 | |
dpslwk | 0:7480abd3b63b | 360 | switch (UART_ConfigStruct->Stopbits){ |
dpslwk | 0:7480abd3b63b | 361 | case UART_STOPBIT_2: |
dpslwk | 0:7480abd3b63b | 362 | tmp |= UART_LCR_STOPBIT_SEL; |
dpslwk | 0:7480abd3b63b | 363 | break; |
dpslwk | 0:7480abd3b63b | 364 | case UART_STOPBIT_1: |
dpslwk | 0:7480abd3b63b | 365 | default: |
dpslwk | 0:7480abd3b63b | 366 | // Do no thing |
dpslwk | 0:7480abd3b63b | 367 | break; |
dpslwk | 0:7480abd3b63b | 368 | } |
dpslwk | 0:7480abd3b63b | 369 | |
dpslwk | 0:7480abd3b63b | 370 | |
dpslwk | 0:7480abd3b63b | 371 | // Write back to LCR, configure FIFO and Disable Tx |
dpslwk | 0:7480abd3b63b | 372 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 373 | { |
dpslwk | 0:7480abd3b63b | 374 | ((LPC_UART1_TypeDef *)UARTx)->LCR = (uint8_t)(tmp & UART_LCR_BITMASK); |
dpslwk | 0:7480abd3b63b | 375 | } |
dpslwk | 0:7480abd3b63b | 376 | else |
dpslwk | 0:7480abd3b63b | 377 | { |
dpslwk | 0:7480abd3b63b | 378 | UARTx->LCR = (uint8_t)(tmp & UART_LCR_BITMASK); |
dpslwk | 0:7480abd3b63b | 379 | } |
dpslwk | 0:7480abd3b63b | 380 | } |
dpslwk | 0:7480abd3b63b | 381 | |
dpslwk | 0:7480abd3b63b | 382 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 383 | * @brief De-initializes the UARTx peripheral registers to their |
dpslwk | 0:7480abd3b63b | 384 | * default reset values. |
dpslwk | 0:7480abd3b63b | 385 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 386 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 387 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 388 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 389 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 390 | * @return None |
dpslwk | 0:7480abd3b63b | 391 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 392 | void UART_DeInit(LPC_UART_TypeDef* UARTx) |
dpslwk | 0:7480abd3b63b | 393 | { |
dpslwk | 0:7480abd3b63b | 394 | // For debug mode |
dpslwk | 0:7480abd3b63b | 395 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 396 | |
dpslwk | 0:7480abd3b63b | 397 | UART_TxCmd(UARTx, DISABLE); |
dpslwk | 0:7480abd3b63b | 398 | |
dpslwk | 0:7480abd3b63b | 399 | #ifdef _UART0 |
dpslwk | 0:7480abd3b63b | 400 | if (UARTx == (LPC_UART_TypeDef *)LPC_UART0) |
dpslwk | 0:7480abd3b63b | 401 | { |
dpslwk | 0:7480abd3b63b | 402 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 403 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART0, DISABLE); |
dpslwk | 0:7480abd3b63b | 404 | } |
dpslwk | 0:7480abd3b63b | 405 | #endif |
dpslwk | 0:7480abd3b63b | 406 | |
dpslwk | 0:7480abd3b63b | 407 | #ifdef _UART1 |
dpslwk | 0:7480abd3b63b | 408 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 409 | { |
dpslwk | 0:7480abd3b63b | 410 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 411 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART1, DISABLE); |
dpslwk | 0:7480abd3b63b | 412 | } |
dpslwk | 0:7480abd3b63b | 413 | #endif |
dpslwk | 0:7480abd3b63b | 414 | |
dpslwk | 0:7480abd3b63b | 415 | #ifdef _UART2 |
dpslwk | 0:7480abd3b63b | 416 | if (UARTx == LPC_UART2) |
dpslwk | 0:7480abd3b63b | 417 | { |
dpslwk | 0:7480abd3b63b | 418 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 419 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART2, DISABLE); |
dpslwk | 0:7480abd3b63b | 420 | } |
dpslwk | 0:7480abd3b63b | 421 | #endif |
dpslwk | 0:7480abd3b63b | 422 | |
dpslwk | 0:7480abd3b63b | 423 | #ifdef _UART3 |
dpslwk | 0:7480abd3b63b | 424 | if (UARTx == LPC_UART3) |
dpslwk | 0:7480abd3b63b | 425 | { |
dpslwk | 0:7480abd3b63b | 426 | /* Set up clock and power for UART module */ |
dpslwk | 0:7480abd3b63b | 427 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUART3, DISABLE); |
dpslwk | 0:7480abd3b63b | 428 | } |
dpslwk | 0:7480abd3b63b | 429 | #endif |
dpslwk | 0:7480abd3b63b | 430 | } |
dpslwk | 0:7480abd3b63b | 431 | |
dpslwk | 0:7480abd3b63b | 432 | /*****************************************************************************//** |
dpslwk | 0:7480abd3b63b | 433 | * @brief Fills each UART_InitStruct member with its default value: |
dpslwk | 0:7480abd3b63b | 434 | * - 9600 bps |
dpslwk | 0:7480abd3b63b | 435 | * - 8-bit data |
dpslwk | 0:7480abd3b63b | 436 | * - 1 Stopbit |
dpslwk | 0:7480abd3b63b | 437 | * - None Parity |
dpslwk | 0:7480abd3b63b | 438 | * @param[in] UART_InitStruct Pointer to a UART_CFG_Type structure |
dpslwk | 0:7480abd3b63b | 439 | * which will be initialized. |
dpslwk | 0:7480abd3b63b | 440 | * @return None |
dpslwk | 0:7480abd3b63b | 441 | *******************************************************************************/ |
dpslwk | 0:7480abd3b63b | 442 | void UART_ConfigStructInit(UART_CFG_Type *UART_InitStruct) |
dpslwk | 0:7480abd3b63b | 443 | { |
dpslwk | 0:7480abd3b63b | 444 | UART_InitStruct->Baud_rate = 9600; |
dpslwk | 0:7480abd3b63b | 445 | UART_InitStruct->Databits = UART_DATABIT_8; |
dpslwk | 0:7480abd3b63b | 446 | UART_InitStruct->Parity = UART_PARITY_NONE; |
dpslwk | 0:7480abd3b63b | 447 | UART_InitStruct->Stopbits = UART_STOPBIT_1; |
dpslwk | 0:7480abd3b63b | 448 | } |
dpslwk | 0:7480abd3b63b | 449 | |
dpslwk | 0:7480abd3b63b | 450 | /* UART Send/Recieve functions -------------------------------------------------*/ |
dpslwk | 0:7480abd3b63b | 451 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 452 | * @brief Transmit a single data through UART peripheral |
dpslwk | 0:7480abd3b63b | 453 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 454 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 455 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 456 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 457 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 458 | * @param[in] Data Data to transmit (must be 8-bit long) |
dpslwk | 0:7480abd3b63b | 459 | * @return None |
dpslwk | 0:7480abd3b63b | 460 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 461 | void UART_SendByte(LPC_UART_TypeDef* UARTx, uint8_t Data) |
dpslwk | 0:7480abd3b63b | 462 | { |
dpslwk | 0:7480abd3b63b | 463 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 464 | |
dpslwk | 0:7480abd3b63b | 465 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 466 | { |
dpslwk | 0:7480abd3b63b | 467 | ((LPC_UART1_TypeDef *)UARTx)->/*RBTHDLR.*/THR = Data & UART_THR_MASKBIT; |
dpslwk | 0:7480abd3b63b | 468 | } |
dpslwk | 0:7480abd3b63b | 469 | else |
dpslwk | 0:7480abd3b63b | 470 | { |
dpslwk | 0:7480abd3b63b | 471 | UARTx->/*RBTHDLR.*/THR = Data & UART_THR_MASKBIT; |
dpslwk | 0:7480abd3b63b | 472 | } |
dpslwk | 0:7480abd3b63b | 473 | |
dpslwk | 0:7480abd3b63b | 474 | } |
dpslwk | 0:7480abd3b63b | 475 | |
dpslwk | 0:7480abd3b63b | 476 | |
dpslwk | 0:7480abd3b63b | 477 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 478 | * @brief Receive a single data from UART peripheral |
dpslwk | 0:7480abd3b63b | 479 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 480 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 481 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 482 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 483 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 484 | * @return Data received |
dpslwk | 0:7480abd3b63b | 485 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 486 | uint8_t UART_ReceiveByte(LPC_UART_TypeDef* UARTx) |
dpslwk | 0:7480abd3b63b | 487 | { |
dpslwk | 0:7480abd3b63b | 488 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 489 | |
dpslwk | 0:7480abd3b63b | 490 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 491 | { |
dpslwk | 0:7480abd3b63b | 492 | return (((LPC_UART1_TypeDef *)UARTx)->/*RBTHDLR.*/RBR & UART_RBR_MASKBIT); |
dpslwk | 0:7480abd3b63b | 493 | } |
dpslwk | 0:7480abd3b63b | 494 | else |
dpslwk | 0:7480abd3b63b | 495 | { |
dpslwk | 0:7480abd3b63b | 496 | return (UARTx->/*RBTHDLR.*/RBR & UART_RBR_MASKBIT); |
dpslwk | 0:7480abd3b63b | 497 | } |
dpslwk | 0:7480abd3b63b | 498 | } |
dpslwk | 0:7480abd3b63b | 499 | |
dpslwk | 0:7480abd3b63b | 500 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 501 | * @brief Send a block of data via UART peripheral |
dpslwk | 0:7480abd3b63b | 502 | * @param[in] UARTx Selected UART peripheral used to send data, should be: |
dpslwk | 0:7480abd3b63b | 503 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 504 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 505 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 506 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 507 | * @param[in] txbuf Pointer to Transmit buffer |
dpslwk | 0:7480abd3b63b | 508 | * @param[in] buflen Length of Transmit buffer |
dpslwk | 0:7480abd3b63b | 509 | * @param[in] flag Flag used in UART transfer, should be |
dpslwk | 0:7480abd3b63b | 510 | * NONE_BLOCKING or BLOCKING |
dpslwk | 0:7480abd3b63b | 511 | * @return Number of bytes sent. |
dpslwk | 0:7480abd3b63b | 512 | * |
dpslwk | 0:7480abd3b63b | 513 | * Note: when using UART in BLOCKING mode, a time-out condition is used |
dpslwk | 0:7480abd3b63b | 514 | * via defined symbol UART_BLOCKING_TIMEOUT. |
dpslwk | 0:7480abd3b63b | 515 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 516 | uint32_t UART_Send(LPC_UART_TypeDef *UARTx, uint8_t *txbuf, |
dpslwk | 0:7480abd3b63b | 517 | uint32_t buflen, TRANSFER_BLOCK_Type flag) |
dpslwk | 0:7480abd3b63b | 518 | { |
dpslwk | 0:7480abd3b63b | 519 | uint32_t bToSend, bSent, timeOut, fifo_cnt; |
dpslwk | 0:7480abd3b63b | 520 | uint8_t *pChar = txbuf; |
dpslwk | 0:7480abd3b63b | 521 | |
dpslwk | 0:7480abd3b63b | 522 | bToSend = buflen; |
dpslwk | 0:7480abd3b63b | 523 | |
dpslwk | 0:7480abd3b63b | 524 | // blocking mode |
dpslwk | 0:7480abd3b63b | 525 | if (flag == BLOCKING) { |
dpslwk | 0:7480abd3b63b | 526 | bSent = 0; |
dpslwk | 0:7480abd3b63b | 527 | while (bToSend){ |
dpslwk | 0:7480abd3b63b | 528 | timeOut = UART_BLOCKING_TIMEOUT; |
dpslwk | 0:7480abd3b63b | 529 | // Wait for THR empty with timeout |
dpslwk | 0:7480abd3b63b | 530 | while (!(UARTx->LSR & UART_LSR_THRE)) { |
dpslwk | 0:7480abd3b63b | 531 | if (timeOut == 0) break; |
dpslwk | 0:7480abd3b63b | 532 | timeOut--; |
dpslwk | 0:7480abd3b63b | 533 | } |
dpslwk | 0:7480abd3b63b | 534 | // Time out! |
dpslwk | 0:7480abd3b63b | 535 | if(timeOut == 0) break; |
dpslwk | 0:7480abd3b63b | 536 | fifo_cnt = UART_TX_FIFO_SIZE; |
dpslwk | 0:7480abd3b63b | 537 | while (fifo_cnt && bToSend){ |
dpslwk | 0:7480abd3b63b | 538 | UART_SendByte(UARTx, (*pChar++)); |
dpslwk | 0:7480abd3b63b | 539 | fifo_cnt--; |
dpslwk | 0:7480abd3b63b | 540 | bToSend--; |
dpslwk | 0:7480abd3b63b | 541 | bSent++; |
dpslwk | 0:7480abd3b63b | 542 | } |
dpslwk | 0:7480abd3b63b | 543 | } |
dpslwk | 0:7480abd3b63b | 544 | } |
dpslwk | 0:7480abd3b63b | 545 | // None blocking mode |
dpslwk | 0:7480abd3b63b | 546 | else { |
dpslwk | 0:7480abd3b63b | 547 | bSent = 0; |
dpslwk | 0:7480abd3b63b | 548 | while (bToSend) { |
dpslwk | 0:7480abd3b63b | 549 | if (!(UARTx->LSR & UART_LSR_THRE)){ |
dpslwk | 0:7480abd3b63b | 550 | break; |
dpslwk | 0:7480abd3b63b | 551 | } |
dpslwk | 0:7480abd3b63b | 552 | fifo_cnt = UART_TX_FIFO_SIZE; |
dpslwk | 0:7480abd3b63b | 553 | while (fifo_cnt && bToSend) { |
dpslwk | 0:7480abd3b63b | 554 | UART_SendByte(UARTx, (*pChar++)); |
dpslwk | 0:7480abd3b63b | 555 | bToSend--; |
dpslwk | 0:7480abd3b63b | 556 | fifo_cnt--; |
dpslwk | 0:7480abd3b63b | 557 | bSent++; |
dpslwk | 0:7480abd3b63b | 558 | } |
dpslwk | 0:7480abd3b63b | 559 | } |
dpslwk | 0:7480abd3b63b | 560 | } |
dpslwk | 0:7480abd3b63b | 561 | return bSent; |
dpslwk | 0:7480abd3b63b | 562 | } |
dpslwk | 0:7480abd3b63b | 563 | |
dpslwk | 0:7480abd3b63b | 564 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 565 | * @brief Receive a block of data via UART peripheral |
dpslwk | 0:7480abd3b63b | 566 | * @param[in] UARTx Selected UART peripheral used to send data, |
dpslwk | 0:7480abd3b63b | 567 | * should be: |
dpslwk | 0:7480abd3b63b | 568 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 569 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 570 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 571 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 572 | * @param[out] rxbuf Pointer to Received buffer |
dpslwk | 0:7480abd3b63b | 573 | * @param[in] buflen Length of Received buffer |
dpslwk | 0:7480abd3b63b | 574 | * @param[in] flag Flag mode, should be NONE_BLOCKING or BLOCKING |
dpslwk | 0:7480abd3b63b | 575 | |
dpslwk | 0:7480abd3b63b | 576 | * @return Number of bytes received |
dpslwk | 0:7480abd3b63b | 577 | * |
dpslwk | 0:7480abd3b63b | 578 | * Note: when using UART in BLOCKING mode, a time-out condition is used |
dpslwk | 0:7480abd3b63b | 579 | * via defined symbol UART_BLOCKING_TIMEOUT. |
dpslwk | 0:7480abd3b63b | 580 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 581 | uint32_t UART_Receive(LPC_UART_TypeDef *UARTx, uint8_t *rxbuf, \ |
dpslwk | 0:7480abd3b63b | 582 | uint32_t buflen, TRANSFER_BLOCK_Type flag) |
dpslwk | 0:7480abd3b63b | 583 | { |
dpslwk | 0:7480abd3b63b | 584 | uint32_t bToRecv, bRecv, timeOut; |
dpslwk | 0:7480abd3b63b | 585 | uint8_t *pChar = rxbuf; |
dpslwk | 0:7480abd3b63b | 586 | |
dpslwk | 0:7480abd3b63b | 587 | bToRecv = buflen; |
dpslwk | 0:7480abd3b63b | 588 | |
dpslwk | 0:7480abd3b63b | 589 | // Blocking mode |
dpslwk | 0:7480abd3b63b | 590 | if (flag == BLOCKING) { |
dpslwk | 0:7480abd3b63b | 591 | bRecv = 0; |
dpslwk | 0:7480abd3b63b | 592 | while (bToRecv){ |
dpslwk | 0:7480abd3b63b | 593 | timeOut = UART_BLOCKING_TIMEOUT; |
dpslwk | 0:7480abd3b63b | 594 | while (!(UARTx->LSR & UART_LSR_RDR)){ |
dpslwk | 0:7480abd3b63b | 595 | if (timeOut == 0) break; |
dpslwk | 0:7480abd3b63b | 596 | timeOut--; |
dpslwk | 0:7480abd3b63b | 597 | } |
dpslwk | 0:7480abd3b63b | 598 | // Time out! |
dpslwk | 0:7480abd3b63b | 599 | if(timeOut == 0) break; |
dpslwk | 0:7480abd3b63b | 600 | // Get data from the buffer |
dpslwk | 0:7480abd3b63b | 601 | (*pChar++) = UART_ReceiveByte(UARTx); |
dpslwk | 0:7480abd3b63b | 602 | bToRecv--; |
dpslwk | 0:7480abd3b63b | 603 | bRecv++; |
dpslwk | 0:7480abd3b63b | 604 | } |
dpslwk | 0:7480abd3b63b | 605 | } |
dpslwk | 0:7480abd3b63b | 606 | // None blocking mode |
dpslwk | 0:7480abd3b63b | 607 | else { |
dpslwk | 0:7480abd3b63b | 608 | bRecv = 0; |
dpslwk | 0:7480abd3b63b | 609 | while (bToRecv) { |
dpslwk | 0:7480abd3b63b | 610 | if (!(UARTx->LSR & UART_LSR_RDR)) { |
dpslwk | 0:7480abd3b63b | 611 | break; |
dpslwk | 0:7480abd3b63b | 612 | } else { |
dpslwk | 0:7480abd3b63b | 613 | (*pChar++) = UART_ReceiveByte(UARTx); |
dpslwk | 0:7480abd3b63b | 614 | bRecv++; |
dpslwk | 0:7480abd3b63b | 615 | bToRecv--; |
dpslwk | 0:7480abd3b63b | 616 | } |
dpslwk | 0:7480abd3b63b | 617 | } |
dpslwk | 0:7480abd3b63b | 618 | } |
dpslwk | 0:7480abd3b63b | 619 | return bRecv; |
dpslwk | 0:7480abd3b63b | 620 | } |
dpslwk | 0:7480abd3b63b | 621 | |
dpslwk | 0:7480abd3b63b | 622 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 623 | * @brief Force BREAK character on UART line, output pin UARTx TXD is |
dpslwk | 0:7480abd3b63b | 624 | forced to logic 0. |
dpslwk | 0:7480abd3b63b | 625 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 626 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 627 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 628 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 629 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 630 | * @return None |
dpslwk | 0:7480abd3b63b | 631 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 632 | void UART_ForceBreak(LPC_UART_TypeDef* UARTx) |
dpslwk | 0:7480abd3b63b | 633 | { |
dpslwk | 0:7480abd3b63b | 634 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 635 | |
dpslwk | 0:7480abd3b63b | 636 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 637 | { |
dpslwk | 0:7480abd3b63b | 638 | ((LPC_UART1_TypeDef *)UARTx)->LCR |= UART_LCR_BREAK_EN; |
dpslwk | 0:7480abd3b63b | 639 | } |
dpslwk | 0:7480abd3b63b | 640 | else |
dpslwk | 0:7480abd3b63b | 641 | { |
dpslwk | 0:7480abd3b63b | 642 | UARTx->LCR |= UART_LCR_BREAK_EN; |
dpslwk | 0:7480abd3b63b | 643 | } |
dpslwk | 0:7480abd3b63b | 644 | } |
dpslwk | 0:7480abd3b63b | 645 | |
dpslwk | 0:7480abd3b63b | 646 | |
dpslwk | 0:7480abd3b63b | 647 | /********************************************************************//** |
dpslwk | 0:7480abd3b63b | 648 | * @brief Enable or disable specified UART interrupt. |
dpslwk | 0:7480abd3b63b | 649 | * @param[in] UARTx UART peripheral selected, should be |
dpslwk | 0:7480abd3b63b | 650 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 651 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 652 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 653 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 654 | * @param[in] UARTIntCfg Specifies the interrupt flag, |
dpslwk | 0:7480abd3b63b | 655 | * should be one of the following: |
dpslwk | 0:7480abd3b63b | 656 | - UART_INTCFG_RBR : RBR Interrupt enable |
dpslwk | 0:7480abd3b63b | 657 | - UART_INTCFG_THRE : THR Interrupt enable |
dpslwk | 0:7480abd3b63b | 658 | - UART_INTCFG_RLS : RX line status interrupt enable |
dpslwk | 0:7480abd3b63b | 659 | - UART1_INTCFG_MS : Modem status interrupt enable (UART1 only) |
dpslwk | 0:7480abd3b63b | 660 | - UART1_INTCFG_CTS : CTS1 signal transition interrupt enable (UART1 only) |
dpslwk | 0:7480abd3b63b | 661 | - UART_INTCFG_ABEO : Enables the end of auto-baud interrupt |
dpslwk | 0:7480abd3b63b | 662 | - UART_INTCFG_ABTO : Enables the auto-baud time-out interrupt |
dpslwk | 0:7480abd3b63b | 663 | * @param[in] NewState New state of specified UART interrupt type, |
dpslwk | 0:7480abd3b63b | 664 | * should be: |
dpslwk | 0:7480abd3b63b | 665 | * - ENALBE: Enable this UART interrupt type. |
dpslwk | 0:7480abd3b63b | 666 | * - DISALBE: Disable this UART interrupt type. |
dpslwk | 0:7480abd3b63b | 667 | * @return None |
dpslwk | 0:7480abd3b63b | 668 | *********************************************************************/ |
dpslwk | 0:7480abd3b63b | 669 | void UART_IntConfig(LPC_UART_TypeDef *UARTx, UART_INT_Type UARTIntCfg, FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 670 | { |
dpslwk | 0:7480abd3b63b | 671 | uint32_t tmp = 0; |
dpslwk | 0:7480abd3b63b | 672 | |
dpslwk | 0:7480abd3b63b | 673 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 674 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 675 | |
dpslwk | 0:7480abd3b63b | 676 | switch(UARTIntCfg){ |
dpslwk | 0:7480abd3b63b | 677 | case UART_INTCFG_RBR: |
dpslwk | 0:7480abd3b63b | 678 | tmp = UART_IER_RBRINT_EN; |
dpslwk | 0:7480abd3b63b | 679 | break; |
dpslwk | 0:7480abd3b63b | 680 | case UART_INTCFG_THRE: |
dpslwk | 0:7480abd3b63b | 681 | tmp = UART_IER_THREINT_EN; |
dpslwk | 0:7480abd3b63b | 682 | break; |
dpslwk | 0:7480abd3b63b | 683 | case UART_INTCFG_RLS: |
dpslwk | 0:7480abd3b63b | 684 | tmp = UART_IER_RLSINT_EN; |
dpslwk | 0:7480abd3b63b | 685 | break; |
dpslwk | 0:7480abd3b63b | 686 | case UART1_INTCFG_MS: |
dpslwk | 0:7480abd3b63b | 687 | tmp = UART1_IER_MSINT_EN; |
dpslwk | 0:7480abd3b63b | 688 | break; |
dpslwk | 0:7480abd3b63b | 689 | case UART1_INTCFG_CTS: |
dpslwk | 0:7480abd3b63b | 690 | tmp = UART1_IER_CTSINT_EN; |
dpslwk | 0:7480abd3b63b | 691 | break; |
dpslwk | 0:7480abd3b63b | 692 | case UART_INTCFG_ABEO: |
dpslwk | 0:7480abd3b63b | 693 | tmp = UART_IER_ABEOINT_EN; |
dpslwk | 0:7480abd3b63b | 694 | break; |
dpslwk | 0:7480abd3b63b | 695 | case UART_INTCFG_ABTO: |
dpslwk | 0:7480abd3b63b | 696 | tmp = UART_IER_ABTOINT_EN; |
dpslwk | 0:7480abd3b63b | 697 | break; |
dpslwk | 0:7480abd3b63b | 698 | } |
dpslwk | 0:7480abd3b63b | 699 | |
dpslwk | 0:7480abd3b63b | 700 | if ((LPC_UART1_TypeDef *) UARTx == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 701 | { |
dpslwk | 0:7480abd3b63b | 702 | CHECK_PARAM((PARAM_UART_INTCFG(UARTIntCfg)) || (PARAM_UART1_INTCFG(UARTIntCfg))); |
dpslwk | 0:7480abd3b63b | 703 | } |
dpslwk | 0:7480abd3b63b | 704 | else |
dpslwk | 0:7480abd3b63b | 705 | { |
dpslwk | 0:7480abd3b63b | 706 | CHECK_PARAM(PARAM_UART_INTCFG(UARTIntCfg)); |
dpslwk | 0:7480abd3b63b | 707 | } |
dpslwk | 0:7480abd3b63b | 708 | |
dpslwk | 0:7480abd3b63b | 709 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 710 | { |
dpslwk | 0:7480abd3b63b | 711 | if ((LPC_UART1_TypeDef *) UARTx == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 712 | { |
dpslwk | 0:7480abd3b63b | 713 | ((LPC_UART1_TypeDef *)UARTx)->/*DLIER.*/IER |= tmp; |
dpslwk | 0:7480abd3b63b | 714 | } |
dpslwk | 0:7480abd3b63b | 715 | else |
dpslwk | 0:7480abd3b63b | 716 | { |
dpslwk | 0:7480abd3b63b | 717 | UARTx->/*DLIER.*/IER |= tmp; |
dpslwk | 0:7480abd3b63b | 718 | } |
dpslwk | 0:7480abd3b63b | 719 | } |
dpslwk | 0:7480abd3b63b | 720 | else |
dpslwk | 0:7480abd3b63b | 721 | { |
dpslwk | 0:7480abd3b63b | 722 | if ((LPC_UART1_TypeDef *) UARTx == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 723 | { |
dpslwk | 0:7480abd3b63b | 724 | ((LPC_UART1_TypeDef *)UARTx)->/*DLIER.*/IER &= (~tmp) & UART1_IER_BITMASK; |
dpslwk | 0:7480abd3b63b | 725 | } |
dpslwk | 0:7480abd3b63b | 726 | else |
dpslwk | 0:7480abd3b63b | 727 | { |
dpslwk | 0:7480abd3b63b | 728 | UARTx->/*DLIER.*/IER &= (~tmp) & UART_IER_BITMASK; |
dpslwk | 0:7480abd3b63b | 729 | } |
dpslwk | 0:7480abd3b63b | 730 | } |
dpslwk | 0:7480abd3b63b | 731 | } |
dpslwk | 0:7480abd3b63b | 732 | |
dpslwk | 0:7480abd3b63b | 733 | |
dpslwk | 0:7480abd3b63b | 734 | /********************************************************************//** |
dpslwk | 0:7480abd3b63b | 735 | * @brief Get current value of Line Status register in UART peripheral. |
dpslwk | 0:7480abd3b63b | 736 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 737 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 738 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 739 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 740 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 741 | * @return Current value of Line Status register in UART peripheral. |
dpslwk | 0:7480abd3b63b | 742 | * Note: The return value of this function must be ANDed with each member in |
dpslwk | 0:7480abd3b63b | 743 | * UART_LS_Type enumeration to determine current flag status |
dpslwk | 0:7480abd3b63b | 744 | * corresponding to each Line status type. Because some flags in |
dpslwk | 0:7480abd3b63b | 745 | * Line Status register will be cleared after reading, the next reading |
dpslwk | 0:7480abd3b63b | 746 | * Line Status register could not be correct. So this function used to |
dpslwk | 0:7480abd3b63b | 747 | * read Line status register in one time only, then the return value |
dpslwk | 0:7480abd3b63b | 748 | * used to check all flags. |
dpslwk | 0:7480abd3b63b | 749 | *********************************************************************/ |
dpslwk | 0:7480abd3b63b | 750 | uint8_t UART_GetLineStatus(LPC_UART_TypeDef* UARTx) |
dpslwk | 0:7480abd3b63b | 751 | { |
dpslwk | 0:7480abd3b63b | 752 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 753 | |
dpslwk | 0:7480abd3b63b | 754 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 755 | { |
dpslwk | 0:7480abd3b63b | 756 | return ((((LPC_UART1_TypeDef *)LPC_UART1)->LSR) & UART_LSR_BITMASK); |
dpslwk | 0:7480abd3b63b | 757 | } |
dpslwk | 0:7480abd3b63b | 758 | else |
dpslwk | 0:7480abd3b63b | 759 | { |
dpslwk | 0:7480abd3b63b | 760 | return ((UARTx->LSR) & UART_LSR_BITMASK); |
dpslwk | 0:7480abd3b63b | 761 | } |
dpslwk | 0:7480abd3b63b | 762 | } |
dpslwk | 0:7480abd3b63b | 763 | |
dpslwk | 0:7480abd3b63b | 764 | /********************************************************************//** |
dpslwk | 0:7480abd3b63b | 765 | * @brief Get Interrupt Identification value |
dpslwk | 0:7480abd3b63b | 766 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 767 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 768 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 769 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 770 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 771 | * @return Current value of UART UIIR register in UART peripheral. |
dpslwk | 0:7480abd3b63b | 772 | *********************************************************************/ |
dpslwk | 0:7480abd3b63b | 773 | uint32_t UART_GetIntId(LPC_UART_TypeDef* UARTx) |
dpslwk | 0:7480abd3b63b | 774 | { |
dpslwk | 0:7480abd3b63b | 775 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 776 | return (UARTx->IIR & 0x03CF); |
dpslwk | 0:7480abd3b63b | 777 | } |
dpslwk | 0:7480abd3b63b | 778 | |
dpslwk | 0:7480abd3b63b | 779 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 780 | * @brief Check whether if UART is busy or not |
dpslwk | 0:7480abd3b63b | 781 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 782 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 783 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 784 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 785 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 786 | * @return RESET if UART is not busy, otherwise return SET. |
dpslwk | 0:7480abd3b63b | 787 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 788 | FlagStatus UART_CheckBusy(LPC_UART_TypeDef *UARTx) |
dpslwk | 0:7480abd3b63b | 789 | { |
dpslwk | 0:7480abd3b63b | 790 | if (UARTx->LSR & UART_LSR_TEMT){ |
dpslwk | 0:7480abd3b63b | 791 | return RESET; |
dpslwk | 0:7480abd3b63b | 792 | } else { |
dpslwk | 0:7480abd3b63b | 793 | return SET; |
dpslwk | 0:7480abd3b63b | 794 | } |
dpslwk | 0:7480abd3b63b | 795 | } |
dpslwk | 0:7480abd3b63b | 796 | |
dpslwk | 0:7480abd3b63b | 797 | |
dpslwk | 0:7480abd3b63b | 798 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 799 | * @brief Configure FIFO function on selected UART peripheral |
dpslwk | 0:7480abd3b63b | 800 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 801 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 802 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 803 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 804 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 805 | * @param[in] FIFOCfg Pointer to a UART_FIFO_CFG_Type Structure that |
dpslwk | 0:7480abd3b63b | 806 | * contains specified information about FIFO configuration |
dpslwk | 0:7480abd3b63b | 807 | * @return none |
dpslwk | 0:7480abd3b63b | 808 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 809 | void UART_FIFOConfig(LPC_UART_TypeDef *UARTx, UART_FIFO_CFG_Type *FIFOCfg) |
dpslwk | 0:7480abd3b63b | 810 | { |
dpslwk | 0:7480abd3b63b | 811 | uint8_t tmp = 0; |
dpslwk | 0:7480abd3b63b | 812 | |
dpslwk | 0:7480abd3b63b | 813 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 814 | CHECK_PARAM(PARAM_UART_FIFO_LEVEL(FIFOCfg->FIFO_Level)); |
dpslwk | 0:7480abd3b63b | 815 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(FIFOCfg->FIFO_DMAMode)); |
dpslwk | 0:7480abd3b63b | 816 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(FIFOCfg->FIFO_ResetRxBuf)); |
dpslwk | 0:7480abd3b63b | 817 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(FIFOCfg->FIFO_ResetTxBuf)); |
dpslwk | 0:7480abd3b63b | 818 | |
dpslwk | 0:7480abd3b63b | 819 | tmp |= UART_FCR_FIFO_EN; |
dpslwk | 0:7480abd3b63b | 820 | switch (FIFOCfg->FIFO_Level){ |
dpslwk | 0:7480abd3b63b | 821 | case UART_FIFO_TRGLEV0: |
dpslwk | 0:7480abd3b63b | 822 | tmp |= UART_FCR_TRG_LEV0; |
dpslwk | 0:7480abd3b63b | 823 | break; |
dpslwk | 0:7480abd3b63b | 824 | case UART_FIFO_TRGLEV1: |
dpslwk | 0:7480abd3b63b | 825 | tmp |= UART_FCR_TRG_LEV1; |
dpslwk | 0:7480abd3b63b | 826 | break; |
dpslwk | 0:7480abd3b63b | 827 | case UART_FIFO_TRGLEV2: |
dpslwk | 0:7480abd3b63b | 828 | tmp |= UART_FCR_TRG_LEV2; |
dpslwk | 0:7480abd3b63b | 829 | break; |
dpslwk | 0:7480abd3b63b | 830 | case UART_FIFO_TRGLEV3: |
dpslwk | 0:7480abd3b63b | 831 | default: |
dpslwk | 0:7480abd3b63b | 832 | tmp |= UART_FCR_TRG_LEV3; |
dpslwk | 0:7480abd3b63b | 833 | break; |
dpslwk | 0:7480abd3b63b | 834 | } |
dpslwk | 0:7480abd3b63b | 835 | |
dpslwk | 0:7480abd3b63b | 836 | if (FIFOCfg->FIFO_ResetTxBuf == ENABLE) |
dpslwk | 0:7480abd3b63b | 837 | { |
dpslwk | 0:7480abd3b63b | 838 | tmp |= UART_FCR_TX_RS; |
dpslwk | 0:7480abd3b63b | 839 | } |
dpslwk | 0:7480abd3b63b | 840 | if (FIFOCfg->FIFO_ResetRxBuf == ENABLE) |
dpslwk | 0:7480abd3b63b | 841 | { |
dpslwk | 0:7480abd3b63b | 842 | tmp |= UART_FCR_RX_RS; |
dpslwk | 0:7480abd3b63b | 843 | } |
dpslwk | 0:7480abd3b63b | 844 | if (FIFOCfg->FIFO_DMAMode == ENABLE) |
dpslwk | 0:7480abd3b63b | 845 | { |
dpslwk | 0:7480abd3b63b | 846 | tmp |= UART_FCR_DMAMODE_SEL; |
dpslwk | 0:7480abd3b63b | 847 | } |
dpslwk | 0:7480abd3b63b | 848 | |
dpslwk | 0:7480abd3b63b | 849 | |
dpslwk | 0:7480abd3b63b | 850 | //write to FIFO control register |
dpslwk | 0:7480abd3b63b | 851 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 852 | { |
dpslwk | 0:7480abd3b63b | 853 | ((LPC_UART1_TypeDef *)UARTx)->/*IIFCR.*/FCR = tmp & UART_FCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 854 | } |
dpslwk | 0:7480abd3b63b | 855 | else |
dpslwk | 0:7480abd3b63b | 856 | { |
dpslwk | 0:7480abd3b63b | 857 | UARTx->/*IIFCR.*/FCR = tmp & UART_FCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 858 | } |
dpslwk | 0:7480abd3b63b | 859 | } |
dpslwk | 0:7480abd3b63b | 860 | |
dpslwk | 0:7480abd3b63b | 861 | /*****************************************************************************//** |
dpslwk | 0:7480abd3b63b | 862 | * @brief Fills each UART_FIFOInitStruct member with its default value: |
dpslwk | 0:7480abd3b63b | 863 | * - FIFO_DMAMode = DISABLE |
dpslwk | 0:7480abd3b63b | 864 | * - FIFO_Level = UART_FIFO_TRGLEV0 |
dpslwk | 0:7480abd3b63b | 865 | * - FIFO_ResetRxBuf = ENABLE |
dpslwk | 0:7480abd3b63b | 866 | * - FIFO_ResetTxBuf = ENABLE |
dpslwk | 0:7480abd3b63b | 867 | * - FIFO_State = ENABLE |
dpslwk | 0:7480abd3b63b | 868 | |
dpslwk | 0:7480abd3b63b | 869 | * @param[in] UART_FIFOInitStruct Pointer to a UART_FIFO_CFG_Type structure |
dpslwk | 0:7480abd3b63b | 870 | * which will be initialized. |
dpslwk | 0:7480abd3b63b | 871 | * @return None |
dpslwk | 0:7480abd3b63b | 872 | *******************************************************************************/ |
dpslwk | 0:7480abd3b63b | 873 | void UART_FIFOConfigStructInit(UART_FIFO_CFG_Type *UART_FIFOInitStruct) |
dpslwk | 0:7480abd3b63b | 874 | { |
dpslwk | 0:7480abd3b63b | 875 | UART_FIFOInitStruct->FIFO_DMAMode = DISABLE; |
dpslwk | 0:7480abd3b63b | 876 | UART_FIFOInitStruct->FIFO_Level = UART_FIFO_TRGLEV0; |
dpslwk | 0:7480abd3b63b | 877 | UART_FIFOInitStruct->FIFO_ResetRxBuf = ENABLE; |
dpslwk | 0:7480abd3b63b | 878 | UART_FIFOInitStruct->FIFO_ResetTxBuf = ENABLE; |
dpslwk | 0:7480abd3b63b | 879 | } |
dpslwk | 0:7480abd3b63b | 880 | |
dpslwk | 0:7480abd3b63b | 881 | |
dpslwk | 0:7480abd3b63b | 882 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 883 | * @brief Start/Stop Auto Baudrate activity |
dpslwk | 0:7480abd3b63b | 884 | * @param[in] UARTx UART peripheral selected, should be |
dpslwk | 0:7480abd3b63b | 885 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 886 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 887 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 888 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 889 | * @param[in] ABConfigStruct A pointer to UART_AB_CFG_Type structure that |
dpslwk | 0:7480abd3b63b | 890 | * contains specified information about UART |
dpslwk | 0:7480abd3b63b | 891 | * auto baudrate configuration |
dpslwk | 0:7480abd3b63b | 892 | * @param[in] NewState New State of Auto baudrate activity, should be: |
dpslwk | 0:7480abd3b63b | 893 | * - ENABLE: Start this activity |
dpslwk | 0:7480abd3b63b | 894 | * - DISABLE: Stop this activity |
dpslwk | 0:7480abd3b63b | 895 | * Note: Auto-baudrate mode enable bit will be cleared once this mode |
dpslwk | 0:7480abd3b63b | 896 | * completed. |
dpslwk | 0:7480abd3b63b | 897 | * @return none |
dpslwk | 0:7480abd3b63b | 898 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 899 | void UART_ABCmd(LPC_UART_TypeDef *UARTx, UART_AB_CFG_Type *ABConfigStruct, \ |
dpslwk | 0:7480abd3b63b | 900 | FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 901 | { |
dpslwk | 0:7480abd3b63b | 902 | uint32_t tmp; |
dpslwk | 0:7480abd3b63b | 903 | |
dpslwk | 0:7480abd3b63b | 904 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 905 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 906 | |
dpslwk | 0:7480abd3b63b | 907 | tmp = 0; |
dpslwk | 0:7480abd3b63b | 908 | if (NewState == ENABLE) { |
dpslwk | 0:7480abd3b63b | 909 | if (ABConfigStruct->ABMode == UART_AUTOBAUD_MODE1){ |
dpslwk | 0:7480abd3b63b | 910 | tmp |= UART_ACR_MODE; |
dpslwk | 0:7480abd3b63b | 911 | } |
dpslwk | 0:7480abd3b63b | 912 | if (ABConfigStruct->AutoRestart == ENABLE){ |
dpslwk | 0:7480abd3b63b | 913 | tmp |= UART_ACR_AUTO_RESTART; |
dpslwk | 0:7480abd3b63b | 914 | } |
dpslwk | 0:7480abd3b63b | 915 | } |
dpslwk | 0:7480abd3b63b | 916 | |
dpslwk | 0:7480abd3b63b | 917 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 918 | { |
dpslwk | 0:7480abd3b63b | 919 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 920 | { |
dpslwk | 0:7480abd3b63b | 921 | // Clear DLL and DLM value |
dpslwk | 0:7480abd3b63b | 922 | ((LPC_UART1_TypeDef *)UARTx)->LCR |= UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 923 | ((LPC_UART1_TypeDef *)UARTx)->DLL = 0; |
dpslwk | 0:7480abd3b63b | 924 | ((LPC_UART1_TypeDef *)UARTx)->DLM = 0; |
dpslwk | 0:7480abd3b63b | 925 | ((LPC_UART1_TypeDef *)UARTx)->LCR &= ~UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 926 | // FDR value must be reset to default value |
dpslwk | 0:7480abd3b63b | 927 | ((LPC_UART1_TypeDef *)UARTx)->FDR = 0x10; |
dpslwk | 0:7480abd3b63b | 928 | ((LPC_UART1_TypeDef *)UARTx)->ACR = UART_ACR_START | tmp; |
dpslwk | 0:7480abd3b63b | 929 | } |
dpslwk | 0:7480abd3b63b | 930 | else |
dpslwk | 0:7480abd3b63b | 931 | { |
dpslwk | 0:7480abd3b63b | 932 | ((LPC_UART1_TypeDef *)UARTx)->ACR = 0; |
dpslwk | 0:7480abd3b63b | 933 | } |
dpslwk | 0:7480abd3b63b | 934 | } |
dpslwk | 0:7480abd3b63b | 935 | else |
dpslwk | 0:7480abd3b63b | 936 | { |
dpslwk | 0:7480abd3b63b | 937 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 938 | { |
dpslwk | 0:7480abd3b63b | 939 | // Clear DLL and DLM value |
dpslwk | 0:7480abd3b63b | 940 | UARTx->LCR |= UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 941 | UARTx->DLL = 0; |
dpslwk | 0:7480abd3b63b | 942 | UARTx->DLM = 0; |
dpslwk | 0:7480abd3b63b | 943 | UARTx->LCR &= ~UART_LCR_DLAB_EN; |
dpslwk | 0:7480abd3b63b | 944 | // FDR value must be reset to default value |
dpslwk | 0:7480abd3b63b | 945 | UARTx->FDR = 0x10; |
dpslwk | 0:7480abd3b63b | 946 | UARTx->ACR = UART_ACR_START | tmp; |
dpslwk | 0:7480abd3b63b | 947 | } |
dpslwk | 0:7480abd3b63b | 948 | else |
dpslwk | 0:7480abd3b63b | 949 | { |
dpslwk | 0:7480abd3b63b | 950 | UARTx->ACR = 0; |
dpslwk | 0:7480abd3b63b | 951 | } |
dpslwk | 0:7480abd3b63b | 952 | } |
dpslwk | 0:7480abd3b63b | 953 | } |
dpslwk | 0:7480abd3b63b | 954 | |
dpslwk | 0:7480abd3b63b | 955 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 956 | * @brief Clear Autobaud Interrupt Pending |
dpslwk | 0:7480abd3b63b | 957 | * @param[in] UARTx UART peripheral selected, should be |
dpslwk | 0:7480abd3b63b | 958 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 959 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 960 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 961 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 962 | * @param[in] ABIntType type of auto-baud interrupt, should be: |
dpslwk | 0:7480abd3b63b | 963 | * - UART_AUTOBAUD_INTSTAT_ABEO: End of Auto-baud interrupt |
dpslwk | 0:7480abd3b63b | 964 | * - UART_AUTOBAUD_INTSTAT_ABTO: Auto-baud time out interrupt |
dpslwk | 0:7480abd3b63b | 965 | * @return none |
dpslwk | 0:7480abd3b63b | 966 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 967 | void UART_ABClearIntPending(LPC_UART_TypeDef *UARTx, UART_ABEO_Type ABIntType) |
dpslwk | 0:7480abd3b63b | 968 | { |
dpslwk | 0:7480abd3b63b | 969 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 970 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 971 | { |
dpslwk | 0:7480abd3b63b | 972 | UARTx->ACR |= ABIntType; |
dpslwk | 0:7480abd3b63b | 973 | } |
dpslwk | 0:7480abd3b63b | 974 | else |
dpslwk | 0:7480abd3b63b | 975 | UARTx->ACR |= ABIntType; |
dpslwk | 0:7480abd3b63b | 976 | } |
dpslwk | 0:7480abd3b63b | 977 | |
dpslwk | 0:7480abd3b63b | 978 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 979 | * @brief Enable/Disable transmission on UART TxD pin |
dpslwk | 0:7480abd3b63b | 980 | * @param[in] UARTx UART peripheral selected, should be: |
dpslwk | 0:7480abd3b63b | 981 | * - LPC_UART0: UART0 peripheral |
dpslwk | 0:7480abd3b63b | 982 | * - LPC_UART1: UART1 peripheral |
dpslwk | 0:7480abd3b63b | 983 | * - LPC_UART2: UART2 peripheral |
dpslwk | 0:7480abd3b63b | 984 | * - LPC_UART3: UART3 peripheral |
dpslwk | 0:7480abd3b63b | 985 | * @param[in] NewState New State of Tx transmission function, should be: |
dpslwk | 0:7480abd3b63b | 986 | * - ENABLE: Enable this function |
dpslwk | 0:7480abd3b63b | 987 | - DISABLE: Disable this function |
dpslwk | 0:7480abd3b63b | 988 | * @return none |
dpslwk | 0:7480abd3b63b | 989 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 990 | void UART_TxCmd(LPC_UART_TypeDef *UARTx, FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 991 | { |
dpslwk | 0:7480abd3b63b | 992 | CHECK_PARAM(PARAM_UARTx(UARTx)); |
dpslwk | 0:7480abd3b63b | 993 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 994 | |
dpslwk | 0:7480abd3b63b | 995 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 996 | { |
dpslwk | 0:7480abd3b63b | 997 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 998 | { |
dpslwk | 0:7480abd3b63b | 999 | ((LPC_UART1_TypeDef *)UARTx)->TER |= UART_TER_TXEN; |
dpslwk | 0:7480abd3b63b | 1000 | } |
dpslwk | 0:7480abd3b63b | 1001 | else |
dpslwk | 0:7480abd3b63b | 1002 | { |
dpslwk | 0:7480abd3b63b | 1003 | UARTx->TER |= UART_TER_TXEN; |
dpslwk | 0:7480abd3b63b | 1004 | } |
dpslwk | 0:7480abd3b63b | 1005 | } |
dpslwk | 0:7480abd3b63b | 1006 | else |
dpslwk | 0:7480abd3b63b | 1007 | { |
dpslwk | 0:7480abd3b63b | 1008 | if (((LPC_UART1_TypeDef *)UARTx) == LPC_UART1) |
dpslwk | 0:7480abd3b63b | 1009 | { |
dpslwk | 0:7480abd3b63b | 1010 | ((LPC_UART1_TypeDef *)UARTx)->TER &= (~UART_TER_TXEN) & UART_TER_BITMASK; |
dpslwk | 0:7480abd3b63b | 1011 | } |
dpslwk | 0:7480abd3b63b | 1012 | else |
dpslwk | 0:7480abd3b63b | 1013 | { |
dpslwk | 0:7480abd3b63b | 1014 | UARTx->TER &= (~UART_TER_TXEN) & UART_TER_BITMASK; |
dpslwk | 0:7480abd3b63b | 1015 | } |
dpslwk | 0:7480abd3b63b | 1016 | } |
dpslwk | 0:7480abd3b63b | 1017 | } |
dpslwk | 0:7480abd3b63b | 1018 | |
dpslwk | 0:7480abd3b63b | 1019 | /* UART IrDA functions ---------------------------------------------------*/ |
dpslwk | 0:7480abd3b63b | 1020 | |
dpslwk | 0:7480abd3b63b | 1021 | #ifdef _UART3 |
dpslwk | 0:7480abd3b63b | 1022 | |
dpslwk | 0:7480abd3b63b | 1023 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1024 | * @brief Enable or disable inverting serial input function of IrDA |
dpslwk | 0:7480abd3b63b | 1025 | * on UART peripheral. |
dpslwk | 0:7480abd3b63b | 1026 | * @param[in] UARTx UART peripheral selected, should be LPC_UART3 (only) |
dpslwk | 0:7480abd3b63b | 1027 | * @param[in] NewState New state of inverting serial input, should be: |
dpslwk | 0:7480abd3b63b | 1028 | * - ENABLE: Enable this function. |
dpslwk | 0:7480abd3b63b | 1029 | * - DISABLE: Disable this function. |
dpslwk | 0:7480abd3b63b | 1030 | * @return none |
dpslwk | 0:7480abd3b63b | 1031 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1032 | void UART_IrDAInvtInputCmd(LPC_UART_TypeDef* UARTx, FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 1033 | { |
dpslwk | 0:7480abd3b63b | 1034 | CHECK_PARAM(PARAM_UART_IrDA(UARTx)); |
dpslwk | 0:7480abd3b63b | 1035 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 1036 | |
dpslwk | 0:7480abd3b63b | 1037 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 1038 | { |
dpslwk | 0:7480abd3b63b | 1039 | UARTx->ICR |= UART_ICR_IRDAINV; |
dpslwk | 0:7480abd3b63b | 1040 | } |
dpslwk | 0:7480abd3b63b | 1041 | else if (NewState == DISABLE) |
dpslwk | 0:7480abd3b63b | 1042 | { |
dpslwk | 0:7480abd3b63b | 1043 | UARTx->ICR &= (~UART_ICR_IRDAINV) & UART_ICR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1044 | } |
dpslwk | 0:7480abd3b63b | 1045 | } |
dpslwk | 0:7480abd3b63b | 1046 | |
dpslwk | 0:7480abd3b63b | 1047 | |
dpslwk | 0:7480abd3b63b | 1048 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1049 | * @brief Enable or disable IrDA function on UART peripheral. |
dpslwk | 0:7480abd3b63b | 1050 | * @param[in] UARTx UART peripheral selected, should be LPC_UART3 (only) |
dpslwk | 0:7480abd3b63b | 1051 | * @param[in] NewState New state of IrDA function, should be: |
dpslwk | 0:7480abd3b63b | 1052 | * - ENABLE: Enable this function. |
dpslwk | 0:7480abd3b63b | 1053 | * - DISABLE: Disable this function. |
dpslwk | 0:7480abd3b63b | 1054 | * @return none |
dpslwk | 0:7480abd3b63b | 1055 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1056 | void UART_IrDACmd(LPC_UART_TypeDef* UARTx, FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 1057 | { |
dpslwk | 0:7480abd3b63b | 1058 | CHECK_PARAM(PARAM_UART_IrDA(UARTx)); |
dpslwk | 0:7480abd3b63b | 1059 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 1060 | |
dpslwk | 0:7480abd3b63b | 1061 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 1062 | { |
dpslwk | 0:7480abd3b63b | 1063 | UARTx->ICR |= UART_ICR_IRDAEN; |
dpslwk | 0:7480abd3b63b | 1064 | } |
dpslwk | 0:7480abd3b63b | 1065 | else |
dpslwk | 0:7480abd3b63b | 1066 | { |
dpslwk | 0:7480abd3b63b | 1067 | UARTx->ICR &= (~UART_ICR_IRDAEN) & UART_ICR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1068 | } |
dpslwk | 0:7480abd3b63b | 1069 | } |
dpslwk | 0:7480abd3b63b | 1070 | |
dpslwk | 0:7480abd3b63b | 1071 | |
dpslwk | 0:7480abd3b63b | 1072 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1073 | * @brief Configure Pulse divider for IrDA function on UART peripheral. |
dpslwk | 0:7480abd3b63b | 1074 | * @param[in] UARTx UART peripheral selected, should be LPC_UART3 (only) |
dpslwk | 0:7480abd3b63b | 1075 | * @param[in] PulseDiv Pulse Divider value from Peripheral clock, |
dpslwk | 0:7480abd3b63b | 1076 | * should be one of the following: |
dpslwk | 0:7480abd3b63b | 1077 | - UART_IrDA_PULSEDIV2 : Pulse width = 2 * Tpclk |
dpslwk | 0:7480abd3b63b | 1078 | - UART_IrDA_PULSEDIV4 : Pulse width = 4 * Tpclk |
dpslwk | 0:7480abd3b63b | 1079 | - UART_IrDA_PULSEDIV8 : Pulse width = 8 * Tpclk |
dpslwk | 0:7480abd3b63b | 1080 | - UART_IrDA_PULSEDIV16 : Pulse width = 16 * Tpclk |
dpslwk | 0:7480abd3b63b | 1081 | - UART_IrDA_PULSEDIV32 : Pulse width = 32 * Tpclk |
dpslwk | 0:7480abd3b63b | 1082 | - UART_IrDA_PULSEDIV64 : Pulse width = 64 * Tpclk |
dpslwk | 0:7480abd3b63b | 1083 | - UART_IrDA_PULSEDIV128 : Pulse width = 128 * Tpclk |
dpslwk | 0:7480abd3b63b | 1084 | - UART_IrDA_PULSEDIV256 : Pulse width = 256 * Tpclk |
dpslwk | 0:7480abd3b63b | 1085 | |
dpslwk | 0:7480abd3b63b | 1086 | * @return none |
dpslwk | 0:7480abd3b63b | 1087 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1088 | void UART_IrDAPulseDivConfig(LPC_UART_TypeDef *UARTx, UART_IrDA_PULSE_Type PulseDiv) |
dpslwk | 0:7480abd3b63b | 1089 | { |
dpslwk | 0:7480abd3b63b | 1090 | uint32_t tmp, tmp1; |
dpslwk | 0:7480abd3b63b | 1091 | CHECK_PARAM(PARAM_UART_IrDA(UARTx)); |
dpslwk | 0:7480abd3b63b | 1092 | CHECK_PARAM(PARAM_UART_IrDA_PULSEDIV(PulseDiv)); |
dpslwk | 0:7480abd3b63b | 1093 | |
dpslwk | 0:7480abd3b63b | 1094 | tmp1 = UART_ICR_PULSEDIV(PulseDiv); |
dpslwk | 0:7480abd3b63b | 1095 | tmp = UARTx->ICR & (~UART_ICR_PULSEDIV(7)); |
dpslwk | 0:7480abd3b63b | 1096 | tmp |= tmp1 | UART_ICR_FIXPULSE_EN; |
dpslwk | 0:7480abd3b63b | 1097 | UARTx->ICR = tmp & UART_ICR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1098 | } |
dpslwk | 0:7480abd3b63b | 1099 | |
dpslwk | 0:7480abd3b63b | 1100 | #endif |
dpslwk | 0:7480abd3b63b | 1101 | |
dpslwk | 0:7480abd3b63b | 1102 | |
dpslwk | 0:7480abd3b63b | 1103 | /* UART1 FullModem function ---------------------------------------------*/ |
dpslwk | 0:7480abd3b63b | 1104 | |
dpslwk | 0:7480abd3b63b | 1105 | #ifdef _UART1 |
dpslwk | 0:7480abd3b63b | 1106 | |
dpslwk | 0:7480abd3b63b | 1107 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1108 | * @brief Force pin DTR/RTS corresponding to given state (Full modem mode) |
dpslwk | 0:7480abd3b63b | 1109 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1110 | * @param[in] Pin Pin that NewState will be applied to, should be: |
dpslwk | 0:7480abd3b63b | 1111 | * - UART1_MODEM_PIN_DTR: DTR pin. |
dpslwk | 0:7480abd3b63b | 1112 | * - UART1_MODEM_PIN_RTS: RTS pin. |
dpslwk | 0:7480abd3b63b | 1113 | * @param[in] NewState New State of DTR/RTS pin, should be: |
dpslwk | 0:7480abd3b63b | 1114 | * - INACTIVE: Force the pin to inactive signal. |
dpslwk | 0:7480abd3b63b | 1115 | - ACTIVE: Force the pin to active signal. |
dpslwk | 0:7480abd3b63b | 1116 | * @return none |
dpslwk | 0:7480abd3b63b | 1117 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1118 | void UART_FullModemForcePinState(LPC_UART1_TypeDef *UARTx, UART_MODEM_PIN_Type Pin, \ |
dpslwk | 0:7480abd3b63b | 1119 | UART1_SignalState NewState) |
dpslwk | 0:7480abd3b63b | 1120 | { |
dpslwk | 0:7480abd3b63b | 1121 | uint8_t tmp = 0; |
dpslwk | 0:7480abd3b63b | 1122 | |
dpslwk | 0:7480abd3b63b | 1123 | CHECK_PARAM(PARAM_UART1_MODEM(UARTx)); |
dpslwk | 0:7480abd3b63b | 1124 | CHECK_PARAM(PARAM_UART1_MODEM_PIN(Pin)); |
dpslwk | 0:7480abd3b63b | 1125 | CHECK_PARAM(PARAM_UART1_SIGNALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 1126 | |
dpslwk | 0:7480abd3b63b | 1127 | switch (Pin){ |
dpslwk | 0:7480abd3b63b | 1128 | case UART1_MODEM_PIN_DTR: |
dpslwk | 0:7480abd3b63b | 1129 | tmp = UART1_MCR_DTR_CTRL; |
dpslwk | 0:7480abd3b63b | 1130 | break; |
dpslwk | 0:7480abd3b63b | 1131 | case UART1_MODEM_PIN_RTS: |
dpslwk | 0:7480abd3b63b | 1132 | tmp = UART1_MCR_RTS_CTRL; |
dpslwk | 0:7480abd3b63b | 1133 | break; |
dpslwk | 0:7480abd3b63b | 1134 | default: |
dpslwk | 0:7480abd3b63b | 1135 | break; |
dpslwk | 0:7480abd3b63b | 1136 | } |
dpslwk | 0:7480abd3b63b | 1137 | |
dpslwk | 0:7480abd3b63b | 1138 | if (NewState == ACTIVE){ |
dpslwk | 0:7480abd3b63b | 1139 | UARTx->MCR |= tmp; |
dpslwk | 0:7480abd3b63b | 1140 | } else { |
dpslwk | 0:7480abd3b63b | 1141 | UARTx->MCR &= (~tmp) & UART1_MCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1142 | } |
dpslwk | 0:7480abd3b63b | 1143 | } |
dpslwk | 0:7480abd3b63b | 1144 | |
dpslwk | 0:7480abd3b63b | 1145 | |
dpslwk | 0:7480abd3b63b | 1146 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1147 | * @brief Configure Full Modem mode for UART peripheral |
dpslwk | 0:7480abd3b63b | 1148 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1149 | * @param[in] Mode Full Modem mode, should be: |
dpslwk | 0:7480abd3b63b | 1150 | * - UART1_MODEM_MODE_LOOPBACK: Loop back mode. |
dpslwk | 0:7480abd3b63b | 1151 | * - UART1_MODEM_MODE_AUTO_RTS: Auto-RTS mode. |
dpslwk | 0:7480abd3b63b | 1152 | * - UART1_MODEM_MODE_AUTO_CTS: Auto-CTS mode. |
dpslwk | 0:7480abd3b63b | 1153 | * @param[in] NewState New State of this mode, should be: |
dpslwk | 0:7480abd3b63b | 1154 | * - ENABLE: Enable this mode. |
dpslwk | 0:7480abd3b63b | 1155 | - DISABLE: Disable this mode. |
dpslwk | 0:7480abd3b63b | 1156 | * @return none |
dpslwk | 0:7480abd3b63b | 1157 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1158 | void UART_FullModemConfigMode(LPC_UART1_TypeDef *UARTx, UART_MODEM_MODE_Type Mode, \ |
dpslwk | 0:7480abd3b63b | 1159 | FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 1160 | { |
dpslwk | 0:7480abd3b63b | 1161 | uint8_t tmp = 0; |
dpslwk | 0:7480abd3b63b | 1162 | |
dpslwk | 0:7480abd3b63b | 1163 | CHECK_PARAM(PARAM_UART1_MODEM(UARTx)); |
dpslwk | 0:7480abd3b63b | 1164 | CHECK_PARAM(PARAM_UART1_MODEM_MODE(Mode)); |
dpslwk | 0:7480abd3b63b | 1165 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); |
dpslwk | 0:7480abd3b63b | 1166 | |
dpslwk | 0:7480abd3b63b | 1167 | switch(Mode){ |
dpslwk | 0:7480abd3b63b | 1168 | case UART1_MODEM_MODE_LOOPBACK: |
dpslwk | 0:7480abd3b63b | 1169 | tmp = UART1_MCR_LOOPB_EN; |
dpslwk | 0:7480abd3b63b | 1170 | break; |
dpslwk | 0:7480abd3b63b | 1171 | case UART1_MODEM_MODE_AUTO_RTS: |
dpslwk | 0:7480abd3b63b | 1172 | tmp = UART1_MCR_AUTO_RTS_EN; |
dpslwk | 0:7480abd3b63b | 1173 | break; |
dpslwk | 0:7480abd3b63b | 1174 | case UART1_MODEM_MODE_AUTO_CTS: |
dpslwk | 0:7480abd3b63b | 1175 | tmp = UART1_MCR_AUTO_CTS_EN; |
dpslwk | 0:7480abd3b63b | 1176 | break; |
dpslwk | 0:7480abd3b63b | 1177 | default: |
dpslwk | 0:7480abd3b63b | 1178 | break; |
dpslwk | 0:7480abd3b63b | 1179 | } |
dpslwk | 0:7480abd3b63b | 1180 | |
dpslwk | 0:7480abd3b63b | 1181 | if (NewState == ENABLE) |
dpslwk | 0:7480abd3b63b | 1182 | { |
dpslwk | 0:7480abd3b63b | 1183 | UARTx->MCR |= tmp; |
dpslwk | 0:7480abd3b63b | 1184 | } |
dpslwk | 0:7480abd3b63b | 1185 | else |
dpslwk | 0:7480abd3b63b | 1186 | { |
dpslwk | 0:7480abd3b63b | 1187 | UARTx->MCR &= (~tmp) & UART1_MCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1188 | } |
dpslwk | 0:7480abd3b63b | 1189 | } |
dpslwk | 0:7480abd3b63b | 1190 | |
dpslwk | 0:7480abd3b63b | 1191 | |
dpslwk | 0:7480abd3b63b | 1192 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1193 | * @brief Get current status of modem status register |
dpslwk | 0:7480abd3b63b | 1194 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1195 | * @return Current value of modem status register |
dpslwk | 0:7480abd3b63b | 1196 | * Note: The return value of this function must be ANDed with each member |
dpslwk | 0:7480abd3b63b | 1197 | * UART_MODEM_STAT_type enumeration to determine current flag status |
dpslwk | 0:7480abd3b63b | 1198 | * corresponding to each modem flag status. Because some flags in |
dpslwk | 0:7480abd3b63b | 1199 | * modem status register will be cleared after reading, the next reading |
dpslwk | 0:7480abd3b63b | 1200 | * modem register could not be correct. So this function used to |
dpslwk | 0:7480abd3b63b | 1201 | * read modem status register in one time only, then the return value |
dpslwk | 0:7480abd3b63b | 1202 | * used to check all flags. |
dpslwk | 0:7480abd3b63b | 1203 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1204 | uint8_t UART_FullModemGetStatus(LPC_UART1_TypeDef *UARTx) |
dpslwk | 0:7480abd3b63b | 1205 | { |
dpslwk | 0:7480abd3b63b | 1206 | CHECK_PARAM(PARAM_UART1_MODEM(UARTx)); |
dpslwk | 0:7480abd3b63b | 1207 | return ((UARTx->MSR) & UART1_MSR_BITMASK); |
dpslwk | 0:7480abd3b63b | 1208 | } |
dpslwk | 0:7480abd3b63b | 1209 | |
dpslwk | 0:7480abd3b63b | 1210 | |
dpslwk | 0:7480abd3b63b | 1211 | /* UART RS485 functions --------------------------------------------------------------*/ |
dpslwk | 0:7480abd3b63b | 1212 | |
dpslwk | 0:7480abd3b63b | 1213 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1214 | * @brief Configure UART peripheral in RS485 mode according to the specified |
dpslwk | 0:7480abd3b63b | 1215 | * parameters in the RS485ConfigStruct. |
dpslwk | 0:7480abd3b63b | 1216 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1217 | * @param[in] RS485ConfigStruct Pointer to a UART1_RS485_CTRLCFG_Type structure |
dpslwk | 0:7480abd3b63b | 1218 | * that contains the configuration information for specified UART |
dpslwk | 0:7480abd3b63b | 1219 | * in RS485 mode. |
dpslwk | 0:7480abd3b63b | 1220 | * @return None |
dpslwk | 0:7480abd3b63b | 1221 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1222 | void UART_RS485Config(LPC_UART1_TypeDef *UARTx, UART1_RS485_CTRLCFG_Type *RS485ConfigStruct) |
dpslwk | 0:7480abd3b63b | 1223 | { |
dpslwk | 0:7480abd3b63b | 1224 | uint32_t tmp; |
dpslwk | 0:7480abd3b63b | 1225 | |
dpslwk | 0:7480abd3b63b | 1226 | CHECK_PARAM(PARAM_UART1_MODEM(UARTx)); |
dpslwk | 0:7480abd3b63b | 1227 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(RS485ConfigStruct->AutoAddrDetect_State)); |
dpslwk | 0:7480abd3b63b | 1228 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(RS485ConfigStruct->AutoDirCtrl_State)); |
dpslwk | 0:7480abd3b63b | 1229 | CHECK_PARAM(PARAM_UART1_RS485_CFG_DELAYVALUE(RS485ConfigStruct->DelayValue)); |
dpslwk | 0:7480abd3b63b | 1230 | CHECK_PARAM(PARAM_SETSTATE(RS485ConfigStruct->DirCtrlPol_Level)); |
dpslwk | 0:7480abd3b63b | 1231 | CHECK_PARAM(PARAM_UART_RS485_DIRCTRL_PIN(RS485ConfigStruct->DirCtrlPin)); |
dpslwk | 0:7480abd3b63b | 1232 | CHECK_PARAM(PARAM_UART1_RS485_CFG_MATCHADDRVALUE(RS485ConfigStruct->MatchAddrValue)); |
dpslwk | 0:7480abd3b63b | 1233 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(RS485ConfigStruct->NormalMultiDropMode_State)); |
dpslwk | 0:7480abd3b63b | 1234 | CHECK_PARAM(PARAM_FUNCTIONALSTATE(RS485ConfigStruct->Rx_State)); |
dpslwk | 0:7480abd3b63b | 1235 | |
dpslwk | 0:7480abd3b63b | 1236 | tmp = 0; |
dpslwk | 0:7480abd3b63b | 1237 | // If Auto Direction Control is enabled - This function is used in Master mode |
dpslwk | 0:7480abd3b63b | 1238 | if (RS485ConfigStruct->AutoDirCtrl_State == ENABLE) |
dpslwk | 0:7480abd3b63b | 1239 | { |
dpslwk | 0:7480abd3b63b | 1240 | tmp |= UART1_RS485CTRL_DCTRL_EN; |
dpslwk | 0:7480abd3b63b | 1241 | |
dpslwk | 0:7480abd3b63b | 1242 | // Set polar |
dpslwk | 0:7480abd3b63b | 1243 | if (RS485ConfigStruct->DirCtrlPol_Level == SET) |
dpslwk | 0:7480abd3b63b | 1244 | { |
dpslwk | 0:7480abd3b63b | 1245 | tmp |= UART1_RS485CTRL_OINV_1; |
dpslwk | 0:7480abd3b63b | 1246 | } |
dpslwk | 0:7480abd3b63b | 1247 | |
dpslwk | 0:7480abd3b63b | 1248 | // Set pin according to |
dpslwk | 0:7480abd3b63b | 1249 | if (RS485ConfigStruct->DirCtrlPin == UART1_RS485_DIRCTRL_DTR) |
dpslwk | 0:7480abd3b63b | 1250 | { |
dpslwk | 0:7480abd3b63b | 1251 | tmp |= UART1_RS485CTRL_SEL_DTR; |
dpslwk | 0:7480abd3b63b | 1252 | } |
dpslwk | 0:7480abd3b63b | 1253 | |
dpslwk | 0:7480abd3b63b | 1254 | // Fill delay time |
dpslwk | 0:7480abd3b63b | 1255 | UARTx->RS485DLY = RS485ConfigStruct->DelayValue & UART1_RS485DLY_BITMASK; |
dpslwk | 0:7480abd3b63b | 1256 | } |
dpslwk | 0:7480abd3b63b | 1257 | |
dpslwk | 0:7480abd3b63b | 1258 | // MultiDrop mode is enable |
dpslwk | 0:7480abd3b63b | 1259 | if (RS485ConfigStruct->NormalMultiDropMode_State == ENABLE) |
dpslwk | 0:7480abd3b63b | 1260 | { |
dpslwk | 0:7480abd3b63b | 1261 | tmp |= UART1_RS485CTRL_NMM_EN; |
dpslwk | 0:7480abd3b63b | 1262 | } |
dpslwk | 0:7480abd3b63b | 1263 | |
dpslwk | 0:7480abd3b63b | 1264 | // Auto Address Detect function |
dpslwk | 0:7480abd3b63b | 1265 | if (RS485ConfigStruct->AutoAddrDetect_State == ENABLE) |
dpslwk | 0:7480abd3b63b | 1266 | { |
dpslwk | 0:7480abd3b63b | 1267 | tmp |= UART1_RS485CTRL_AADEN; |
dpslwk | 0:7480abd3b63b | 1268 | // Fill Match Address |
dpslwk | 0:7480abd3b63b | 1269 | UARTx->ADRMATCH = RS485ConfigStruct->MatchAddrValue & UART1_RS485ADRMATCH_BITMASK; |
dpslwk | 0:7480abd3b63b | 1270 | } |
dpslwk | 0:7480abd3b63b | 1271 | |
dpslwk | 0:7480abd3b63b | 1272 | |
dpslwk | 0:7480abd3b63b | 1273 | // Receiver is disable |
dpslwk | 0:7480abd3b63b | 1274 | if (RS485ConfigStruct->Rx_State == DISABLE) |
dpslwk | 0:7480abd3b63b | 1275 | { |
dpslwk | 0:7480abd3b63b | 1276 | tmp |= UART1_RS485CTRL_RX_DIS; |
dpslwk | 0:7480abd3b63b | 1277 | } |
dpslwk | 0:7480abd3b63b | 1278 | |
dpslwk | 0:7480abd3b63b | 1279 | // write back to RS485 control register |
dpslwk | 0:7480abd3b63b | 1280 | UARTx->RS485CTRL = tmp & UART1_RS485CTRL_BITMASK; |
dpslwk | 0:7480abd3b63b | 1281 | |
dpslwk | 0:7480abd3b63b | 1282 | // Enable Parity function and leave parity in stick '0' parity as default |
dpslwk | 0:7480abd3b63b | 1283 | UARTx->LCR |= (UART_LCR_PARITY_F_0 | UART_LCR_PARITY_EN); |
dpslwk | 0:7480abd3b63b | 1284 | } |
dpslwk | 0:7480abd3b63b | 1285 | |
dpslwk | 0:7480abd3b63b | 1286 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1287 | * @brief Enable/Disable receiver in RS485 module in UART1 |
dpslwk | 0:7480abd3b63b | 1288 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1289 | * @param[in] NewState New State of command, should be: |
dpslwk | 0:7480abd3b63b | 1290 | * - ENABLE: Enable this function. |
dpslwk | 0:7480abd3b63b | 1291 | * - DISABLE: Disable this function. |
dpslwk | 0:7480abd3b63b | 1292 | * @return None |
dpslwk | 0:7480abd3b63b | 1293 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1294 | void UART_RS485ReceiverCmd(LPC_UART1_TypeDef *UARTx, FunctionalState NewState) |
dpslwk | 0:7480abd3b63b | 1295 | { |
dpslwk | 0:7480abd3b63b | 1296 | if (NewState == ENABLE){ |
dpslwk | 0:7480abd3b63b | 1297 | UARTx->RS485CTRL &= ~UART1_RS485CTRL_RX_DIS; |
dpslwk | 0:7480abd3b63b | 1298 | } else { |
dpslwk | 0:7480abd3b63b | 1299 | UARTx->RS485CTRL |= UART1_RS485CTRL_RX_DIS; |
dpslwk | 0:7480abd3b63b | 1300 | } |
dpslwk | 0:7480abd3b63b | 1301 | } |
dpslwk | 0:7480abd3b63b | 1302 | |
dpslwk | 0:7480abd3b63b | 1303 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1304 | * @brief Send data on RS485 bus with specified parity stick value (9-bit mode). |
dpslwk | 0:7480abd3b63b | 1305 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1306 | * @param[in] pDatFrm Pointer to data frame. |
dpslwk | 0:7480abd3b63b | 1307 | * @param[in] size Size of data. |
dpslwk | 0:7480abd3b63b | 1308 | * @param[in] ParityStick Parity Stick value, should be 0 or 1. |
dpslwk | 0:7480abd3b63b | 1309 | * @return None |
dpslwk | 0:7480abd3b63b | 1310 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1311 | uint32_t UART_RS485Send(LPC_UART1_TypeDef *UARTx, uint8_t *pDatFrm, \ |
dpslwk | 0:7480abd3b63b | 1312 | uint32_t size, uint8_t ParityStick) |
dpslwk | 0:7480abd3b63b | 1313 | { |
dpslwk | 0:7480abd3b63b | 1314 | uint8_t tmp, save; |
dpslwk | 0:7480abd3b63b | 1315 | uint32_t cnt; |
dpslwk | 0:7480abd3b63b | 1316 | |
dpslwk | 0:7480abd3b63b | 1317 | if (ParityStick){ |
dpslwk | 0:7480abd3b63b | 1318 | save = tmp = UARTx->LCR & UART_LCR_BITMASK; |
dpslwk | 0:7480abd3b63b | 1319 | tmp &= ~(UART_LCR_PARITY_EVEN); |
dpslwk | 0:7480abd3b63b | 1320 | UARTx->LCR = tmp; |
dpslwk | 0:7480abd3b63b | 1321 | cnt = UART_Send((LPC_UART_TypeDef *)UARTx, pDatFrm, size, BLOCKING); |
dpslwk | 0:7480abd3b63b | 1322 | while (!(UARTx->LSR & UART_LSR_TEMT)); |
dpslwk | 0:7480abd3b63b | 1323 | UARTx->LCR = save; |
dpslwk | 0:7480abd3b63b | 1324 | } else { |
dpslwk | 0:7480abd3b63b | 1325 | cnt = UART_Send((LPC_UART_TypeDef *)UARTx, pDatFrm, size, BLOCKING); |
dpslwk | 0:7480abd3b63b | 1326 | while (!(UARTx->LSR & UART_LSR_TEMT)); |
dpslwk | 0:7480abd3b63b | 1327 | } |
dpslwk | 0:7480abd3b63b | 1328 | return cnt; |
dpslwk | 0:7480abd3b63b | 1329 | } |
dpslwk | 0:7480abd3b63b | 1330 | |
dpslwk | 0:7480abd3b63b | 1331 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1332 | * @brief Send Slave address frames on RS485 bus. |
dpslwk | 0:7480abd3b63b | 1333 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1334 | * @param[in] SlvAddr Slave Address. |
dpslwk | 0:7480abd3b63b | 1335 | * @return None |
dpslwk | 0:7480abd3b63b | 1336 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1337 | void UART_RS485SendSlvAddr(LPC_UART1_TypeDef *UARTx, uint8_t SlvAddr) |
dpslwk | 0:7480abd3b63b | 1338 | { |
dpslwk | 0:7480abd3b63b | 1339 | UART_RS485Send(UARTx, &SlvAddr, 1, 1); |
dpslwk | 0:7480abd3b63b | 1340 | } |
dpslwk | 0:7480abd3b63b | 1341 | |
dpslwk | 0:7480abd3b63b | 1342 | /*********************************************************************//** |
dpslwk | 0:7480abd3b63b | 1343 | * @brief Send Data frames on RS485 bus. |
dpslwk | 0:7480abd3b63b | 1344 | * @param[in] UARTx LPC_UART1 (only) |
dpslwk | 0:7480abd3b63b | 1345 | * @param[in] pData Pointer to data to be sent. |
dpslwk | 0:7480abd3b63b | 1346 | * @param[in] size Size of data frame to be sent. |
dpslwk | 0:7480abd3b63b | 1347 | * @return None |
dpslwk | 0:7480abd3b63b | 1348 | **********************************************************************/ |
dpslwk | 0:7480abd3b63b | 1349 | uint32_t UART_RS485SendData(LPC_UART1_TypeDef *UARTx, uint8_t *pData, uint32_t size) |
dpslwk | 0:7480abd3b63b | 1350 | { |
dpslwk | 0:7480abd3b63b | 1351 | return (UART_RS485Send(UARTx, pData, size, 0)); |
dpslwk | 0:7480abd3b63b | 1352 | } |
dpslwk | 0:7480abd3b63b | 1353 | |
dpslwk | 0:7480abd3b63b | 1354 | #endif /* _UART1 */ |
dpslwk | 0:7480abd3b63b | 1355 | |
dpslwk | 0:7480abd3b63b | 1356 | #endif /* _UART */ |
dpslwk | 0:7480abd3b63b | 1357 | |
dpslwk | 0:7480abd3b63b | 1358 | /** |
dpslwk | 0:7480abd3b63b | 1359 | * @} |
dpslwk | 0:7480abd3b63b | 1360 | */ |
dpslwk | 0:7480abd3b63b | 1361 | |
dpslwk | 0:7480abd3b63b | 1362 | /** |
dpslwk | 0:7480abd3b63b | 1363 | * @} |
dpslwk | 0:7480abd3b63b | 1364 | */ |
dpslwk | 0:7480abd3b63b | 1365 | /* --------------------------------- End Of File ------------------------------ */ |
dpslwk | 0:7480abd3b63b | 1366 |