long dao / mbed-src

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Tue Dec 16 08:15:08 2014 +0000
Revision:
440:8a0b45cd594f
Parent:
382:ee426a420dbb
Synchronized with git revision 67fbbf0b635d0c0d93fbe433306c537c2ad206aa

Full URL: https://github.com/mbedmicro/mbed/commit/67fbbf0b635d0c0d93fbe433306c537c2ad206aa/

Targets: nrf51 - updating app_timer.c from Norid'c SDKv7.1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 376:cb4d9db17537 1 /**
mbed_official 376:cb4d9db17537 2 ******************************************************************************
mbed_official 376:cb4d9db17537 3 * @file stm32l0xx_hal_adc_ex.c
mbed_official 376:cb4d9db17537 4 * @author MCD Application Team
mbed_official 376:cb4d9db17537 5 * @version V1.1.0
mbed_official 376:cb4d9db17537 6 * @date 18-June-2014
mbed_official 376:cb4d9db17537 7 * @brief This file provides firmware functions to manage the following
mbed_official 376:cb4d9db17537 8 * functionalities of the Analog to Digital Convertor (ADC)
mbed_official 376:cb4d9db17537 9 * peripheral:
mbed_official 376:cb4d9db17537 10 * + Start calibration.
mbed_official 376:cb4d9db17537 11 * + Read the calibration factor.
mbed_official 376:cb4d9db17537 12 * + Set a calibration factor.
mbed_official 376:cb4d9db17537 13 *
mbed_official 376:cb4d9db17537 14 @verbatim
mbed_official 376:cb4d9db17537 15 ==============================================================================
mbed_official 376:cb4d9db17537 16 ##### ADC specific features #####
mbed_official 376:cb4d9db17537 17 ==============================================================================
mbed_official 376:cb4d9db17537 18 [..]
mbed_official 376:cb4d9db17537 19 (#) Self calibration.
mbed_official 376:cb4d9db17537 20
mbed_official 376:cb4d9db17537 21
mbed_official 376:cb4d9db17537 22 ##### How to use this driver #####
mbed_official 376:cb4d9db17537 23 ==============================================================================
mbed_official 376:cb4d9db17537 24 [..]
mbed_official 376:cb4d9db17537 25
mbed_official 376:cb4d9db17537 26 (#) Call HAL_ADCEx_Calibration_Start() to start calibration
mbed_official 376:cb4d9db17537 27
mbed_official 376:cb4d9db17537 28 (#) Read the calibration factor using HAL_ADCEx_Calibration_GetValue()
mbed_official 376:cb4d9db17537 29
mbed_official 376:cb4d9db17537 30 (#) User can set a his calibration factor using HAL_ADCEx_Calibration_SetValue()
mbed_official 376:cb4d9db17537 31
mbed_official 376:cb4d9db17537 32 @endverbatim
mbed_official 376:cb4d9db17537 33 ******************************************************************************
mbed_official 376:cb4d9db17537 34 * @attention
mbed_official 376:cb4d9db17537 35 *
mbed_official 376:cb4d9db17537 36 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 376:cb4d9db17537 37 *
mbed_official 376:cb4d9db17537 38 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 376:cb4d9db17537 39 * are permitted provided that the following conditions are met:
mbed_official 376:cb4d9db17537 40 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 376:cb4d9db17537 41 * this list of conditions and the following disclaimer.
mbed_official 376:cb4d9db17537 42 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 376:cb4d9db17537 43 * this list of conditions and the following disclaimer in the documentation
mbed_official 376:cb4d9db17537 44 * and/or other materials provided with the distribution.
mbed_official 376:cb4d9db17537 45 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 376:cb4d9db17537 46 * may be used to endorse or promote products derived from this software
mbed_official 376:cb4d9db17537 47 * without specific prior written permission.
mbed_official 376:cb4d9db17537 48 *
mbed_official 376:cb4d9db17537 49 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 376:cb4d9db17537 50 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 376:cb4d9db17537 51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 376:cb4d9db17537 52 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 376:cb4d9db17537 53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 376:cb4d9db17537 54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 376:cb4d9db17537 55 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 376:cb4d9db17537 56 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 376:cb4d9db17537 57 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 376:cb4d9db17537 58 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 376:cb4d9db17537 59 *
mbed_official 376:cb4d9db17537 60 ******************************************************************************
mbed_official 376:cb4d9db17537 61 */
mbed_official 376:cb4d9db17537 62
mbed_official 376:cb4d9db17537 63 /* Includes ------------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 64 #include "stm32l0xx_hal.h"
mbed_official 376:cb4d9db17537 65
mbed_official 376:cb4d9db17537 66 /** @addtogroup STM32L0xx_HAL_Driver
mbed_official 376:cb4d9db17537 67 * @{
mbed_official 376:cb4d9db17537 68 */
mbed_official 376:cb4d9db17537 69
mbed_official 376:cb4d9db17537 70 /** @addtogroup ADCEx
mbed_official 376:cb4d9db17537 71 * @brief ADC driver modules
mbed_official 376:cb4d9db17537 72 * @{
mbed_official 376:cb4d9db17537 73 */
mbed_official 376:cb4d9db17537 74
mbed_official 376:cb4d9db17537 75 #ifdef HAL_ADC_MODULE_ENABLED
mbed_official 376:cb4d9db17537 76
mbed_official 376:cb4d9db17537 77 /* Private typedef -----------------------------------------------------------*/
mbed_official 376:cb4d9db17537 78 /* Private define ------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 79 /* Private macro -------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 80 /* Private variables ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 81 /* Private function prototypes -----------------------------------------------*/
mbed_official 376:cb4d9db17537 82 /* Private functions ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 83
mbed_official 376:cb4d9db17537 84
mbed_official 376:cb4d9db17537 85 /** @defgroup ADCEx_Group ADC Extended features functions
mbed_official 376:cb4d9db17537 86 * @brief ADC Extended features functions
mbed_official 376:cb4d9db17537 87 *
mbed_official 376:cb4d9db17537 88 @verbatim
mbed_official 376:cb4d9db17537 89 ===============================================================================
mbed_official 376:cb4d9db17537 90 ##### ADC Extended features functions #####
mbed_official 376:cb4d9db17537 91 ===============================================================================
mbed_official 376:cb4d9db17537 92 [..]
mbed_official 376:cb4d9db17537 93 This subsection provides functions allowing to:
mbed_official 376:cb4d9db17537 94 (+) Start calibration.
mbed_official 376:cb4d9db17537 95 (+) Get calibration factor.
mbed_official 376:cb4d9db17537 96 (+) Set calibration factor.
mbed_official 376:cb4d9db17537 97
mbed_official 376:cb4d9db17537 98 @endverbatim
mbed_official 376:cb4d9db17537 99 * @{
mbed_official 376:cb4d9db17537 100 */
mbed_official 376:cb4d9db17537 101
mbed_official 376:cb4d9db17537 102
mbed_official 376:cb4d9db17537 103 /**
mbed_official 376:cb4d9db17537 104 * @brief Start an automatic calibration
mbed_official 376:cb4d9db17537 105 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 106 * the configuration information for the specified ADC.
mbed_official 376:cb4d9db17537 107 * @param SingleDiff: Selection of single-ended or differential input
mbed_official 376:cb4d9db17537 108 * This parameter can be only of the following values:
mbed_official 376:cb4d9db17537 109 * @arg ADC_SINGLE_ENDED: Channel in mode input single ended
mbed_official 376:cb4d9db17537 110 * @retval HAL status
mbed_official 376:cb4d9db17537 111 */
mbed_official 376:cb4d9db17537 112 HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t SingleDiff)
mbed_official 376:cb4d9db17537 113 {
mbed_official 376:cb4d9db17537 114 uint32_t tickstart = 0;
mbed_official 376:cb4d9db17537 115
mbed_official 376:cb4d9db17537 116 /* Check the parameters */
mbed_official 376:cb4d9db17537 117 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 376:cb4d9db17537 118 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
mbed_official 376:cb4d9db17537 119
mbed_official 376:cb4d9db17537 120 /* Process locked */
mbed_official 376:cb4d9db17537 121 __HAL_LOCK(hadc);
mbed_official 376:cb4d9db17537 122
mbed_official 376:cb4d9db17537 123 /* Disable the ADC (if not already disabled) */
mbed_official 376:cb4d9db17537 124 if (__HAL_ADC_IS_ENABLED(hadc) != RESET )
mbed_official 376:cb4d9db17537 125 {
mbed_official 376:cb4d9db17537 126 /* Check if conditions to disable the ADC are fulfilled */
mbed_official 376:cb4d9db17537 127 if (__HAL_ADC_DISABLING_CONDITIONS(hadc) != RESET)
mbed_official 376:cb4d9db17537 128 {
mbed_official 376:cb4d9db17537 129 __HAL_ADC_DISABLE(hadc);
mbed_official 376:cb4d9db17537 130 }
mbed_official 376:cb4d9db17537 131 else
mbed_official 376:cb4d9db17537 132 {
mbed_official 376:cb4d9db17537 133 hadc->State= HAL_ADC_STATE_ERROR;
mbed_official 376:cb4d9db17537 134
mbed_official 376:cb4d9db17537 135 /* Process unlocked */
mbed_official 376:cb4d9db17537 136 __HAL_UNLOCK(hadc);
mbed_official 376:cb4d9db17537 137
mbed_official 376:cb4d9db17537 138 return HAL_ERROR;
mbed_official 376:cb4d9db17537 139 }
mbed_official 376:cb4d9db17537 140
mbed_official 376:cb4d9db17537 141 /* Wait for ADC effectively disabled */
mbed_official 376:cb4d9db17537 142 /* Get timeout */
mbed_official 376:cb4d9db17537 143 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 144
mbed_official 376:cb4d9db17537 145 /* Wait for disabling completion */
mbed_official 376:cb4d9db17537 146 while(HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_ADEN))
mbed_official 376:cb4d9db17537 147 {
mbed_official 376:cb4d9db17537 148 /* Check for the Timeout */
mbed_official 376:cb4d9db17537 149 if(ADC_DISABLE_TIMEOUT != HAL_MAX_DELAY)
mbed_official 376:cb4d9db17537 150 {
mbed_official 376:cb4d9db17537 151 if((HAL_GetTick() - tickstart ) > ADC_DISABLE_TIMEOUT)
mbed_official 376:cb4d9db17537 152 {
mbed_official 376:cb4d9db17537 153 hadc->State= HAL_ADC_STATE_TIMEOUT;
mbed_official 376:cb4d9db17537 154
mbed_official 376:cb4d9db17537 155 /* Process unlocked */
mbed_official 376:cb4d9db17537 156 __HAL_UNLOCK(hadc);
mbed_official 376:cb4d9db17537 157
mbed_official 376:cb4d9db17537 158 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 159 }
mbed_official 376:cb4d9db17537 160 }
mbed_official 376:cb4d9db17537 161 }
mbed_official 376:cb4d9db17537 162 }
mbed_official 376:cb4d9db17537 163
mbed_official 376:cb4d9db17537 164 /* Start ADC calibration */
mbed_official 376:cb4d9db17537 165 hadc->Instance->CR |= ADC_CR_ADCAL;
mbed_official 376:cb4d9db17537 166
mbed_official 376:cb4d9db17537 167 /* Get timeout */
mbed_official 376:cb4d9db17537 168 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 169
mbed_official 376:cb4d9db17537 170 /* Wait for calibration completion */
mbed_official 376:cb4d9db17537 171 while(HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_ADCAL))
mbed_official 376:cb4d9db17537 172 {
mbed_official 376:cb4d9db17537 173 /* Check for the Timeout */
mbed_official 376:cb4d9db17537 174 if(ADC_CALIBRATION_TIMEOUT != HAL_MAX_DELAY)
mbed_official 376:cb4d9db17537 175 {
mbed_official 376:cb4d9db17537 176 if((HAL_GetTick() - tickstart ) > ADC_CALIBRATION_TIMEOUT)
mbed_official 376:cb4d9db17537 177 {
mbed_official 376:cb4d9db17537 178 hadc->State= HAL_ADC_STATE_TIMEOUT;
mbed_official 376:cb4d9db17537 179
mbed_official 376:cb4d9db17537 180 /* Process unlocked */
mbed_official 376:cb4d9db17537 181 __HAL_UNLOCK(hadc);
mbed_official 376:cb4d9db17537 182
mbed_official 376:cb4d9db17537 183 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 184 }
mbed_official 376:cb4d9db17537 185 }
mbed_official 376:cb4d9db17537 186 }
mbed_official 376:cb4d9db17537 187
mbed_official 376:cb4d9db17537 188 /* Process unlocked */
mbed_official 376:cb4d9db17537 189 __HAL_UNLOCK(hadc);
mbed_official 376:cb4d9db17537 190
mbed_official 376:cb4d9db17537 191 /* Return function status */
mbed_official 376:cb4d9db17537 192 return HAL_OK;
mbed_official 376:cb4d9db17537 193
mbed_official 376:cb4d9db17537 194 }
mbed_official 376:cb4d9db17537 195
mbed_official 376:cb4d9db17537 196 /**
mbed_official 376:cb4d9db17537 197 * @brief Get the calibration factor.
mbed_official 376:cb4d9db17537 198 * @param hadc: ADC handle.
mbed_official 376:cb4d9db17537 199 * @param SingleDiff: This parameter can be only:
mbed_official 376:cb4d9db17537 200 * @arg ADC_SINGLE_ENDED: Channel in mode input single ended.
mbed_official 376:cb4d9db17537 201 * @retval Calibration value.
mbed_official 376:cb4d9db17537 202 */
mbed_official 376:cb4d9db17537 203 uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef* hadc, uint32_t SingleDiff)
mbed_official 376:cb4d9db17537 204 {
mbed_official 376:cb4d9db17537 205 /* Check the parameters */
mbed_official 376:cb4d9db17537 206 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 376:cb4d9db17537 207 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
mbed_official 376:cb4d9db17537 208
mbed_official 376:cb4d9db17537 209 /* Return the ADC calibration value */
mbed_official 376:cb4d9db17537 210 return ((hadc->Instance->CALFACT) & 0x0000007F);
mbed_official 376:cb4d9db17537 211 }
mbed_official 376:cb4d9db17537 212
mbed_official 376:cb4d9db17537 213 /**
mbed_official 376:cb4d9db17537 214 * @brief Set the calibration factor to overwrite automatic conversion result.
mbed_official 376:cb4d9db17537 215 * ADC must be enabled and no conversion is ongoing.
mbed_official 376:cb4d9db17537 216 * @param hadc: ADC handle
mbed_official 376:cb4d9db17537 217 * @param SingleDiff: This parameter can be only:
mbed_official 376:cb4d9db17537 218 * @arg ADC_SINGLE_ENDED: Channel in mode input single ended.
mbed_official 376:cb4d9db17537 219 * @param CalibrationFactor: Calibration factor (coded on 7 bits maximum)
mbed_official 376:cb4d9db17537 220 * @retval HAL state
mbed_official 376:cb4d9db17537 221 */
mbed_official 376:cb4d9db17537 222 HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef* hadc, uint32_t SingleDiff, uint32_t CalibrationFactor)
mbed_official 376:cb4d9db17537 223 {
mbed_official 376:cb4d9db17537 224 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 376:cb4d9db17537 225
mbed_official 376:cb4d9db17537 226 /* Check the parameters */
mbed_official 376:cb4d9db17537 227 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 376:cb4d9db17537 228 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
mbed_official 376:cb4d9db17537 229 assert_param(IS_ADC_CALFACT(CalibrationFactor));
mbed_official 376:cb4d9db17537 230
mbed_official 376:cb4d9db17537 231 /* Process locked */
mbed_official 376:cb4d9db17537 232 __HAL_LOCK(hadc);
mbed_official 376:cb4d9db17537 233
mbed_official 376:cb4d9db17537 234 /* Verification of hardware constraints before modifying the calibration */
mbed_official 376:cb4d9db17537 235 /* factors register: ADC must be enabled, no conversion on going. */
mbed_official 376:cb4d9db17537 236 if ( (__HAL_ADC_IS_ENABLED(hadc) != RESET) &&
mbed_official 376:cb4d9db17537 237 (__HAL_ADC_IS_CONVERSION_ONGOING(hadc) == RESET) )
mbed_official 376:cb4d9db17537 238 {
mbed_official 376:cb4d9db17537 239 /* Set the selected ADC calibration value */
mbed_official 376:cb4d9db17537 240 hadc->Instance->CALFACT &= ~ADC_CALFACT_CALFACT;
mbed_official 376:cb4d9db17537 241 hadc->Instance->CALFACT |= CalibrationFactor;
mbed_official 376:cb4d9db17537 242 }
mbed_official 376:cb4d9db17537 243 else
mbed_official 376:cb4d9db17537 244 {
mbed_official 376:cb4d9db17537 245 /* Update ADC state machine to error */
mbed_official 376:cb4d9db17537 246 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 376:cb4d9db17537 247
mbed_official 376:cb4d9db17537 248 /* Update ADC state machine to error */
mbed_official 376:cb4d9db17537 249 tmpHALStatus = HAL_ERROR;
mbed_official 376:cb4d9db17537 250 }
mbed_official 376:cb4d9db17537 251
mbed_official 376:cb4d9db17537 252 /* Process unlocked */
mbed_official 376:cb4d9db17537 253 __HAL_UNLOCK(hadc);
mbed_official 376:cb4d9db17537 254
mbed_official 376:cb4d9db17537 255 /* Return function status */
mbed_official 376:cb4d9db17537 256 return tmpHALStatus;
mbed_official 376:cb4d9db17537 257 }
mbed_official 376:cb4d9db17537 258
mbed_official 376:cb4d9db17537 259 /**
mbed_official 376:cb4d9db17537 260 * @}
mbed_official 376:cb4d9db17537 261 */
mbed_official 376:cb4d9db17537 262
mbed_official 376:cb4d9db17537 263
mbed_official 376:cb4d9db17537 264 #endif /* HAL_ADC_MODULE_ENABLED */
mbed_official 376:cb4d9db17537 265 /**
mbed_official 376:cb4d9db17537 266 * @}
mbed_official 376:cb4d9db17537 267 */
mbed_official 376:cb4d9db17537 268
mbed_official 376:cb4d9db17537 269 /**
mbed_official 376:cb4d9db17537 270 * @}
mbed_official 376:cb4d9db17537 271 */
mbed_official 376:cb4d9db17537 272
mbed_official 376:cb4d9db17537 273 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/