added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
50:a417edff4437
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 2 * @file em_vcmp.c
<> 144:ef7eb2e8f9f7 3 * @brief Voltage Comparator (VCMP) peripheral API
<> 144:ef7eb2e8f9f7 4 * @version 4.2.1
<> 144:ef7eb2e8f9f7 5 *******************************************************************************
<> 144:ef7eb2e8f9f7 6 * @section License
<> 144:ef7eb2e8f9f7 7 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
<> 144:ef7eb2e8f9f7 8 *******************************************************************************
<> 144:ef7eb2e8f9f7 9 *
<> 144:ef7eb2e8f9f7 10 * Permission is granted to anyone to use this software for any purpose,
<> 144:ef7eb2e8f9f7 11 * including commercial applications, and to alter it and redistribute it
<> 144:ef7eb2e8f9f7 12 * freely, subject to the following restrictions:
<> 144:ef7eb2e8f9f7 13 *
<> 144:ef7eb2e8f9f7 14 * 1. The origin of this software must not be misrepresented; you must not
<> 144:ef7eb2e8f9f7 15 * claim that you wrote the original software.
<> 144:ef7eb2e8f9f7 16 * 2. Altered source versions must be plainly marked as such, and must not be
<> 144:ef7eb2e8f9f7 17 * misrepresented as being the original software.
<> 144:ef7eb2e8f9f7 18 * 3. This notice may not be removed or altered from any source distribution.
<> 144:ef7eb2e8f9f7 19 *
<> 144:ef7eb2e8f9f7 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
<> 144:ef7eb2e8f9f7 21 * obligation to support this Software. Silicon Labs is providing the
<> 144:ef7eb2e8f9f7 22 * Software "AS IS", with no express or implied warranties of any kind,
<> 144:ef7eb2e8f9f7 23 * including, but not limited to, any implied warranties of merchantability
<> 144:ef7eb2e8f9f7 24 * or fitness for any particular purpose or warranties against infringement
<> 144:ef7eb2e8f9f7 25 * of any proprietary rights of a third party.
<> 144:ef7eb2e8f9f7 26 *
<> 144:ef7eb2e8f9f7 27 * Silicon Labs will not be liable for any consequential, incidental, or
<> 144:ef7eb2e8f9f7 28 * special damages, or any other relief, or for any claim by any third party,
<> 144:ef7eb2e8f9f7 29 * arising from your use of this Software.
<> 144:ef7eb2e8f9f7 30 *
<> 144:ef7eb2e8f9f7 31 ******************************************************************************/
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 #include "em_vcmp.h"
<> 144:ef7eb2e8f9f7 34 #if defined(VCMP_COUNT) && (VCMP_COUNT > 0)
<> 144:ef7eb2e8f9f7 35
<> 144:ef7eb2e8f9f7 36 #include "em_assert.h"
<> 144:ef7eb2e8f9f7 37
<> 144:ef7eb2e8f9f7 38 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 39 * @addtogroup EM_Library
<> 144:ef7eb2e8f9f7 40 * @{
<> 144:ef7eb2e8f9f7 41 ******************************************************************************/
<> 144:ef7eb2e8f9f7 42
<> 144:ef7eb2e8f9f7 43 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 44 * @addtogroup VCMP
<> 144:ef7eb2e8f9f7 45 * @brief Voltage Comparator (VCMP) Peripheral API
<> 144:ef7eb2e8f9f7 46 * @{
<> 144:ef7eb2e8f9f7 47 ******************************************************************************/
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 50 * @brief
<> 144:ef7eb2e8f9f7 51 * Configure and enable Voltage Comparator
<> 144:ef7eb2e8f9f7 52 *
<> 144:ef7eb2e8f9f7 53 * @param[in] vcmpInit
<> 144:ef7eb2e8f9f7 54 * VCMP Initialization structure
<> 144:ef7eb2e8f9f7 55 ******************************************************************************/
<> 144:ef7eb2e8f9f7 56 void VCMP_Init(const VCMP_Init_TypeDef *vcmpInit)
<> 144:ef7eb2e8f9f7 57 {
<> 144:ef7eb2e8f9f7 58 /* Verify input */
<> 144:ef7eb2e8f9f7 59 EFM_ASSERT((vcmpInit->inactive == 0) || (vcmpInit->inactive == 1));
<> 144:ef7eb2e8f9f7 60 EFM_ASSERT((vcmpInit->biasProg >= 0) && (vcmpInit->biasProg < 16));
<> 144:ef7eb2e8f9f7 61
<> 144:ef7eb2e8f9f7 62 /* Configure Half Bias setting */
<> 144:ef7eb2e8f9f7 63 if (vcmpInit->halfBias)
<> 144:ef7eb2e8f9f7 64 {
<> 144:ef7eb2e8f9f7 65 VCMP->CTRL |= VCMP_CTRL_HALFBIAS;
<> 144:ef7eb2e8f9f7 66 }
<> 144:ef7eb2e8f9f7 67 else
<> 144:ef7eb2e8f9f7 68 {
<> 144:ef7eb2e8f9f7 69 VCMP->CTRL &= ~(VCMP_CTRL_HALFBIAS);
<> 144:ef7eb2e8f9f7 70 }
<> 144:ef7eb2e8f9f7 71
<> 144:ef7eb2e8f9f7 72 /* Configure bias prog */
<> 144:ef7eb2e8f9f7 73 VCMP->CTRL &= ~(_VCMP_CTRL_BIASPROG_MASK);
<> 144:ef7eb2e8f9f7 74 VCMP->CTRL |= (vcmpInit->biasProg << _VCMP_CTRL_BIASPROG_SHIFT);
<> 144:ef7eb2e8f9f7 75
<> 144:ef7eb2e8f9f7 76 /* Configure sense for falling edge */
<> 144:ef7eb2e8f9f7 77 if (vcmpInit->irqFalling)
<> 144:ef7eb2e8f9f7 78 {
<> 144:ef7eb2e8f9f7 79 VCMP->CTRL |= VCMP_CTRL_IFALL;
<> 144:ef7eb2e8f9f7 80 }
<> 144:ef7eb2e8f9f7 81 else
<> 144:ef7eb2e8f9f7 82 {
<> 144:ef7eb2e8f9f7 83 VCMP->CTRL &= ~(VCMP_CTRL_IFALL);
<> 144:ef7eb2e8f9f7 84 }
<> 144:ef7eb2e8f9f7 85
<> 144:ef7eb2e8f9f7 86 /* Configure sense for rising edge */
<> 144:ef7eb2e8f9f7 87 if (vcmpInit->irqRising)
<> 144:ef7eb2e8f9f7 88 {
<> 144:ef7eb2e8f9f7 89 VCMP->CTRL |= VCMP_CTRL_IRISE;
<> 144:ef7eb2e8f9f7 90 }
<> 144:ef7eb2e8f9f7 91 else
<> 144:ef7eb2e8f9f7 92 {
<> 144:ef7eb2e8f9f7 93 VCMP->CTRL &= ~(VCMP_CTRL_IRISE);
<> 144:ef7eb2e8f9f7 94 }
<> 144:ef7eb2e8f9f7 95
<> 144:ef7eb2e8f9f7 96 /* Configure warm-up time */
<> 144:ef7eb2e8f9f7 97 VCMP->CTRL &= ~(_VCMP_CTRL_WARMTIME_MASK);
<> 144:ef7eb2e8f9f7 98 VCMP->CTRL |= (vcmpInit->warmup << _VCMP_CTRL_WARMTIME_SHIFT);
<> 144:ef7eb2e8f9f7 99
<> 144:ef7eb2e8f9f7 100 /* Configure hysteresis */
<> 144:ef7eb2e8f9f7 101 switch (vcmpInit->hyst)
<> 144:ef7eb2e8f9f7 102 {
<> 144:ef7eb2e8f9f7 103 case vcmpHyst20mV:
<> 144:ef7eb2e8f9f7 104 VCMP->CTRL |= VCMP_CTRL_HYSTEN;
<> 144:ef7eb2e8f9f7 105 break;
<> 144:ef7eb2e8f9f7 106 case vcmpHystNone:
<> 144:ef7eb2e8f9f7 107 VCMP->CTRL &= ~(VCMP_CTRL_HYSTEN);
<> 144:ef7eb2e8f9f7 108 break;
<> 144:ef7eb2e8f9f7 109 default:
<> 144:ef7eb2e8f9f7 110 break;
<> 144:ef7eb2e8f9f7 111 }
<> 144:ef7eb2e8f9f7 112
<> 144:ef7eb2e8f9f7 113 /* Configure inactive output value */
<> 144:ef7eb2e8f9f7 114 VCMP->CTRL |= (vcmpInit->inactive << _VCMP_CTRL_INACTVAL_SHIFT);
<> 144:ef7eb2e8f9f7 115
<> 144:ef7eb2e8f9f7 116 /* Configure trigger level */
<> 144:ef7eb2e8f9f7 117 VCMP_TriggerSet(vcmpInit->triggerLevel);
<> 144:ef7eb2e8f9f7 118
<> 144:ef7eb2e8f9f7 119 /* Enable or disable VCMP */
<> 144:ef7eb2e8f9f7 120 if (vcmpInit->enable)
<> 144:ef7eb2e8f9f7 121 {
<> 144:ef7eb2e8f9f7 122 VCMP->CTRL |= VCMP_CTRL_EN;
<> 144:ef7eb2e8f9f7 123 }
<> 144:ef7eb2e8f9f7 124 else
<> 144:ef7eb2e8f9f7 125 {
<> 144:ef7eb2e8f9f7 126 VCMP->CTRL &= ~(VCMP_CTRL_EN);
<> 144:ef7eb2e8f9f7 127 }
<> 144:ef7eb2e8f9f7 128
<> 144:ef7eb2e8f9f7 129 /* If Low Power Reference is enabled, wait until VCMP is ready */
<> 144:ef7eb2e8f9f7 130 /* before enabling it, see reference manual for deatils */
<> 144:ef7eb2e8f9f7 131 /* Configuring Low Power Ref without enable has no effect */
<> 144:ef7eb2e8f9f7 132 if(vcmpInit->lowPowerRef && vcmpInit->enable)
<> 144:ef7eb2e8f9f7 133 {
<> 144:ef7eb2e8f9f7 134 /* Poll for VCMP ready */
<> 144:ef7eb2e8f9f7 135 while(!VCMP_Ready());
<> 144:ef7eb2e8f9f7 136 VCMP_LowPowerRefSet(vcmpInit->lowPowerRef);
<> 144:ef7eb2e8f9f7 137 }
<> 144:ef7eb2e8f9f7 138
<> 144:ef7eb2e8f9f7 139 /* Clear edge interrupt */
<> 144:ef7eb2e8f9f7 140 VCMP_IntClear(VCMP_IF_EDGE);
<> 144:ef7eb2e8f9f7 141 }
<> 144:ef7eb2e8f9f7 142
<> 144:ef7eb2e8f9f7 143
<> 144:ef7eb2e8f9f7 144 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 145 * @brief
<> 144:ef7eb2e8f9f7 146 * Enable or disable Low Power Reference setting
<> 144:ef7eb2e8f9f7 147 *
<> 144:ef7eb2e8f9f7 148 * @param[in] enable
<> 144:ef7eb2e8f9f7 149 * If true, enables low power reference, if false disable low power reference
<> 144:ef7eb2e8f9f7 150 ******************************************************************************/
<> 144:ef7eb2e8f9f7 151 void VCMP_LowPowerRefSet(bool enable)
<> 144:ef7eb2e8f9f7 152 {
<> 144:ef7eb2e8f9f7 153 if (enable)
<> 144:ef7eb2e8f9f7 154 {
<> 144:ef7eb2e8f9f7 155 VCMP->INPUTSEL |= VCMP_INPUTSEL_LPREF;
<> 144:ef7eb2e8f9f7 156 }
<> 144:ef7eb2e8f9f7 157 else
<> 144:ef7eb2e8f9f7 158 {
<> 144:ef7eb2e8f9f7 159 VCMP->INPUTSEL &= ~VCMP_INPUTSEL_LPREF;
<> 144:ef7eb2e8f9f7 160 }
<> 144:ef7eb2e8f9f7 161 }
<> 144:ef7eb2e8f9f7 162
<> 144:ef7eb2e8f9f7 163
<> 144:ef7eb2e8f9f7 164 /***************************************************************************//**
<> 144:ef7eb2e8f9f7 165 * @brief
<> 144:ef7eb2e8f9f7 166 * Configure trigger level of voltage comparator
<> 144:ef7eb2e8f9f7 167 *
<> 144:ef7eb2e8f9f7 168 * @param[in] level
<> 144:ef7eb2e8f9f7 169 * Trigger value, in range 0-63
<> 144:ef7eb2e8f9f7 170 ******************************************************************************/
<> 144:ef7eb2e8f9f7 171 void VCMP_TriggerSet(int level)
<> 144:ef7eb2e8f9f7 172 {
<> 144:ef7eb2e8f9f7 173 /* Trigger range is 6 bits, value from 0-63 */
<> 144:ef7eb2e8f9f7 174 EFM_ASSERT((level > 0) && (level < 64));
<> 144:ef7eb2e8f9f7 175
<> 144:ef7eb2e8f9f7 176 /* Set trigger level */
<> 144:ef7eb2e8f9f7 177 VCMP->INPUTSEL = (VCMP->INPUTSEL & ~(_VCMP_INPUTSEL_TRIGLEVEL_MASK))
<> 144:ef7eb2e8f9f7 178 | (level << _VCMP_INPUTSEL_TRIGLEVEL_SHIFT);
<> 144:ef7eb2e8f9f7 179 }
<> 144:ef7eb2e8f9f7 180
<> 144:ef7eb2e8f9f7 181
<> 144:ef7eb2e8f9f7 182 /** @} (end addtogroup VCMP) */
<> 144:ef7eb2e8f9f7 183 /** @} (end addtogroup EM_Library) */
<> 144:ef7eb2e8f9f7 184 #endif /* defined(VCMP_COUNT) && (VCMP_COUNT > 0) */