added prescaler for 16 bit pwm in LPC1347 target
Fork of mbed-dev by
Diff: targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_leuart.c
- Revision:
- 50:a417edff4437
- Parent:
- 0:9b334a45a8ff
- Child:
- 144:ef7eb2e8f9f7
diff -r 57ac6e3cdfd3 -r a417edff4437 targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_leuart.c --- a/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_leuart.c Wed Jan 13 12:45:11 2016 +0000 +++ b/targets/hal/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_leuart.c Fri Jan 15 07:45:16 2016 +0000 @@ -2,10 +2,10 @@ * @file em_leuart.c * @brief Low Energy Universal Asynchronous Receiver/Transmitter (LEUART) * Peripheral API - * @version 3.20.12 + * @version 4.2.1 ******************************************************************************* * @section License - * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> + * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b> ******************************************************************************* * * Permission is granted to anyone to use this software for any purpose, @@ -31,7 +31,6 @@ * ******************************************************************************/ - #include "em_leuart.h" #if defined(LEUART_COUNT) && (LEUART_COUNT > 0) @@ -64,7 +63,7 @@ #elif (LEUART_COUNT == 2) #define LEUART_REF_VALID(ref) (((ref) == LEUART0) || ((ref) == LEUART1)) #else -#error Undefined number of low energy UARTs (LEUART). +#error "Undefined number of low energy UARTs (LEUART)." #endif /** @endcond */ @@ -174,8 +173,7 @@ * where a is 'refFreq' and b is 'divisor', referring to variable names. */ - divisor = 256 + clkdiv; - + divisor = 256 + clkdiv; quotient = refFreq / divisor; remainder = refFreq % divisor; @@ -470,17 +468,17 @@ LEUART_FreezeEnable(leuart, true); /* Configure databits and stopbits */ - leuart->CTRL = (leuart->CTRL & ~(_LEUART_CTRL_PARITY_MASK | - _LEUART_CTRL_STOPBITS_MASK)) | - (uint32_t)(init->databits) | - (uint32_t)(init->parity) | - (uint32_t)(init->stopbits); + leuart->CTRL = (leuart->CTRL & ~(_LEUART_CTRL_PARITY_MASK + | _LEUART_CTRL_STOPBITS_MASK)) + | (uint32_t)(init->databits) + | (uint32_t)(init->parity) + | (uint32_t)(init->stopbits); /* Configure baudrate */ LEUART_BaudrateSet(leuart, init->refFreq, init->baudrate); /* Finally enable (as specified) */ - leuart->CMD = (uint32_t)(init->enable); + leuart->CMD = (uint32_t)init->enable; /* Unfreeze registers, pass new settings on to LEUART */ LEUART_FreezeEnable(leuart, false); @@ -503,8 +501,8 @@ LEUART_FreezeEnable(leuart, true); /* Make sure disabled first, before resetting other registers */ - leuart->CMD = LEUART_CMD_RXDIS | LEUART_CMD_TXDIS | LEUART_CMD_RXBLOCKDIS | - LEUART_CMD_CLEARTX | LEUART_CMD_CLEARRX; + leuart->CMD = LEUART_CMD_RXDIS | LEUART_CMD_TXDIS | LEUART_CMD_RXBLOCKDIS + | LEUART_CMD_CLEARTX | LEUART_CMD_CLEARRX; leuart->CTRL = _LEUART_CTRL_RESETVALUE; leuart->CLKDIV = _LEUART_CLKDIV_RESETVALUE; leuart->STARTFRAME = _LEUART_STARTFRAME_RESETVALUE; @@ -512,7 +510,12 @@ leuart->IEN = _LEUART_IEN_RESETVALUE; leuart->IFC = _LEUART_IFC_MASK; leuart->PULSECTRL = _LEUART_PULSECTRL_RESETVALUE; +#if defined(_LEUART_ROUTEPEN_MASK) + leuart->ROUTEPEN = _LEUART_ROUTEPEN_RESETVALUE; + leuart->ROUTELOC0 = _LEUART_ROUTELOC0_RESETVALUE; +#else leuart->ROUTE = _LEUART_ROUTE_RESETVALUE; +#endif /* Unfreeze registers, pass new settings on to LEUART */ LEUART_FreezeEnable(leuart, false); @@ -545,7 +548,7 @@ while (!(leuart->STATUS & LEUART_STATUS_RXDATAV)) ; - return (uint8_t)(leuart->RXDATA); + return (uint8_t)leuart->RXDATA; } @@ -571,7 +574,7 @@ while (!(leuart->STATUS & LEUART_STATUS_RXDATAV)) ; - return (uint16_t)(leuart->RXDATAX); + return (uint16_t)leuart->RXDATAX; } @@ -628,7 +631,7 @@ * @param[in] data * Data to transmit with extended control. Least significant bits contains * frame bits, and additional control bits are available as documented in - * the EFM32 reference manual (set to 0 if not used). + * the reference manual (set to 0 if not used). ******************************************************************************/ void LEUART_TxExt(LEUART_TypeDef *leuart, uint16_t data) {