Modified version of the mbed library for use with the Nucleo boards.

Dependents:   EEPROMWrite Full-Project

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Mon Sep 28 20:15:09 2015 +0100
Revision:
634:ac7d6880524d
Parent:
632:7687fb9c4f91
Synchronized with git revision 9b7d23d47153c298a6d24de9a415202705889d11

Full URL: https://github.com/mbedmicro/mbed/commit/9b7d23d47153c298a6d24de9a415202705889d11/

Revert "[NUCLEO_F303K8] add support of the STM32F303K8"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 330:c80ac197fa6a 1 /**
mbed_official 330:c80ac197fa6a 2 ******************************************************************************
mbed_official 330:c80ac197fa6a 3 * @file stm32f3xx_hal_sdadc.c
mbed_official 330:c80ac197fa6a 4 * @author MCD Application Team
mbed_official 634:ac7d6880524d 5 * @version V1.1.0
mbed_official 634:ac7d6880524d 6 * @date 12-Sept-2014
mbed_official 330:c80ac197fa6a 7 * @brief This file provides firmware functions to manage the following
mbed_official 330:c80ac197fa6a 8 * functionalities of the Sigma-Delta Analog to Digital Convertor
mbed_official 330:c80ac197fa6a 9 * (SDADC) peripherals:
mbed_official 330:c80ac197fa6a 10 * + Initialization and Configuration
mbed_official 330:c80ac197fa6a 11 * + Regular Channels Configuration
mbed_official 330:c80ac197fa6a 12 * + Injected channels Configuration
mbed_official 330:c80ac197fa6a 13 * + Power saving
mbed_official 330:c80ac197fa6a 14 * + Regular/Injected Channels DMA Configuration
mbed_official 330:c80ac197fa6a 15 * + Interrupts and flags management
mbed_official 330:c80ac197fa6a 16 *
mbed_official 330:c80ac197fa6a 17 @verbatim
mbed_official 330:c80ac197fa6a 18 ==============================================================================
mbed_official 330:c80ac197fa6a 19 ##### SDADC specific features #####
mbed_official 330:c80ac197fa6a 20 ==============================================================================
mbed_official 330:c80ac197fa6a 21 [..]
mbed_official 330:c80ac197fa6a 22 (#) 16-bit sigma delta architecture.
mbed_official 330:c80ac197fa6a 23 (#) Self calibration.
mbed_official 330:c80ac197fa6a 24 (#) Interrupt generation at the end of calibration, regular/injected conversion
mbed_official 330:c80ac197fa6a 25 and in case of overrun events.
mbed_official 330:c80ac197fa6a 26 (#) Single and continuous conversion modes.
mbed_official 330:c80ac197fa6a 27 (#) External trigger option with configurable polarity for injected conversion.
mbed_official 330:c80ac197fa6a 28 (#) Multi mode (synchronized another SDADC with SDADC1).
mbed_official 330:c80ac197fa6a 29 (#) DMA request generation during regular or injected channel conversion.
mbed_official 330:c80ac197fa6a 30
mbed_official 330:c80ac197fa6a 31 ##### How to use this driver #####
mbed_official 330:c80ac197fa6a 32 ==============================================================================
mbed_official 330:c80ac197fa6a 33 [..]
mbed_official 330:c80ac197fa6a 34 *** Initialization ***
mbed_official 330:c80ac197fa6a 35 ======================
mbed_official 330:c80ac197fa6a 36 [..]
mbed_official 330:c80ac197fa6a 37 (#) As prerequisite, fill in the HAL_SDADC_MspInit() :
mbed_official 330:c80ac197fa6a 38 (+) Enable SDADCx clock interface with __SDADCx_CLK_ENABLE().
mbed_official 330:c80ac197fa6a 39 (+) Configure SDADCx clock divider with HAL_RCCEx_PeriphCLKConfig.
mbed_official 330:c80ac197fa6a 40 (+) Enable power on SDADC with HAL_PWREx_EnableSDADCAnalog().
mbed_official 330:c80ac197fa6a 41 (+) Enable the clocks for the SDADC GPIOS with __GPIOx_CLK_ENABLE().
mbed_official 330:c80ac197fa6a 42 (+) Configure these SDADC pins in analog mode using HAL_GPIO_Init().
mbed_official 330:c80ac197fa6a 43 (+) If interrupt mode is used, enable and configure SDADC global
mbed_official 330:c80ac197fa6a 44 interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ().
mbed_official 330:c80ac197fa6a 45 (+) If DMA mode is used, configure DMA with HAL_DMA_Init and link it
mbed_official 330:c80ac197fa6a 46 with SDADC handle using __HAL_LINKDMA.
mbed_official 330:c80ac197fa6a 47 (#) Configure the SDADC low power mode, fast conversion mode, slow clock
mbed_official 330:c80ac197fa6a 48 mode and SDADC1 reference voltage using the HAL_ADC_Init() function.
mbed_official 330:c80ac197fa6a 49 If multiple SDADC are used, please configure first SDADC1 with the
mbed_official 330:c80ac197fa6a 50 common reference voltage.
mbed_official 330:c80ac197fa6a 51 (#) Prepare channel configurations (input mode, common mode, gain and
mbed_official 330:c80ac197fa6a 52 offset) using HAL_SDADC_PrepareChannelConfig and associate channel
mbed_official 330:c80ac197fa6a 53 with one configuration using HAL_SDADC_AssociateChannelConfig.
mbed_official 330:c80ac197fa6a 54
mbed_official 330:c80ac197fa6a 55 *** Calibration ***
mbed_official 330:c80ac197fa6a 56 ============================================
mbed_official 330:c80ac197fa6a 57 [..]
mbed_official 330:c80ac197fa6a 58 (#) Start calibration using HAL_SDADC_StartCalibration or
mbed_official 330:c80ac197fa6a 59 HAL_SDADC_CalibrationStart_IT.
mbed_official 330:c80ac197fa6a 60 (#) In polling mode, use HAL_SDADC_PollForCalibEvent to detect the end of
mbed_official 330:c80ac197fa6a 61 calibration.
mbed_official 330:c80ac197fa6a 62 (#) In interrupt mode, HAL_SDADC_CalibrationCpltCallback will be called at
mbed_official 330:c80ac197fa6a 63 the end of calibration.
mbed_official 330:c80ac197fa6a 64
mbed_official 330:c80ac197fa6a 65 *** Regular channel conversion ***
mbed_official 330:c80ac197fa6a 66 ============================================
mbed_official 330:c80ac197fa6a 67 [..]
mbed_official 330:c80ac197fa6a 68 (#) Select trigger for regular conversion using
mbed_official 330:c80ac197fa6a 69 HAL_SDADC_SelectRegularTrigger.
mbed_official 330:c80ac197fa6a 70 (#) Select regular channel and enable/disable continuous mode using
mbed_official 330:c80ac197fa6a 71 HAL_SDADC_ConfigChannel.
mbed_official 330:c80ac197fa6a 72 (#) Start regular conversion using HAL_SDADC_Start, HAL_SDADC_Start_IT
mbed_official 330:c80ac197fa6a 73 or HAL_SDADC_Start_DMA.
mbed_official 330:c80ac197fa6a 74 (#) In polling mode, use HAL_SDADC_PollForConversion to detect the end of
mbed_official 330:c80ac197fa6a 75 regular conversion.
mbed_official 330:c80ac197fa6a 76 (#) In interrupt mode, HAL_SDADC_ConvCpltCallback will be called at the
mbed_official 330:c80ac197fa6a 77 end of regular conversion.
mbed_official 330:c80ac197fa6a 78 (#) Get value of regular conversion using HAL_SDADC_GetValue.
mbed_official 330:c80ac197fa6a 79 (#) In DMA mode, HAL_SDADC_ConvHalfCpltCallback and
mbed_official 330:c80ac197fa6a 80 HAL_SDADC_ConvCpltCallback will be called respectively at the half
mbed_official 330:c80ac197fa6a 81 tranfer and at the tranfer complete.
mbed_official 330:c80ac197fa6a 82 (#) Stop regular conversion using HAL_SDADC_Stop, HAL_SDADC_Stop_IT
mbed_official 330:c80ac197fa6a 83 or HAL_SDADC_Stop_DMA.
mbed_official 330:c80ac197fa6a 84
mbed_official 330:c80ac197fa6a 85 *** Injected channels conversion ***
mbed_official 330:c80ac197fa6a 86 ============================================
mbed_official 330:c80ac197fa6a 87 [..]
mbed_official 330:c80ac197fa6a 88 (#) Enable/disable delay on injected conversion using
mbed_official 330:c80ac197fa6a 89 HAL_SDADC_SelectInjectedDelay.
mbed_official 330:c80ac197fa6a 90 (#) If external trigger is used for injected conversion, configure this
mbed_official 330:c80ac197fa6a 91 trigger using HAL_SDADC_SelectInjectedExtTrigger.
mbed_official 330:c80ac197fa6a 92 (#) Select trigger for injected conversion using
mbed_official 330:c80ac197fa6a 93 HAL_SDADC_SelectInjectedTrigger.
mbed_official 330:c80ac197fa6a 94 (#) Select injected channels and enable/disable continuous mode using
mbed_official 330:c80ac197fa6a 95 HAL_SDADC_InjectedConfigChannel.
mbed_official 330:c80ac197fa6a 96 (#) Start injected conversion using HAL_SDADC_InjectedStart,
mbed_official 330:c80ac197fa6a 97 HAL_SDADC_InjectedStart_IT or HAL_SDADC_InjectedStart_DMA.
mbed_official 330:c80ac197fa6a 98 (#) In polling mode, use HAL_SDADC_PollForInjectedConversion to detect the
mbed_official 330:c80ac197fa6a 99 end of injected conversion.
mbed_official 330:c80ac197fa6a 100 (#) In interrupt mode, HAL_SDADC_InjectedConvCpltCallback will be called
mbed_official 330:c80ac197fa6a 101 at the end of injected conversion.
mbed_official 330:c80ac197fa6a 102 (#) Get value of injected conversion and corresponding channel using
mbed_official 330:c80ac197fa6a 103 HAL_SDADC_InjectedGetValue.
mbed_official 330:c80ac197fa6a 104 (#) In DMA mode, HAL_SDADC_InjectedConvHalfCpltCallback and
mbed_official 330:c80ac197fa6a 105 HAL_SDADC_InjectedConvCpltCallback will be called respectively at the
mbed_official 330:c80ac197fa6a 106 half tranfer and at the tranfer complete.
mbed_official 330:c80ac197fa6a 107 (#) Stop injected conversion using HAL_SDADC_InjectedStop,
mbed_official 330:c80ac197fa6a 108 HAL_SDADC_InjectedStop_IT or HAL_SDADC_InjectedStop_DMA.
mbed_official 330:c80ac197fa6a 109
mbed_official 330:c80ac197fa6a 110 *** Multi mode regular channels conversions ***
mbed_official 330:c80ac197fa6a 111 ======================================================
mbed_official 330:c80ac197fa6a 112 [..]
mbed_official 330:c80ac197fa6a 113 (#) Select type of multimode (SDADC1/SDADC2 or SDADC1/SDADC3) using
mbed_official 330:c80ac197fa6a 114 HAL_SDADC_MultiModeConfigChannel.
mbed_official 330:c80ac197fa6a 115 (#) Select software trigger for SDADC1 and synchronized trigger for
mbed_official 330:c80ac197fa6a 116 SDADC2 (or SDADC3) using HAL_SDADC_SelectRegularTrigger.
mbed_official 330:c80ac197fa6a 117 (#) Select regular channel for SDADC1 and SDADC2 (or SDADC3) using
mbed_official 330:c80ac197fa6a 118 HAL_SDADC_ConfigChannel.
mbed_official 330:c80ac197fa6a 119 (#) Start regular conversion for SDADC2 (or SDADC3) with HAL_SDADC_Start.
mbed_official 330:c80ac197fa6a 120 (#) Start regular conversion for SDADC1 using HAL_SDADC_Start,
mbed_official 330:c80ac197fa6a 121 HAL_SDADC_Start_IT or HAL_SDADC_MultiModeStart_DMA.
mbed_official 330:c80ac197fa6a 122 (#) In polling mode, use HAL_SDADC_PollForConversion to detect the end of
mbed_official 330:c80ac197fa6a 123 regular conversion for SDADC1.
mbed_official 330:c80ac197fa6a 124 (#) In interrupt mode, HAL_SDADC_ConvCpltCallback will be called at the
mbed_official 330:c80ac197fa6a 125 end of regular conversion for SDADC1.
mbed_official 330:c80ac197fa6a 126 (#) Get value of regular conversions using HAL_SDADC_MultiModeGetValue.
mbed_official 330:c80ac197fa6a 127 (#) In DMA mode, HAL_SDADC_ConvHalfCpltCallback and
mbed_official 330:c80ac197fa6a 128 HAL_SDADC_ConvCpltCallback will be called respectively at the half
mbed_official 330:c80ac197fa6a 129 tranfer and at the tranfer complete for SDADC1.
mbed_official 330:c80ac197fa6a 130 (#) Stop regular conversion using HAL_SDADC_Stop, HAL_SDADC_Stop_IT
mbed_official 330:c80ac197fa6a 131 or HAL_SDADC_MultiModeStop_DMA for SDADC1.
mbed_official 330:c80ac197fa6a 132 (#) Stop regular conversion using HAL_SDADC_Stop for SDADC2 (or SDADC3).
mbed_official 330:c80ac197fa6a 133
mbed_official 330:c80ac197fa6a 134 *** Multi mode injected channels conversions ***
mbed_official 330:c80ac197fa6a 135 ======================================================
mbed_official 330:c80ac197fa6a 136 [..]
mbed_official 330:c80ac197fa6a 137 (#) Select type of multimode (SDADC1/SDADC2 or SDADC1/SDADC3) using
mbed_official 330:c80ac197fa6a 138 HAL_SDADC_InjectedMultiModeConfigChannel.
mbed_official 330:c80ac197fa6a 139 (#) Select software or external trigger for SDADC1 and synchronized
mbed_official 330:c80ac197fa6a 140 trigger for SDADC2 (or SDADC3) using HAL_SDADC_SelectInjectedTrigger.
mbed_official 330:c80ac197fa6a 141 (#) Select injected channels for SDADC1 and SDADC2 (or SDADC3) using
mbed_official 330:c80ac197fa6a 142 HAL_SDADC_InjectedConfigChannel.
mbed_official 330:c80ac197fa6a 143 (#) Start injected conversion for SDADC2 (or SDADC3) with
mbed_official 330:c80ac197fa6a 144 HAL_SDADC_InjectedStart.
mbed_official 330:c80ac197fa6a 145 (#) Start injected conversion for SDADC1 using HAL_SDADC_InjectedStart,
mbed_official 330:c80ac197fa6a 146 HAL_SDADC_InjectedStart_IT or HAL_SDADC_InjectedMultiModeStart_DMA.
mbed_official 330:c80ac197fa6a 147 (#) In polling mode, use HAL_SDADC_InjectedPollForConversion to detect
mbed_official 330:c80ac197fa6a 148 the end of injected conversion for SDADC1.
mbed_official 330:c80ac197fa6a 149 (#) In interrupt mode, HAL_SDADC_InjectedConvCpltCallback will be called
mbed_official 330:c80ac197fa6a 150 at the end of injected conversion for SDADC1.
mbed_official 330:c80ac197fa6a 151 (#) Get value of injected conversions using
mbed_official 330:c80ac197fa6a 152 HAL_SDADC_InjectedMultiModeGetValue.
mbed_official 330:c80ac197fa6a 153 (#) In DMA mode, HAL_SDADC_InjectedConvHalfCpltCallback and
mbed_official 330:c80ac197fa6a 154 HAL_SDADC_InjectedConvCpltCallback will be called respectively at the
mbed_official 330:c80ac197fa6a 155 half tranfer and at the tranfer complete for SDADC1.
mbed_official 330:c80ac197fa6a 156 (#) Stop injected conversion using HAL_SDADC_InjectedStop,
mbed_official 330:c80ac197fa6a 157 HAL_SDADC_InjectedStop_IT or HAL_SDADC_InjecteddMultiModeStop_DMA
mbed_official 330:c80ac197fa6a 158 for SDADC1.
mbed_official 330:c80ac197fa6a 159 (#) Stop injected conversion using HAL_SDADC_InjectedStop for SDADC2
mbed_official 330:c80ac197fa6a 160 (or SDADC3).
mbed_official 330:c80ac197fa6a 161
mbed_official 330:c80ac197fa6a 162 @endverbatim
mbed_official 330:c80ac197fa6a 163 ******************************************************************************
mbed_official 330:c80ac197fa6a 164 * @attention
mbed_official 330:c80ac197fa6a 165 *
mbed_official 634:ac7d6880524d 166 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 330:c80ac197fa6a 167 *
mbed_official 330:c80ac197fa6a 168 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 330:c80ac197fa6a 169 * are permitted provided that the following conditions are met:
mbed_official 330:c80ac197fa6a 170 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 330:c80ac197fa6a 171 * this list of conditions and the following disclaimer.
mbed_official 330:c80ac197fa6a 172 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 330:c80ac197fa6a 173 * this list of conditions and the following disclaimer in the documentation
mbed_official 330:c80ac197fa6a 174 * and/or other materials provided with the distribution.
mbed_official 330:c80ac197fa6a 175 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 330:c80ac197fa6a 176 * may be used to endorse or promote products derived from this software
mbed_official 330:c80ac197fa6a 177 * without specific prior written permission.
mbed_official 330:c80ac197fa6a 178 *
mbed_official 330:c80ac197fa6a 179 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 330:c80ac197fa6a 180 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 330:c80ac197fa6a 181 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 330:c80ac197fa6a 182 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 330:c80ac197fa6a 183 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 330:c80ac197fa6a 184 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 330:c80ac197fa6a 185 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 330:c80ac197fa6a 186 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 330:c80ac197fa6a 187 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 330:c80ac197fa6a 188 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 330:c80ac197fa6a 189 *
mbed_official 330:c80ac197fa6a 190 ******************************************************************************
mbed_official 330:c80ac197fa6a 191 */
mbed_official 330:c80ac197fa6a 192
mbed_official 330:c80ac197fa6a 193 /* Includes ------------------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 194 #include "stm32f3xx_hal.h"
mbed_official 330:c80ac197fa6a 195
mbed_official 330:c80ac197fa6a 196 /** @addtogroup STM32F3xx_HAL_Driver
mbed_official 330:c80ac197fa6a 197 * @{
mbed_official 330:c80ac197fa6a 198 */
mbed_official 330:c80ac197fa6a 199
mbed_official 330:c80ac197fa6a 200 #ifdef HAL_SDADC_MODULE_ENABLED
mbed_official 330:c80ac197fa6a 201 #if defined(STM32F373xC) || defined(STM32F378xx)
mbed_official 330:c80ac197fa6a 202 /** @defgroup SDADC SDADC HAL module driver
mbed_official 330:c80ac197fa6a 203 * @brief SDADC HAL driver modules
mbed_official 330:c80ac197fa6a 204 * @{
mbed_official 330:c80ac197fa6a 205 */
mbed_official 330:c80ac197fa6a 206
mbed_official 330:c80ac197fa6a 207 /* Private typedef -----------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 208 /* Private define ------------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 209 /** @defgroup SDADC_Private_Define SDADC Private Define
mbed_official 330:c80ac197fa6a 210 * @{
mbed_official 330:c80ac197fa6a 211 */
mbed_official 330:c80ac197fa6a 212 #define SDADC_TIMEOUT 200
mbed_official 330:c80ac197fa6a 213 #define SDADC_CONFREG_OFFSET 0x00000020
mbed_official 330:c80ac197fa6a 214 #define SDADC_JDATAR_CH_OFFSET 24
mbed_official 330:c80ac197fa6a 215 #define SDADC_MSB_MASK 0xFFFF0000
mbed_official 330:c80ac197fa6a 216 #define SDADC_LSB_MASK 0x0000FFFF
mbed_official 330:c80ac197fa6a 217 /**
mbed_official 330:c80ac197fa6a 218 * @}
mbed_official 330:c80ac197fa6a 219 */
mbed_official 330:c80ac197fa6a 220
mbed_official 330:c80ac197fa6a 221 /* Private macro -------------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 222 /* Private variables ---------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 223 /* Private function prototypes -----------------------------------------------*/
mbed_official 330:c80ac197fa6a 224 /** @defgroup SDADC_Private_Functions SDADC Private Functions
mbed_official 330:c80ac197fa6a 225 * @{
mbed_official 330:c80ac197fa6a 226 */
mbed_official 330:c80ac197fa6a 227
mbed_official 330:c80ac197fa6a 228 static HAL_StatusTypeDef SDADC_EnterInitMode(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 229 static void SDADC_ExitInitMode(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 230 static uint32_t SDADC_GetInjChannelsNbr(uint32_t Channels);
mbed_official 330:c80ac197fa6a 231 static HAL_StatusTypeDef SDADC_RegConvStart(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 232 static HAL_StatusTypeDef SDADC_RegConvStop(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 233 static HAL_StatusTypeDef SDADC_InjConvStart(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 234 static HAL_StatusTypeDef SDADC_InjConvStop(SDADC_HandleTypeDef* hsdadc);
mbed_official 330:c80ac197fa6a 235 static void SDADC_DMARegularHalfConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 330:c80ac197fa6a 236 static void SDADC_DMARegularConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 330:c80ac197fa6a 237 static void SDADC_DMAInjectedHalfConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 330:c80ac197fa6a 238 static void SDADC_DMAInjectedConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 330:c80ac197fa6a 239 static void SDADC_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 330:c80ac197fa6a 240 /**
mbed_official 330:c80ac197fa6a 241 * @}
mbed_official 330:c80ac197fa6a 242 */
mbed_official 330:c80ac197fa6a 243
mbed_official 330:c80ac197fa6a 244 /* Exported functions ---------------------------------------------------------*/
mbed_official 330:c80ac197fa6a 245
mbed_official 330:c80ac197fa6a 246 /** @defgroup SDADC_Exported_Functions SDADC Exported Functions
mbed_official 330:c80ac197fa6a 247 * @{
mbed_official 330:c80ac197fa6a 248 */
mbed_official 330:c80ac197fa6a 249
mbed_official 330:c80ac197fa6a 250 /** @defgroup SDADC_Exported_Functions_Group1 Initialization and de-initialization functions
mbed_official 330:c80ac197fa6a 251 * @brief Initialization and de-initialization functions
mbed_official 330:c80ac197fa6a 252 *
mbed_official 330:c80ac197fa6a 253 @verbatim
mbed_official 330:c80ac197fa6a 254 ===============================================================================
mbed_official 330:c80ac197fa6a 255 ##### Initialization and de-initialization functions #####
mbed_official 330:c80ac197fa6a 256 ===============================================================================
mbed_official 330:c80ac197fa6a 257 [..] This section provides functions allowing to:
mbed_official 330:c80ac197fa6a 258 (+) Initialize the SDADC.
mbed_official 330:c80ac197fa6a 259 (+) De-initialize the SDADC.
mbed_official 330:c80ac197fa6a 260
mbed_official 330:c80ac197fa6a 261 @endverbatim
mbed_official 330:c80ac197fa6a 262 * @{
mbed_official 330:c80ac197fa6a 263 */
mbed_official 330:c80ac197fa6a 264
mbed_official 330:c80ac197fa6a 265 /**
mbed_official 330:c80ac197fa6a 266 * @brief Initializes the SDADC according to the specified
mbed_official 330:c80ac197fa6a 267 * parameters in the SDADC_InitTypeDef structure.
mbed_official 330:c80ac197fa6a 268 * @note If multiple SDADC are used, please configure first SDADC1 to set
mbed_official 330:c80ac197fa6a 269 * the common reference voltage.
mbed_official 330:c80ac197fa6a 270 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 271 * @retval HAL status.
mbed_official 330:c80ac197fa6a 272 */
mbed_official 330:c80ac197fa6a 273 HAL_StatusTypeDef HAL_SDADC_Init(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 274 {
mbed_official 330:c80ac197fa6a 275 /* Check parameters */
mbed_official 330:c80ac197fa6a 276 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 277 assert_param(IS_SDADC_LOWPOWER_MODE(hsdadc->Init.IdleLowPowerMode));
mbed_official 330:c80ac197fa6a 278 assert_param(IS_SDADC_FAST_CONV_MODE(hsdadc->Init.FastConversionMode));
mbed_official 330:c80ac197fa6a 279 assert_param(IS_SDADC_SLOW_CLOCK_MODE(hsdadc->Init.SlowClockMode));
mbed_official 330:c80ac197fa6a 280 assert_param(IS_SDADC_VREF(hsdadc->Init.ReferenceVoltage));
mbed_official 330:c80ac197fa6a 281
mbed_official 330:c80ac197fa6a 282 /* Check SDADC handle */
mbed_official 634:ac7d6880524d 283 if(hsdadc == HAL_NULL)
mbed_official 330:c80ac197fa6a 284 {
mbed_official 330:c80ac197fa6a 285 return HAL_ERROR;
mbed_official 330:c80ac197fa6a 286 }
mbed_official 330:c80ac197fa6a 287
mbed_official 330:c80ac197fa6a 288 /* Initialize SDADC variables with default values */
mbed_official 330:c80ac197fa6a 289 hsdadc->RegularContMode = SDADC_CONTINUOUS_CONV_OFF;
mbed_official 330:c80ac197fa6a 290 hsdadc->InjectedContMode = SDADC_CONTINUOUS_CONV_OFF;
mbed_official 330:c80ac197fa6a 291 hsdadc->InjectedChannelsNbr = 1;
mbed_official 330:c80ac197fa6a 292 hsdadc->InjConvRemaining = 1;
mbed_official 330:c80ac197fa6a 293 hsdadc->RegularTrigger = SDADC_SOFTWARE_TRIGGER;
mbed_official 330:c80ac197fa6a 294 hsdadc->InjectedTrigger = SDADC_SOFTWARE_TRIGGER;
mbed_official 330:c80ac197fa6a 295 hsdadc->ExtTriggerEdge = SDADC_EXT_TRIG_RISING_EDGE;
mbed_official 330:c80ac197fa6a 296 hsdadc->RegularMultimode = SDADC_MULTIMODE_SDADC1_SDADC2;
mbed_official 330:c80ac197fa6a 297 hsdadc->InjectedMultimode = SDADC_MULTIMODE_SDADC1_SDADC2;
mbed_official 330:c80ac197fa6a 298 hsdadc->ErrorCode = SDADC_ERROR_NONE;
mbed_official 330:c80ac197fa6a 299
mbed_official 330:c80ac197fa6a 300 /* Call MSP init function */
mbed_official 330:c80ac197fa6a 301 HAL_SDADC_MspInit(hsdadc);
mbed_official 330:c80ac197fa6a 302
mbed_official 330:c80ac197fa6a 303 /* Set idle low power and slow clock modes */
mbed_official 330:c80ac197fa6a 304 hsdadc->Instance->CR1 &= ~(SDADC_CR1_SBI|SDADC_CR1_PDI|SDADC_CR1_SLOWCK);
mbed_official 330:c80ac197fa6a 305 hsdadc->Instance->CR1 |= (hsdadc->Init.IdleLowPowerMode | \
mbed_official 330:c80ac197fa6a 306 hsdadc->Init.SlowClockMode);
mbed_official 330:c80ac197fa6a 307
mbed_official 330:c80ac197fa6a 308 /* Set fast conversion mode */
mbed_official 330:c80ac197fa6a 309 hsdadc->Instance->CR2 &= ~(SDADC_CR2_FAST);
mbed_official 330:c80ac197fa6a 310 hsdadc->Instance->CR2 |= hsdadc->Init.FastConversionMode;
mbed_official 330:c80ac197fa6a 311
mbed_official 330:c80ac197fa6a 312 /* Set reference voltage only for SDADC1 */
mbed_official 330:c80ac197fa6a 313 if(hsdadc->Instance == SDADC1)
mbed_official 330:c80ac197fa6a 314 {
mbed_official 330:c80ac197fa6a 315 hsdadc->Instance->CR1 &= ~(SDADC_CR1_REFV);
mbed_official 330:c80ac197fa6a 316 hsdadc->Instance->CR1 |= hsdadc->Init.ReferenceVoltage;
mbed_official 330:c80ac197fa6a 317
mbed_official 330:c80ac197fa6a 318 /* Wait at least 2ms before setting ADON */
mbed_official 330:c80ac197fa6a 319 HAL_Delay(2);
mbed_official 330:c80ac197fa6a 320 }
mbed_official 330:c80ac197fa6a 321
mbed_official 330:c80ac197fa6a 322 /* Enable SDADC */
mbed_official 330:c80ac197fa6a 323 hsdadc->Instance->CR2 |= SDADC_CR2_ADON;
mbed_official 330:c80ac197fa6a 324
mbed_official 330:c80ac197fa6a 325 /* Wait end of stabilization */
mbed_official 330:c80ac197fa6a 326 while((hsdadc->Instance->ISR & SDADC_ISR_STABIP) != 0);
mbed_official 330:c80ac197fa6a 327
mbed_official 330:c80ac197fa6a 328 /* Set SDADC to ready state */
mbed_official 330:c80ac197fa6a 329 hsdadc->State = HAL_SDADC_STATE_READY;
mbed_official 330:c80ac197fa6a 330
mbed_official 330:c80ac197fa6a 331 /* Return HAL status */
mbed_official 330:c80ac197fa6a 332 return HAL_OK;
mbed_official 330:c80ac197fa6a 333 }
mbed_official 330:c80ac197fa6a 334
mbed_official 330:c80ac197fa6a 335 /**
mbed_official 330:c80ac197fa6a 336 * @brief De-initializes the SDADC.
mbed_official 330:c80ac197fa6a 337 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 338 * @retval HAL status.
mbed_official 330:c80ac197fa6a 339 */
mbed_official 330:c80ac197fa6a 340 HAL_StatusTypeDef HAL_SDADC_DeInit(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 341 {
mbed_official 330:c80ac197fa6a 342 /* Check parameters */
mbed_official 330:c80ac197fa6a 343 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 344
mbed_official 330:c80ac197fa6a 345 /* Check SDADC handle */
mbed_official 634:ac7d6880524d 346 if(hsdadc == HAL_NULL)
mbed_official 330:c80ac197fa6a 347 {
mbed_official 330:c80ac197fa6a 348 return HAL_ERROR;
mbed_official 330:c80ac197fa6a 349 }
mbed_official 330:c80ac197fa6a 350
mbed_official 330:c80ac197fa6a 351 /* Disable the SDADC */
mbed_official 330:c80ac197fa6a 352 hsdadc->Instance->CR2 &= ~(SDADC_CR2_ADON);
mbed_official 330:c80ac197fa6a 353
mbed_official 330:c80ac197fa6a 354 /* Reset all registers */
mbed_official 330:c80ac197fa6a 355 hsdadc->Instance->CR1 = 0x00000000;
mbed_official 330:c80ac197fa6a 356 hsdadc->Instance->CR2 = 0x00000000;
mbed_official 330:c80ac197fa6a 357 hsdadc->Instance->JCHGR = 0x00000001;
mbed_official 330:c80ac197fa6a 358 hsdadc->Instance->CONF0R = 0x00000000;
mbed_official 330:c80ac197fa6a 359 hsdadc->Instance->CONF1R = 0x00000000;
mbed_official 330:c80ac197fa6a 360 hsdadc->Instance->CONF2R = 0x00000000;
mbed_official 330:c80ac197fa6a 361 hsdadc->Instance->CONFCHR1 = 0x00000000;
mbed_official 330:c80ac197fa6a 362 hsdadc->Instance->CONFCHR2 = 0x00000000;
mbed_official 330:c80ac197fa6a 363
mbed_official 330:c80ac197fa6a 364 /* Call MSP deinit function */
mbed_official 330:c80ac197fa6a 365 HAL_SDADC_MspDeInit(hsdadc);
mbed_official 330:c80ac197fa6a 366
mbed_official 330:c80ac197fa6a 367 /* Set SDADC in reset state */
mbed_official 330:c80ac197fa6a 368 hsdadc->State = HAL_SDADC_STATE_RESET;
mbed_official 330:c80ac197fa6a 369
mbed_official 330:c80ac197fa6a 370 /* Return function status */
mbed_official 330:c80ac197fa6a 371 return HAL_OK;
mbed_official 330:c80ac197fa6a 372 }
mbed_official 330:c80ac197fa6a 373
mbed_official 330:c80ac197fa6a 374 /**
mbed_official 330:c80ac197fa6a 375 * @brief Initializes the SDADC MSP.
mbed_official 330:c80ac197fa6a 376 * @param hsdadc : SDADC handle
mbed_official 330:c80ac197fa6a 377 * @retval None
mbed_official 330:c80ac197fa6a 378 */
mbed_official 330:c80ac197fa6a 379 __weak void HAL_SDADC_MspInit(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 380 {
mbed_official 330:c80ac197fa6a 381 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 382 the HAL_SDADC_MspInit could be implemented in the user file.
mbed_official 330:c80ac197fa6a 383 */
mbed_official 330:c80ac197fa6a 384 }
mbed_official 330:c80ac197fa6a 385
mbed_official 330:c80ac197fa6a 386 /**
mbed_official 330:c80ac197fa6a 387 * @brief De-initializes the SDADC MSP.
mbed_official 330:c80ac197fa6a 388 * @param hsdadc : SDADC handle
mbed_official 330:c80ac197fa6a 389 * @retval None
mbed_official 330:c80ac197fa6a 390 */
mbed_official 330:c80ac197fa6a 391 __weak void HAL_SDADC_MspDeInit(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 392 {
mbed_official 330:c80ac197fa6a 393 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 394 the HAL_SDADC_MspDeInit could be implemented in the user file.
mbed_official 330:c80ac197fa6a 395 */
mbed_official 330:c80ac197fa6a 396 }
mbed_official 330:c80ac197fa6a 397
mbed_official 330:c80ac197fa6a 398 /**
mbed_official 330:c80ac197fa6a 399 * @}
mbed_official 330:c80ac197fa6a 400 */
mbed_official 330:c80ac197fa6a 401
mbed_official 330:c80ac197fa6a 402 /** @defgroup SDADC_Exported_Functions_Group2 peripheral control functions
mbed_official 330:c80ac197fa6a 403 * @brief Peripheral control functions
mbed_official 330:c80ac197fa6a 404 *
mbed_official 330:c80ac197fa6a 405 @verbatim
mbed_official 330:c80ac197fa6a 406 ===============================================================================
mbed_official 330:c80ac197fa6a 407 ##### Peripheral control functions #####
mbed_official 330:c80ac197fa6a 408 ===============================================================================
mbed_official 330:c80ac197fa6a 409 [..] This section provides functions allowing to:
mbed_official 330:c80ac197fa6a 410 (+) Program on of the three different configurations for channels.
mbed_official 330:c80ac197fa6a 411 (+) Associate channel to one of configurations.
mbed_official 330:c80ac197fa6a 412 (+) Select regular and injected channels.
mbed_official 330:c80ac197fa6a 413 (+) Enable/disable continuous mode for regular and injected conversions.
mbed_official 330:c80ac197fa6a 414 (+) Select regular and injected triggers.
mbed_official 330:c80ac197fa6a 415 (+) Select and configure injected external trigger.
mbed_official 330:c80ac197fa6a 416 (+) Enable/disable delay addition for injected conversions.
mbed_official 330:c80ac197fa6a 417 (+) Configure multimode.
mbed_official 330:c80ac197fa6a 418
mbed_official 330:c80ac197fa6a 419 @endverbatim
mbed_official 330:c80ac197fa6a 420 * @{
mbed_official 330:c80ac197fa6a 421 */
mbed_official 330:c80ac197fa6a 422
mbed_official 330:c80ac197fa6a 423 /**
mbed_official 330:c80ac197fa6a 424 * @brief This function allows the user to set parameters for a configuration.
mbed_official 330:c80ac197fa6a 425 * Parameters are input mode, common mode, gain and offset.
mbed_official 330:c80ac197fa6a 426 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 427 * (neither calibration nor regular or injected conversion ongoing)
mbed_official 330:c80ac197fa6a 428 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 429 * @param ConfIndex : Index of configuration to modify.
mbed_official 330:c80ac197fa6a 430 * This parameter can be a value of @ref SDADC_ConfIndex.
mbed_official 330:c80ac197fa6a 431 * @param ConfParamStruct : Parameters to apply for this configuration.
mbed_official 330:c80ac197fa6a 432 * @retval HAL status
mbed_official 330:c80ac197fa6a 433 */
mbed_official 330:c80ac197fa6a 434 HAL_StatusTypeDef HAL_SDADC_PrepareChannelConfig(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 435 uint32_t ConfIndex,
mbed_official 330:c80ac197fa6a 436 SDADC_ConfParamTypeDef* ConfParamStruct)
mbed_official 330:c80ac197fa6a 437 {
mbed_official 330:c80ac197fa6a 438 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 439 uint32_t tmp = 0;
mbed_official 330:c80ac197fa6a 440
mbed_official 330:c80ac197fa6a 441 /* Check parameters */
mbed_official 330:c80ac197fa6a 442 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 443 assert_param(IS_SDADC_CONF_INDEX(ConfIndex));
mbed_official 634:ac7d6880524d 444 assert_param(ConfParamStruct != HAL_NULL);
mbed_official 330:c80ac197fa6a 445 assert_param(IS_SDADC_INPUT_MODE(ConfParamStruct->InputMode));
mbed_official 330:c80ac197fa6a 446 assert_param(IS_SDADC_GAIN(ConfParamStruct->Gain));
mbed_official 330:c80ac197fa6a 447 assert_param(IS_SDADC_COMMON_MODE(ConfParamStruct->CommonMode));
mbed_official 330:c80ac197fa6a 448 assert_param(IS_SDADC_OFFSET_VALUE(ConfParamStruct->Offset));
mbed_official 330:c80ac197fa6a 449
mbed_official 330:c80ac197fa6a 450 /* Check SDADC state is ready */
mbed_official 330:c80ac197fa6a 451 if(hsdadc->State != HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 452 {
mbed_official 330:c80ac197fa6a 453 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 454 }
mbed_official 330:c80ac197fa6a 455 else
mbed_official 330:c80ac197fa6a 456 {
mbed_official 330:c80ac197fa6a 457 /* Enter init mode */
mbed_official 330:c80ac197fa6a 458 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 459 {
mbed_official 330:c80ac197fa6a 460 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 461 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 462 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 463 }
mbed_official 330:c80ac197fa6a 464 else
mbed_official 330:c80ac197fa6a 465 {
mbed_official 330:c80ac197fa6a 466 /* Program configuration register with parameters */
mbed_official 330:c80ac197fa6a 467 tmp = (uint32_t)((uint32_t)(hsdadc->Instance) + \
mbed_official 330:c80ac197fa6a 468 SDADC_CONFREG_OFFSET + \
mbed_official 330:c80ac197fa6a 469 (uint32_t)(ConfIndex << 2));
mbed_official 330:c80ac197fa6a 470 *(__IO uint32_t *) (tmp) = (uint32_t) (ConfParamStruct->InputMode | \
mbed_official 330:c80ac197fa6a 471 ConfParamStruct->Gain | \
mbed_official 330:c80ac197fa6a 472 ConfParamStruct->CommonMode | \
mbed_official 330:c80ac197fa6a 473 ConfParamStruct->Offset);
mbed_official 330:c80ac197fa6a 474 /* Exit init mode */
mbed_official 330:c80ac197fa6a 475 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 476 }
mbed_official 330:c80ac197fa6a 477 }
mbed_official 330:c80ac197fa6a 478 /* Return function status */
mbed_official 330:c80ac197fa6a 479 return status;
mbed_official 330:c80ac197fa6a 480 }
mbed_official 330:c80ac197fa6a 481
mbed_official 330:c80ac197fa6a 482 /**
mbed_official 330:c80ac197fa6a 483 * @brief This function allows the user to associate a channel with one of the
mbed_official 330:c80ac197fa6a 484 * available configurations.
mbed_official 330:c80ac197fa6a 485 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 486 * (neither calibration nor regular or injected conversion ongoing)
mbed_official 330:c80ac197fa6a 487 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 488 * @param Channel : Channel to associate with configuration.
mbed_official 330:c80ac197fa6a 489 * This parameter can be a value of @ref SDADC_Channel_Selection.
mbed_official 330:c80ac197fa6a 490 * @param ConfIndex : Index of configuration to associate with channel.
mbed_official 330:c80ac197fa6a 491 * This parameter can be a value of @ref SDADC_ConfIndex.
mbed_official 330:c80ac197fa6a 492 * @retval HAL status
mbed_official 330:c80ac197fa6a 493 */
mbed_official 330:c80ac197fa6a 494 HAL_StatusTypeDef HAL_SDADC_AssociateChannelConfig(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 495 uint32_t Channel,
mbed_official 330:c80ac197fa6a 496 uint32_t ConfIndex)
mbed_official 330:c80ac197fa6a 497 {
mbed_official 330:c80ac197fa6a 498 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 499 uint32_t channelnum = 0;
mbed_official 330:c80ac197fa6a 500
mbed_official 330:c80ac197fa6a 501 /* Check parameters */
mbed_official 330:c80ac197fa6a 502 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 503 assert_param(IS_SDADC_REGULAR_CHANNEL(Channel));
mbed_official 330:c80ac197fa6a 504 assert_param(IS_SDADC_CONF_INDEX(ConfIndex));
mbed_official 330:c80ac197fa6a 505
mbed_official 330:c80ac197fa6a 506 /* Check SDADC state is ready */
mbed_official 330:c80ac197fa6a 507 if(hsdadc->State != HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 508 {
mbed_official 330:c80ac197fa6a 509 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 510 }
mbed_official 330:c80ac197fa6a 511 else
mbed_official 330:c80ac197fa6a 512 {
mbed_official 330:c80ac197fa6a 513 /* Enter init mode */
mbed_official 330:c80ac197fa6a 514 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 515 {
mbed_official 330:c80ac197fa6a 516 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 517 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 518 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 519 }
mbed_official 330:c80ac197fa6a 520 else
mbed_official 330:c80ac197fa6a 521 {
mbed_official 330:c80ac197fa6a 522 /* Program channel configuration register according parameters */
mbed_official 330:c80ac197fa6a 523 if(Channel != SDADC_CHANNEL_8)
mbed_official 330:c80ac197fa6a 524 {
mbed_official 330:c80ac197fa6a 525 /* Get channel number */
mbed_official 330:c80ac197fa6a 526 channelnum = (uint32_t)(Channel>>16);
mbed_official 330:c80ac197fa6a 527
mbed_official 330:c80ac197fa6a 528 /* Set the channel configuration */
mbed_official 330:c80ac197fa6a 529 hsdadc->Instance->CONFCHR1 &= (uint32_t) ~(SDADC_CONFCHR1_CONFCH0 << (channelnum << 2));
mbed_official 330:c80ac197fa6a 530 hsdadc->Instance->CONFCHR1 |= (uint32_t) (ConfIndex << (channelnum << 2));
mbed_official 330:c80ac197fa6a 531 }
mbed_official 330:c80ac197fa6a 532 else
mbed_official 330:c80ac197fa6a 533 {
mbed_official 330:c80ac197fa6a 534 hsdadc->Instance->CONFCHR2 = (uint32_t) (ConfIndex);
mbed_official 330:c80ac197fa6a 535 }
mbed_official 330:c80ac197fa6a 536 /* Exit init mode */
mbed_official 330:c80ac197fa6a 537 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 538 }
mbed_official 330:c80ac197fa6a 539 }
mbed_official 330:c80ac197fa6a 540 /* Return function status */
mbed_official 330:c80ac197fa6a 541 return status;
mbed_official 330:c80ac197fa6a 542 }
mbed_official 330:c80ac197fa6a 543
mbed_official 330:c80ac197fa6a 544 /**
mbed_official 330:c80ac197fa6a 545 * @brief This function allows to select channel for regular conversion and
mbed_official 330:c80ac197fa6a 546 * to enable/disable continuous mode for regular conversion.
mbed_official 330:c80ac197fa6a 547 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 548 * @param Channel : Channel for regular conversion.
mbed_official 330:c80ac197fa6a 549 * This parameter can be a value of @ref SDADC_Channel_Selection.
mbed_official 330:c80ac197fa6a 550 * @param ContinuousMode : Enable/disable continuous mode for regular conversion.
mbed_official 330:c80ac197fa6a 551 * This parameter can be a value of @ref SDADC_ContinuousMode.
mbed_official 330:c80ac197fa6a 552 * @retval HAL status
mbed_official 330:c80ac197fa6a 553 */
mbed_official 330:c80ac197fa6a 554 HAL_StatusTypeDef HAL_SDADC_ConfigChannel(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 555 uint32_t Channel,
mbed_official 330:c80ac197fa6a 556 uint32_t ContinuousMode)
mbed_official 330:c80ac197fa6a 557 {
mbed_official 330:c80ac197fa6a 558 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 559
mbed_official 330:c80ac197fa6a 560 /* Check parameters */
mbed_official 330:c80ac197fa6a 561 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 562 assert_param(IS_SDADC_REGULAR_CHANNEL(Channel));
mbed_official 330:c80ac197fa6a 563 assert_param(IS_SDADC_CONTINUOUS_MODE(ContinuousMode));
mbed_official 330:c80ac197fa6a 564
mbed_official 330:c80ac197fa6a 565 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 566 if((hsdadc->State != HAL_SDADC_STATE_RESET) && (hsdadc->State != HAL_SDADC_STATE_ERROR))
mbed_official 330:c80ac197fa6a 567 {
mbed_official 330:c80ac197fa6a 568 /* Set RCH[3:0] and RCONT bits in SDADC_CR2 */
mbed_official 330:c80ac197fa6a 569 hsdadc->Instance->CR2 &= (uint32_t) ~(SDADC_CR2_RCH | SDADC_CR2_RCONT);
mbed_official 330:c80ac197fa6a 570 if(ContinuousMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 571 {
mbed_official 330:c80ac197fa6a 572 hsdadc->Instance->CR2 |= (uint32_t) ((Channel & SDADC_MSB_MASK) | SDADC_CR2_RCONT);
mbed_official 330:c80ac197fa6a 573 }
mbed_official 330:c80ac197fa6a 574 else
mbed_official 330:c80ac197fa6a 575 {
mbed_official 330:c80ac197fa6a 576 hsdadc->Instance->CR2 |= (uint32_t) ((Channel & SDADC_MSB_MASK));
mbed_official 330:c80ac197fa6a 577 }
mbed_official 330:c80ac197fa6a 578 /* Store continuous mode information */
mbed_official 330:c80ac197fa6a 579 hsdadc->RegularContMode = ContinuousMode;
mbed_official 330:c80ac197fa6a 580 }
mbed_official 330:c80ac197fa6a 581 else
mbed_official 330:c80ac197fa6a 582 {
mbed_official 330:c80ac197fa6a 583 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 584 }
mbed_official 330:c80ac197fa6a 585 /* Return function status */
mbed_official 330:c80ac197fa6a 586 return status;
mbed_official 330:c80ac197fa6a 587 }
mbed_official 330:c80ac197fa6a 588
mbed_official 330:c80ac197fa6a 589 /**
mbed_official 330:c80ac197fa6a 590 * @brief This function allows to select channels for injected conversion and
mbed_official 330:c80ac197fa6a 591 * to enable/disable continuous mode for injected conversion.
mbed_official 330:c80ac197fa6a 592 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 593 * @param Channel : Channels for injected conversion.
mbed_official 330:c80ac197fa6a 594 * This parameter can be a values combination of @ref SDADC_Channel_Selection.
mbed_official 330:c80ac197fa6a 595 * @param ContinuousMode : Enable/disable continuous mode for injected conversion.
mbed_official 330:c80ac197fa6a 596 * This parameter can be a value of @ref SDADC_ContinuousMode.
mbed_official 330:c80ac197fa6a 597 * @retval HAL status
mbed_official 330:c80ac197fa6a 598 */
mbed_official 330:c80ac197fa6a 599 HAL_StatusTypeDef HAL_SDADC_InjectedConfigChannel(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 600 uint32_t Channel,
mbed_official 330:c80ac197fa6a 601 uint32_t ContinuousMode)
mbed_official 330:c80ac197fa6a 602 {
mbed_official 330:c80ac197fa6a 603 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 604
mbed_official 330:c80ac197fa6a 605 /* Check parameters */
mbed_official 330:c80ac197fa6a 606 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 607 assert_param(IS_SDADC_INJECTED_CHANNEL(Channel));
mbed_official 330:c80ac197fa6a 608 assert_param(IS_SDADC_CONTINUOUS_MODE(ContinuousMode));
mbed_official 330:c80ac197fa6a 609
mbed_official 330:c80ac197fa6a 610 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 611 if((hsdadc->State != HAL_SDADC_STATE_RESET) && (hsdadc->State != HAL_SDADC_STATE_ERROR))
mbed_official 330:c80ac197fa6a 612 {
mbed_official 330:c80ac197fa6a 613 /* Set JCHG[8:0] bits in SDADC_JCHG */
mbed_official 330:c80ac197fa6a 614 hsdadc->Instance->JCHGR = (uint32_t) (Channel & SDADC_LSB_MASK);
mbed_official 330:c80ac197fa6a 615 /* Set or clear JCONT bit in SDADC_CR2 */
mbed_official 330:c80ac197fa6a 616 if(ContinuousMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 617 {
mbed_official 330:c80ac197fa6a 618 hsdadc->Instance->CR2 |= SDADC_CR2_JCONT;
mbed_official 330:c80ac197fa6a 619 }
mbed_official 330:c80ac197fa6a 620 else
mbed_official 330:c80ac197fa6a 621 {
mbed_official 330:c80ac197fa6a 622 hsdadc->Instance->CR2 &= ~(SDADC_CR2_JCONT);
mbed_official 330:c80ac197fa6a 623 }
mbed_official 330:c80ac197fa6a 624 /* Store continuous mode information */
mbed_official 330:c80ac197fa6a 625 hsdadc->InjectedContMode = ContinuousMode;
mbed_official 330:c80ac197fa6a 626 /* Store number of injected channels */
mbed_official 330:c80ac197fa6a 627 hsdadc->InjectedChannelsNbr = SDADC_GetInjChannelsNbr(Channel);
mbed_official 330:c80ac197fa6a 628 }
mbed_official 330:c80ac197fa6a 629 else
mbed_official 330:c80ac197fa6a 630 {
mbed_official 330:c80ac197fa6a 631 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 632 }
mbed_official 330:c80ac197fa6a 633 /* Return function status */
mbed_official 330:c80ac197fa6a 634 return status;
mbed_official 330:c80ac197fa6a 635 }
mbed_official 330:c80ac197fa6a 636
mbed_official 330:c80ac197fa6a 637 /**
mbed_official 330:c80ac197fa6a 638 * @brief This function allows to select trigger for regular conversions.
mbed_official 330:c80ac197fa6a 639 * @note This function should not be called if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 640 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 641 * @param Trigger : Trigger for regular conversions.
mbed_official 330:c80ac197fa6a 642 * This parameter can be one of the following value :
mbed_official 330:c80ac197fa6a 643 * @arg SDADC_SOFTWARE_TRIGGER : Software trigger.
mbed_official 330:c80ac197fa6a 644 * @arg SDADC_SYNCHRONOUS_TRIGGER : Synchronous with SDADC1 (only for SDADC2 and SDADC3).
mbed_official 330:c80ac197fa6a 645 * @retval HAL status
mbed_official 330:c80ac197fa6a 646 */
mbed_official 330:c80ac197fa6a 647 HAL_StatusTypeDef HAL_SDADC_SelectRegularTrigger(SDADC_HandleTypeDef *hsdadc, uint32_t Trigger)
mbed_official 330:c80ac197fa6a 648 {
mbed_official 330:c80ac197fa6a 649 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 650
mbed_official 330:c80ac197fa6a 651 /* Check parameters */
mbed_official 330:c80ac197fa6a 652 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 653 assert_param(IS_SDADC_REGULAR_TRIGGER(Trigger));
mbed_official 330:c80ac197fa6a 654
mbed_official 330:c80ac197fa6a 655 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 656 if((hsdadc->Instance == SDADC1) && (Trigger == SDADC_SYNCHRONOUS_TRIGGER))
mbed_official 330:c80ac197fa6a 657 {
mbed_official 330:c80ac197fa6a 658 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 659 }
mbed_official 330:c80ac197fa6a 660 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 661 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 662 (hsdadc->State == HAL_SDADC_STATE_CALIB) || \
mbed_official 330:c80ac197fa6a 663 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 664 {
mbed_official 330:c80ac197fa6a 665 /* Store regular trigger information */
mbed_official 330:c80ac197fa6a 666 hsdadc->RegularTrigger = Trigger;
mbed_official 330:c80ac197fa6a 667 }
mbed_official 330:c80ac197fa6a 668 else
mbed_official 330:c80ac197fa6a 669 {
mbed_official 330:c80ac197fa6a 670 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 671 }
mbed_official 330:c80ac197fa6a 672 /* Return function status */
mbed_official 330:c80ac197fa6a 673 return status;
mbed_official 330:c80ac197fa6a 674 }
mbed_official 330:c80ac197fa6a 675
mbed_official 330:c80ac197fa6a 676 /**
mbed_official 330:c80ac197fa6a 677 * @brief This function allows to select trigger for injected conversions.
mbed_official 330:c80ac197fa6a 678 * @note This function should not be called if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 679 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 680 * @param Trigger : Trigger for injected conversions.
mbed_official 330:c80ac197fa6a 681 * This parameter can be one of the following value :
mbed_official 330:c80ac197fa6a 682 * @arg SDADC_SOFTWARE_TRIGGER : Software trigger.
mbed_official 330:c80ac197fa6a 683 * @arg SDADC_SYNCHRONOUS_TRIGGER : Synchronous with SDADC1 (only for SDADC2 and SDADC3).
mbed_official 330:c80ac197fa6a 684 * @arg SDADC_EXTERNAL_TRIGGER : External trigger.
mbed_official 330:c80ac197fa6a 685 * @retval HAL status
mbed_official 330:c80ac197fa6a 686 */
mbed_official 330:c80ac197fa6a 687 HAL_StatusTypeDef HAL_SDADC_SelectInjectedTrigger(SDADC_HandleTypeDef *hsdadc, uint32_t Trigger)
mbed_official 330:c80ac197fa6a 688 {
mbed_official 330:c80ac197fa6a 689 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 690
mbed_official 330:c80ac197fa6a 691 /* Check parameters */
mbed_official 330:c80ac197fa6a 692 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 693 assert_param(IS_SDADC_INJECTED_TRIGGER(Trigger));
mbed_official 330:c80ac197fa6a 694
mbed_official 330:c80ac197fa6a 695 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 696 if((hsdadc->Instance == SDADC1) && (Trigger == SDADC_SYNCHRONOUS_TRIGGER))
mbed_official 330:c80ac197fa6a 697 {
mbed_official 330:c80ac197fa6a 698 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 699 }
mbed_official 330:c80ac197fa6a 700 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 701 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 702 (hsdadc->State == HAL_SDADC_STATE_CALIB) || \
mbed_official 330:c80ac197fa6a 703 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 704 {
mbed_official 330:c80ac197fa6a 705 /* Store regular trigger information */
mbed_official 330:c80ac197fa6a 706 hsdadc->InjectedTrigger = Trigger;
mbed_official 330:c80ac197fa6a 707 }
mbed_official 330:c80ac197fa6a 708 else
mbed_official 330:c80ac197fa6a 709 {
mbed_official 330:c80ac197fa6a 710 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 711 }
mbed_official 330:c80ac197fa6a 712 /* Return function status */
mbed_official 330:c80ac197fa6a 713 return status;
mbed_official 330:c80ac197fa6a 714 }
mbed_official 330:c80ac197fa6a 715
mbed_official 330:c80ac197fa6a 716 /**
mbed_official 330:c80ac197fa6a 717 * @brief This function allows to select and configure injected external trigger.
mbed_official 330:c80ac197fa6a 718 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 719 * (neither calibration nor regular or injected conversion ongoing)
mbed_official 330:c80ac197fa6a 720 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 721 * @param InjectedExtTrigger : External trigger for injected conversions.
mbed_official 330:c80ac197fa6a 722 * This parameter can be a value of @ref SDADC_InjectedExtTrigger.
mbed_official 330:c80ac197fa6a 723 * @param ExtTriggerEdge : Edge of external injected trigger.
mbed_official 330:c80ac197fa6a 724 * This parameter can be a value of @ref SDADC_ExtTriggerEdge.
mbed_official 330:c80ac197fa6a 725 * @retval HAL status
mbed_official 330:c80ac197fa6a 726 */
mbed_official 330:c80ac197fa6a 727 HAL_StatusTypeDef HAL_SDADC_SelectInjectedExtTrigger(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 728 uint32_t InjectedExtTrigger,
mbed_official 330:c80ac197fa6a 729 uint32_t ExtTriggerEdge)
mbed_official 330:c80ac197fa6a 730 {
mbed_official 330:c80ac197fa6a 731 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 732
mbed_official 330:c80ac197fa6a 733 /* Check parameters */
mbed_official 330:c80ac197fa6a 734 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 735 assert_param(IS_SDADC_EXT_INJEC_TRIG(InjectedExtTrigger));
mbed_official 330:c80ac197fa6a 736 assert_param(IS_SDADC_EXT_TRIG_EDGE(ExtTriggerEdge));
mbed_official 330:c80ac197fa6a 737
mbed_official 330:c80ac197fa6a 738 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 739 if(hsdadc->State == HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 740 {
mbed_official 330:c80ac197fa6a 741 /* Enter init mode */
mbed_official 330:c80ac197fa6a 742 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 743 {
mbed_official 330:c80ac197fa6a 744 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 745 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 746 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 747 }
mbed_official 330:c80ac197fa6a 748 else
mbed_official 330:c80ac197fa6a 749 {
mbed_official 330:c80ac197fa6a 750 /* Set JEXTSEL[2:0] bits in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 751 hsdadc->Instance->CR2 &= ~(SDADC_CR2_JEXTSEL);
mbed_official 330:c80ac197fa6a 752 hsdadc->Instance->CR2 |= InjectedExtTrigger;
mbed_official 330:c80ac197fa6a 753
mbed_official 330:c80ac197fa6a 754 /* Store external trigger edge information */
mbed_official 330:c80ac197fa6a 755 hsdadc->ExtTriggerEdge = ExtTriggerEdge;
mbed_official 330:c80ac197fa6a 756
mbed_official 330:c80ac197fa6a 757 /* Exit init mode */
mbed_official 330:c80ac197fa6a 758 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 759 }
mbed_official 330:c80ac197fa6a 760 }
mbed_official 330:c80ac197fa6a 761 else
mbed_official 330:c80ac197fa6a 762 {
mbed_official 330:c80ac197fa6a 763 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 764 }
mbed_official 330:c80ac197fa6a 765 /* Return function status */
mbed_official 330:c80ac197fa6a 766 return status;
mbed_official 330:c80ac197fa6a 767 }
mbed_official 330:c80ac197fa6a 768
mbed_official 330:c80ac197fa6a 769 /**
mbed_official 330:c80ac197fa6a 770 * @brief This function allows to enable/disable delay addition for injected conversions.
mbed_official 330:c80ac197fa6a 771 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 772 * (neither calibration nor regular or injected conversion ongoing)
mbed_official 330:c80ac197fa6a 773 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 774 * @param InjectedDelay : Enable/disable delay for injected conversions.
mbed_official 330:c80ac197fa6a 775 * This parameter can be a value of @ref SDADC_InjectedDelay.
mbed_official 330:c80ac197fa6a 776 * @retval HAL status
mbed_official 330:c80ac197fa6a 777 */
mbed_official 330:c80ac197fa6a 778 HAL_StatusTypeDef HAL_SDADC_SelectInjectedDelay(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 779 uint32_t InjectedDelay)
mbed_official 330:c80ac197fa6a 780 {
mbed_official 330:c80ac197fa6a 781 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 782
mbed_official 330:c80ac197fa6a 783 /* Check parameters */
mbed_official 330:c80ac197fa6a 784 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 785 assert_param(IS_SDADC_INJECTED_DELAY(InjectedDelay));
mbed_official 330:c80ac197fa6a 786
mbed_official 330:c80ac197fa6a 787 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 788 if(hsdadc->State == HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 789 {
mbed_official 330:c80ac197fa6a 790 /* Enter init mode */
mbed_official 330:c80ac197fa6a 791 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 792 {
mbed_official 330:c80ac197fa6a 793 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 794 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 795 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 796 }
mbed_official 330:c80ac197fa6a 797 else
mbed_official 330:c80ac197fa6a 798 {
mbed_official 330:c80ac197fa6a 799 /* Set JDS bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 800 hsdadc->Instance->CR2 &= ~(SDADC_CR2_JDS);
mbed_official 330:c80ac197fa6a 801 hsdadc->Instance->CR2 |= InjectedDelay;
mbed_official 330:c80ac197fa6a 802
mbed_official 330:c80ac197fa6a 803 /* Exit init mode */
mbed_official 330:c80ac197fa6a 804 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 805 }
mbed_official 330:c80ac197fa6a 806 }
mbed_official 330:c80ac197fa6a 807 else
mbed_official 330:c80ac197fa6a 808 {
mbed_official 330:c80ac197fa6a 809 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 810 }
mbed_official 330:c80ac197fa6a 811 /* Return function status */
mbed_official 330:c80ac197fa6a 812 return status;
mbed_official 330:c80ac197fa6a 813 }
mbed_official 330:c80ac197fa6a 814
mbed_official 330:c80ac197fa6a 815 /**
mbed_official 330:c80ac197fa6a 816 * @brief This function allows to configure multimode for regular conversions.
mbed_official 330:c80ac197fa6a 817 * @note This function should not be called if regular conversion is ongoing
mbed_official 330:c80ac197fa6a 818 * and should be could only for SDADC1.
mbed_official 330:c80ac197fa6a 819 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 820 * @param MultimodeType : Type of multimode for regular conversions.
mbed_official 330:c80ac197fa6a 821 * This parameter can be a value of @ref SDADC_MultimodeType.
mbed_official 330:c80ac197fa6a 822 * @retval HAL status
mbed_official 330:c80ac197fa6a 823 */
mbed_official 330:c80ac197fa6a 824 HAL_StatusTypeDef HAL_SDADC_MultiModeConfigChannel(SDADC_HandleTypeDef* hsdadc,
mbed_official 330:c80ac197fa6a 825 uint32_t MultimodeType)
mbed_official 330:c80ac197fa6a 826 {
mbed_official 330:c80ac197fa6a 827 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 828
mbed_official 330:c80ac197fa6a 829 /* Check parameters */
mbed_official 330:c80ac197fa6a 830 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 831 assert_param(IS_SDADC_MULTIMODE_TYPE(MultimodeType));
mbed_official 330:c80ac197fa6a 832
mbed_official 330:c80ac197fa6a 833 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 834 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 835 {
mbed_official 330:c80ac197fa6a 836 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 837 }
mbed_official 330:c80ac197fa6a 838 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 839 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 840 (hsdadc->State == HAL_SDADC_STATE_CALIB) || \
mbed_official 330:c80ac197fa6a 841 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 842 {
mbed_official 330:c80ac197fa6a 843 /* Store regular trigger information */
mbed_official 330:c80ac197fa6a 844 hsdadc->RegularMultimode = MultimodeType;
mbed_official 330:c80ac197fa6a 845 }
mbed_official 330:c80ac197fa6a 846 else
mbed_official 330:c80ac197fa6a 847 {
mbed_official 330:c80ac197fa6a 848 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 849 }
mbed_official 330:c80ac197fa6a 850 /* Return function status */
mbed_official 330:c80ac197fa6a 851 return status;
mbed_official 330:c80ac197fa6a 852 }
mbed_official 330:c80ac197fa6a 853
mbed_official 330:c80ac197fa6a 854 /**
mbed_official 330:c80ac197fa6a 855 * @brief This function allows to configure multimode for injected conversions.
mbed_official 330:c80ac197fa6a 856 * @note This function should not be called if injected conversion is ongoing
mbed_official 330:c80ac197fa6a 857 * and should be could only for SDADC1.
mbed_official 330:c80ac197fa6a 858 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 859 * @param MultimodeType : Type of multimode for injected conversions.
mbed_official 330:c80ac197fa6a 860 * This parameter can be a value of @ref SDADC_MultimodeType.
mbed_official 330:c80ac197fa6a 861 * @retval HAL status
mbed_official 330:c80ac197fa6a 862 */
mbed_official 330:c80ac197fa6a 863 HAL_StatusTypeDef HAL_SDADC_InjectedMultiModeConfigChannel(SDADC_HandleTypeDef* hsdadc,
mbed_official 330:c80ac197fa6a 864 uint32_t MultimodeType)
mbed_official 330:c80ac197fa6a 865 {
mbed_official 330:c80ac197fa6a 866 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 867
mbed_official 330:c80ac197fa6a 868 /* Check parameters */
mbed_official 330:c80ac197fa6a 869 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 870 assert_param(IS_SDADC_MULTIMODE_TYPE(MultimodeType));
mbed_official 330:c80ac197fa6a 871
mbed_official 330:c80ac197fa6a 872 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 873 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 874 {
mbed_official 330:c80ac197fa6a 875 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 876 }
mbed_official 330:c80ac197fa6a 877 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 878 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 879 (hsdadc->State == HAL_SDADC_STATE_CALIB) || \
mbed_official 330:c80ac197fa6a 880 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 881 {
mbed_official 330:c80ac197fa6a 882 /* Store regular trigger information */
mbed_official 330:c80ac197fa6a 883 hsdadc->InjectedMultimode = MultimodeType;
mbed_official 330:c80ac197fa6a 884 }
mbed_official 330:c80ac197fa6a 885 else
mbed_official 330:c80ac197fa6a 886 {
mbed_official 330:c80ac197fa6a 887 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 888 }
mbed_official 330:c80ac197fa6a 889 /* Return function status */
mbed_official 330:c80ac197fa6a 890 return status;
mbed_official 330:c80ac197fa6a 891 }
mbed_official 330:c80ac197fa6a 892
mbed_official 330:c80ac197fa6a 893 /**
mbed_official 330:c80ac197fa6a 894 * @}
mbed_official 330:c80ac197fa6a 895 */
mbed_official 330:c80ac197fa6a 896
mbed_official 330:c80ac197fa6a 897 /** @defgroup SDADC_Exported_Functions_Group3 Input and Output operation functions
mbed_official 330:c80ac197fa6a 898 * @brief I/O operation Control functions
mbed_official 330:c80ac197fa6a 899 *
mbed_official 330:c80ac197fa6a 900 @verbatim
mbed_official 330:c80ac197fa6a 901 ===============================================================================
mbed_official 330:c80ac197fa6a 902 ##### I/O operation functions #####
mbed_official 330:c80ac197fa6a 903 ===============================================================================
mbed_official 330:c80ac197fa6a 904 [..] This section provides functions allowing to:
mbed_official 330:c80ac197fa6a 905 (+) Start calibration.
mbed_official 330:c80ac197fa6a 906 (+) Poll for the end of calibration.
mbed_official 330:c80ac197fa6a 907 (+) Start calibration and enable interrupt.
mbed_official 330:c80ac197fa6a 908 (+) Start conversion of regular/injected channel.
mbed_official 330:c80ac197fa6a 909 (+) Poll for the end of regular/injected conversion.
mbed_official 330:c80ac197fa6a 910 (+) Stop conversion of regular/injected channel.
mbed_official 330:c80ac197fa6a 911 (+) Start conversion of regular/injected channel and enable interrupt.
mbed_official 330:c80ac197fa6a 912 (+) Stop conversion of regular/injected channel and disable interrupt.
mbed_official 330:c80ac197fa6a 913 (+) Start conversion of regular/injected channel and enable DMA transfer.
mbed_official 330:c80ac197fa6a 914 (+) Stop conversion of regular/injected channel and disable DMA transfer.
mbed_official 330:c80ac197fa6a 915 (+) Start multimode and enable DMA transfer for regular/injected conversion.
mbed_official 330:c80ac197fa6a 916 (+) Stop multimode and disable DMA transfer for regular/injected conversion..
mbed_official 330:c80ac197fa6a 917 (+) Get result of regular channel conversion.
mbed_official 330:c80ac197fa6a 918 (+) Get result of injected channel conversion.
mbed_official 330:c80ac197fa6a 919 (+) Get result of multimode conversion.
mbed_official 330:c80ac197fa6a 920 (+) Handle SDADC interrupt request.
mbed_official 330:c80ac197fa6a 921 (+) Callbacks for calibration and regular/injected conversions.
mbed_official 330:c80ac197fa6a 922
mbed_official 330:c80ac197fa6a 923 @endverbatim
mbed_official 330:c80ac197fa6a 924 * @{
mbed_official 330:c80ac197fa6a 925 */
mbed_official 330:c80ac197fa6a 926
mbed_official 330:c80ac197fa6a 927 /**
mbed_official 330:c80ac197fa6a 928 * @brief This function allows to start calibration in polling mode.
mbed_official 330:c80ac197fa6a 929 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 930 * (neither calibration nor regular or injected conversion ongoing).
mbed_official 330:c80ac197fa6a 931 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 932 * @param CalibrationSequence : Calibration sequence.
mbed_official 330:c80ac197fa6a 933 * This parameter can be a value of @ref SDADC_CalibrationSequence.
mbed_official 330:c80ac197fa6a 934 * @retval HAL status
mbed_official 330:c80ac197fa6a 935 */
mbed_official 330:c80ac197fa6a 936 HAL_StatusTypeDef HAL_SDADC_CalibrationStart(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 937 uint32_t CalibrationSequence)
mbed_official 330:c80ac197fa6a 938 {
mbed_official 330:c80ac197fa6a 939 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 940
mbed_official 330:c80ac197fa6a 941 /* Check parameters */
mbed_official 330:c80ac197fa6a 942 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 943 assert_param(IS_SDADC_CALIB_SEQUENCE(CalibrationSequence));
mbed_official 330:c80ac197fa6a 944
mbed_official 330:c80ac197fa6a 945 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 946 if(hsdadc->State == HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 947 {
mbed_official 330:c80ac197fa6a 948 /* Enter init mode */
mbed_official 330:c80ac197fa6a 949 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 950 {
mbed_official 330:c80ac197fa6a 951 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 952 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 953 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 954 }
mbed_official 330:c80ac197fa6a 955 else
mbed_official 330:c80ac197fa6a 956 {
mbed_official 330:c80ac197fa6a 957 /* Set CALIBCNT[1:0] bits in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 958 hsdadc->Instance->CR2 &= ~(SDADC_CR2_CALIBCNT);
mbed_official 330:c80ac197fa6a 959 hsdadc->Instance->CR2 |= CalibrationSequence;
mbed_official 330:c80ac197fa6a 960
mbed_official 330:c80ac197fa6a 961 /* Exit init mode */
mbed_official 330:c80ac197fa6a 962 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 963
mbed_official 330:c80ac197fa6a 964 /* Set STARTCALIB in SDADC_CR2 */
mbed_official 330:c80ac197fa6a 965 hsdadc->Instance->CR2 |= SDADC_CR2_STARTCALIB;
mbed_official 330:c80ac197fa6a 966
mbed_official 330:c80ac197fa6a 967 /* Set SDADC in calibration state */
mbed_official 330:c80ac197fa6a 968 hsdadc->State = HAL_SDADC_STATE_CALIB;
mbed_official 330:c80ac197fa6a 969 }
mbed_official 330:c80ac197fa6a 970 }
mbed_official 330:c80ac197fa6a 971 else
mbed_official 330:c80ac197fa6a 972 {
mbed_official 330:c80ac197fa6a 973 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 974 }
mbed_official 330:c80ac197fa6a 975 /* Return function status */
mbed_official 330:c80ac197fa6a 976 return status;
mbed_official 330:c80ac197fa6a 977 }
mbed_official 330:c80ac197fa6a 978
mbed_official 330:c80ac197fa6a 979 /**
mbed_official 330:c80ac197fa6a 980 * @brief This function allows to poll for the end of calibration.
mbed_official 330:c80ac197fa6a 981 * @note This function should be called only if calibration is ongoing.
mbed_official 330:c80ac197fa6a 982 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 983 * @param Timeout : Timeout value in milliseconds.
mbed_official 330:c80ac197fa6a 984 * @retval HAL status
mbed_official 330:c80ac197fa6a 985 */
mbed_official 330:c80ac197fa6a 986 HAL_StatusTypeDef HAL_SDADC_PollForCalibEvent(SDADC_HandleTypeDef* hsdadc, uint32_t Timeout)
mbed_official 330:c80ac197fa6a 987 {
mbed_official 330:c80ac197fa6a 988 uint32_t tickstart;
mbed_official 330:c80ac197fa6a 989
mbed_official 330:c80ac197fa6a 990 /* Check parameters */
mbed_official 330:c80ac197fa6a 991 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 992
mbed_official 330:c80ac197fa6a 993 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 994 if(hsdadc->State != HAL_SDADC_STATE_CALIB)
mbed_official 330:c80ac197fa6a 995 {
mbed_official 330:c80ac197fa6a 996 /* Return error status */
mbed_official 330:c80ac197fa6a 997 return HAL_ERROR;
mbed_official 330:c80ac197fa6a 998 }
mbed_official 330:c80ac197fa6a 999 else
mbed_official 330:c80ac197fa6a 1000 {
mbed_official 330:c80ac197fa6a 1001 /* Get timeout */
mbed_official 330:c80ac197fa6a 1002 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 1003
mbed_official 330:c80ac197fa6a 1004 /* Wait EOCALF bit in SDADC_ISR register */
mbed_official 330:c80ac197fa6a 1005 while((hsdadc->Instance->ISR & SDADC_ISR_EOCALF) != SDADC_ISR_EOCALF)
mbed_official 330:c80ac197fa6a 1006 {
mbed_official 330:c80ac197fa6a 1007 /* Check the Timeout */
mbed_official 330:c80ac197fa6a 1008 if(Timeout != HAL_MAX_DELAY)
mbed_official 330:c80ac197fa6a 1009 {
mbed_official 330:c80ac197fa6a 1010 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
mbed_official 330:c80ac197fa6a 1011 {
mbed_official 330:c80ac197fa6a 1012 /* Return timeout status */
mbed_official 330:c80ac197fa6a 1013 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 1014 }
mbed_official 330:c80ac197fa6a 1015 }
mbed_official 330:c80ac197fa6a 1016 }
mbed_official 330:c80ac197fa6a 1017 /* Set CLREOCALF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 1018 hsdadc->Instance->CLRISR |= SDADC_ISR_CLREOCALF;
mbed_official 330:c80ac197fa6a 1019
mbed_official 330:c80ac197fa6a 1020 /* Set SDADC in ready state */
mbed_official 330:c80ac197fa6a 1021 hsdadc->State = HAL_SDADC_STATE_READY;
mbed_official 330:c80ac197fa6a 1022
mbed_official 330:c80ac197fa6a 1023 /* Return function status */
mbed_official 330:c80ac197fa6a 1024 return HAL_OK;
mbed_official 330:c80ac197fa6a 1025 }
mbed_official 330:c80ac197fa6a 1026 }
mbed_official 330:c80ac197fa6a 1027
mbed_official 330:c80ac197fa6a 1028 /**
mbed_official 330:c80ac197fa6a 1029 * @brief This function allows to start calibration in interrupt mode.
mbed_official 330:c80ac197fa6a 1030 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1031 * (neither calibration nor regular or injected conversion ongoing).
mbed_official 330:c80ac197fa6a 1032 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1033 * @param CalibrationSequence : Calibration sequence.
mbed_official 330:c80ac197fa6a 1034 * This parameter can be a value of @ref SDADC_CalibrationSequence.
mbed_official 330:c80ac197fa6a 1035 * @retval HAL status
mbed_official 330:c80ac197fa6a 1036 */
mbed_official 330:c80ac197fa6a 1037 HAL_StatusTypeDef HAL_SDADC_CalibrationStart_IT(SDADC_HandleTypeDef *hsdadc,
mbed_official 330:c80ac197fa6a 1038 uint32_t CalibrationSequence)
mbed_official 330:c80ac197fa6a 1039 {
mbed_official 330:c80ac197fa6a 1040 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1041
mbed_official 330:c80ac197fa6a 1042 /* Check parameters */
mbed_official 330:c80ac197fa6a 1043 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1044 assert_param(IS_SDADC_CALIB_SEQUENCE(CalibrationSequence));
mbed_official 330:c80ac197fa6a 1045
mbed_official 330:c80ac197fa6a 1046 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1047 if(hsdadc->State == HAL_SDADC_STATE_READY)
mbed_official 330:c80ac197fa6a 1048 {
mbed_official 330:c80ac197fa6a 1049 /* Enter init mode */
mbed_official 330:c80ac197fa6a 1050 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 1051 {
mbed_official 330:c80ac197fa6a 1052 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1053 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1054 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 1055 }
mbed_official 330:c80ac197fa6a 1056 else
mbed_official 330:c80ac197fa6a 1057 {
mbed_official 330:c80ac197fa6a 1058 /* Set CALIBCNT[1:0] bits in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 1059 hsdadc->Instance->CR2 &= ~(SDADC_CR2_CALIBCNT);
mbed_official 330:c80ac197fa6a 1060 hsdadc->Instance->CR2 |= CalibrationSequence;
mbed_official 330:c80ac197fa6a 1061
mbed_official 330:c80ac197fa6a 1062 /* Exit init mode */
mbed_official 330:c80ac197fa6a 1063 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 1064
mbed_official 330:c80ac197fa6a 1065 /* Set EOCALIE bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1066 hsdadc->Instance->CR1 |= SDADC_CR1_EOCALIE;
mbed_official 330:c80ac197fa6a 1067
mbed_official 330:c80ac197fa6a 1068 /* Set STARTCALIB in SDADC_CR2 */
mbed_official 330:c80ac197fa6a 1069 hsdadc->Instance->CR2 |= SDADC_CR2_STARTCALIB;
mbed_official 330:c80ac197fa6a 1070
mbed_official 330:c80ac197fa6a 1071 /* Set SDADC in calibration state */
mbed_official 330:c80ac197fa6a 1072 hsdadc->State = HAL_SDADC_STATE_CALIB;
mbed_official 330:c80ac197fa6a 1073 }
mbed_official 330:c80ac197fa6a 1074 }
mbed_official 330:c80ac197fa6a 1075 else
mbed_official 330:c80ac197fa6a 1076 {
mbed_official 330:c80ac197fa6a 1077 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1078 }
mbed_official 330:c80ac197fa6a 1079 /* Return function status */
mbed_official 330:c80ac197fa6a 1080 return status;
mbed_official 330:c80ac197fa6a 1081 }
mbed_official 330:c80ac197fa6a 1082
mbed_official 330:c80ac197fa6a 1083 /**
mbed_official 330:c80ac197fa6a 1084 * @brief This function allows to start regular conversion in polling mode.
mbed_official 330:c80ac197fa6a 1085 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1086 * or if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1087 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1088 * @retval HAL status
mbed_official 330:c80ac197fa6a 1089 */
mbed_official 330:c80ac197fa6a 1090 HAL_StatusTypeDef HAL_SDADC_Start(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1091 {
mbed_official 330:c80ac197fa6a 1092 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1093
mbed_official 330:c80ac197fa6a 1094 /* Check parameters */
mbed_official 330:c80ac197fa6a 1095 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1096
mbed_official 330:c80ac197fa6a 1097 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1098 if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1099 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 1100 {
mbed_official 330:c80ac197fa6a 1101 /* Start regular conversion */
mbed_official 330:c80ac197fa6a 1102 status = SDADC_RegConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1103 }
mbed_official 330:c80ac197fa6a 1104 else
mbed_official 330:c80ac197fa6a 1105 {
mbed_official 330:c80ac197fa6a 1106 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1107 }
mbed_official 330:c80ac197fa6a 1108 /* Return function status */
mbed_official 330:c80ac197fa6a 1109 return status;
mbed_official 330:c80ac197fa6a 1110 }
mbed_official 330:c80ac197fa6a 1111
mbed_official 330:c80ac197fa6a 1112 /**
mbed_official 330:c80ac197fa6a 1113 * @brief This function allows to poll for the end of regular conversion.
mbed_official 330:c80ac197fa6a 1114 * @note This function should be called only if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1115 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1116 * @param Timeout : Timeout value in milliseconds.
mbed_official 330:c80ac197fa6a 1117 * @retval HAL status
mbed_official 330:c80ac197fa6a 1118 */
mbed_official 330:c80ac197fa6a 1119 HAL_StatusTypeDef HAL_SDADC_PollForConversion(SDADC_HandleTypeDef* hsdadc, uint32_t Timeout)
mbed_official 330:c80ac197fa6a 1120 {
mbed_official 330:c80ac197fa6a 1121 uint32_t tickstart;
mbed_official 330:c80ac197fa6a 1122
mbed_official 330:c80ac197fa6a 1123 /* Check parameters */
mbed_official 330:c80ac197fa6a 1124 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1125
mbed_official 330:c80ac197fa6a 1126 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1127 if((hsdadc->State != HAL_SDADC_STATE_REG) && \
mbed_official 330:c80ac197fa6a 1128 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1129 {
mbed_official 330:c80ac197fa6a 1130 /* Return error status */
mbed_official 330:c80ac197fa6a 1131 return HAL_ERROR;
mbed_official 330:c80ac197fa6a 1132 }
mbed_official 330:c80ac197fa6a 1133 else
mbed_official 330:c80ac197fa6a 1134 {
mbed_official 330:c80ac197fa6a 1135 /* Get timeout */
mbed_official 330:c80ac197fa6a 1136 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 1137
mbed_official 330:c80ac197fa6a 1138 /* Wait REOCF bit in SDADC_ISR register */
mbed_official 330:c80ac197fa6a 1139 while((hsdadc->Instance->ISR & SDADC_ISR_REOCF) != SDADC_ISR_REOCF)
mbed_official 330:c80ac197fa6a 1140 {
mbed_official 330:c80ac197fa6a 1141 /* Check the Timeout */
mbed_official 330:c80ac197fa6a 1142 if(Timeout != HAL_MAX_DELAY)
mbed_official 330:c80ac197fa6a 1143 {
mbed_official 330:c80ac197fa6a 1144 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
mbed_official 330:c80ac197fa6a 1145 {
mbed_official 330:c80ac197fa6a 1146 /* Return timeout status */
mbed_official 330:c80ac197fa6a 1147 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 1148 }
mbed_official 330:c80ac197fa6a 1149 }
mbed_official 330:c80ac197fa6a 1150 }
mbed_official 330:c80ac197fa6a 1151 /* Check if overrun occurs */
mbed_official 330:c80ac197fa6a 1152 if((hsdadc->Instance->ISR & SDADC_ISR_ROVRF) == SDADC_ISR_ROVRF)
mbed_official 330:c80ac197fa6a 1153 {
mbed_official 330:c80ac197fa6a 1154 /* Update error code and call error callback */
mbed_official 330:c80ac197fa6a 1155 hsdadc->ErrorCode = SDADC_ERROR_REGULAR_OVERRUN;
mbed_official 330:c80ac197fa6a 1156 HAL_SDADC_ErrorCallback(hsdadc);
mbed_official 330:c80ac197fa6a 1157
mbed_official 330:c80ac197fa6a 1158 /* Set CLRROVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 1159 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRROVRF;
mbed_official 330:c80ac197fa6a 1160 }
mbed_official 330:c80ac197fa6a 1161 /* Update SDADC state only if not continuous conversion and SW trigger */
mbed_official 330:c80ac197fa6a 1162 if((hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1163 (hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER))
mbed_official 330:c80ac197fa6a 1164 {
mbed_official 330:c80ac197fa6a 1165 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_REG) ? \
mbed_official 330:c80ac197fa6a 1166 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_INJ;
mbed_official 330:c80ac197fa6a 1167 }
mbed_official 330:c80ac197fa6a 1168 /* Return function status */
mbed_official 330:c80ac197fa6a 1169 return HAL_OK;
mbed_official 330:c80ac197fa6a 1170 }
mbed_official 330:c80ac197fa6a 1171 }
mbed_official 330:c80ac197fa6a 1172
mbed_official 330:c80ac197fa6a 1173 /**
mbed_official 330:c80ac197fa6a 1174 * @brief This function allows to stop regular conversion in polling mode.
mbed_official 330:c80ac197fa6a 1175 * @note This function should be called only if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1176 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1177 * @retval HAL status
mbed_official 330:c80ac197fa6a 1178 */
mbed_official 330:c80ac197fa6a 1179 HAL_StatusTypeDef HAL_SDADC_Stop(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1180 {
mbed_official 330:c80ac197fa6a 1181 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1182
mbed_official 330:c80ac197fa6a 1183 /* Check parameters */
mbed_official 330:c80ac197fa6a 1184 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1185
mbed_official 330:c80ac197fa6a 1186 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1187 if((hsdadc->State != HAL_SDADC_STATE_REG) && \
mbed_official 330:c80ac197fa6a 1188 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1189 {
mbed_official 330:c80ac197fa6a 1190 /* Return error status */
mbed_official 330:c80ac197fa6a 1191 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1192 }
mbed_official 330:c80ac197fa6a 1193 else
mbed_official 330:c80ac197fa6a 1194 {
mbed_official 330:c80ac197fa6a 1195 /* Stop regular conversion */
mbed_official 330:c80ac197fa6a 1196 status = SDADC_RegConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1197 }
mbed_official 330:c80ac197fa6a 1198 /* Return function status */
mbed_official 330:c80ac197fa6a 1199 return status;
mbed_official 330:c80ac197fa6a 1200 }
mbed_official 330:c80ac197fa6a 1201
mbed_official 330:c80ac197fa6a 1202 /**
mbed_official 330:c80ac197fa6a 1203 * @brief This function allows to start regular conversion in interrupt mode.
mbed_official 330:c80ac197fa6a 1204 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1205 * or if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1206 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1207 * @retval HAL status
mbed_official 330:c80ac197fa6a 1208 */
mbed_official 330:c80ac197fa6a 1209 HAL_StatusTypeDef HAL_SDADC_Start_IT(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1210 {
mbed_official 330:c80ac197fa6a 1211 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1212
mbed_official 330:c80ac197fa6a 1213 /* Check parameters */
mbed_official 330:c80ac197fa6a 1214 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1215
mbed_official 330:c80ac197fa6a 1216 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1217 if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1218 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 1219 {
mbed_official 330:c80ac197fa6a 1220 /* Set REOCIE and ROVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1221 hsdadc->Instance->CR1 |= (uint32_t) (SDADC_CR1_REOCIE | SDADC_CR1_ROVRIE);
mbed_official 330:c80ac197fa6a 1222
mbed_official 330:c80ac197fa6a 1223 /* Start regular conversion */
mbed_official 330:c80ac197fa6a 1224 status = SDADC_RegConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1225 }
mbed_official 330:c80ac197fa6a 1226 else
mbed_official 330:c80ac197fa6a 1227 {
mbed_official 330:c80ac197fa6a 1228 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1229 }
mbed_official 330:c80ac197fa6a 1230 /* Return function status */
mbed_official 330:c80ac197fa6a 1231 return status;
mbed_official 330:c80ac197fa6a 1232 }
mbed_official 330:c80ac197fa6a 1233
mbed_official 330:c80ac197fa6a 1234 /**
mbed_official 330:c80ac197fa6a 1235 * @brief This function allows to stop regular conversion in interrupt mode.
mbed_official 330:c80ac197fa6a 1236 * @note This function should be called only if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1237 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1238 * @retval HAL status
mbed_official 330:c80ac197fa6a 1239 */
mbed_official 330:c80ac197fa6a 1240 HAL_StatusTypeDef HAL_SDADC_Stop_IT(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1241 {
mbed_official 330:c80ac197fa6a 1242 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1243
mbed_official 330:c80ac197fa6a 1244 /* Check parameters */
mbed_official 330:c80ac197fa6a 1245 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1246
mbed_official 330:c80ac197fa6a 1247 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1248 if((hsdadc->State != HAL_SDADC_STATE_REG) && \
mbed_official 330:c80ac197fa6a 1249 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1250 {
mbed_official 330:c80ac197fa6a 1251 /* Return error status */
mbed_official 330:c80ac197fa6a 1252 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1253 }
mbed_official 330:c80ac197fa6a 1254 else
mbed_official 330:c80ac197fa6a 1255 {
mbed_official 330:c80ac197fa6a 1256 /* Clear REOCIE and ROVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1257 hsdadc->Instance->CR1 &= (uint32_t) ~(SDADC_CR1_REOCIE | SDADC_CR1_ROVRIE);
mbed_official 330:c80ac197fa6a 1258
mbed_official 330:c80ac197fa6a 1259 /* Stop regular conversion */
mbed_official 330:c80ac197fa6a 1260 status = SDADC_RegConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1261 }
mbed_official 330:c80ac197fa6a 1262 /* Return function status */
mbed_official 330:c80ac197fa6a 1263 return status;
mbed_official 330:c80ac197fa6a 1264 }
mbed_official 330:c80ac197fa6a 1265
mbed_official 330:c80ac197fa6a 1266 /**
mbed_official 330:c80ac197fa6a 1267 * @brief This function allows to start regular conversion in DMA mode.
mbed_official 330:c80ac197fa6a 1268 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1269 * or if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1270 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1271 * @param pData : The destination buffer address.
mbed_official 330:c80ac197fa6a 1272 * @param Length : The length of data to be transferred from SDADC peripheral to memory.
mbed_official 330:c80ac197fa6a 1273 * @retval HAL status
mbed_official 330:c80ac197fa6a 1274 */
mbed_official 330:c80ac197fa6a 1275 HAL_StatusTypeDef HAL_SDADC_Start_DMA(SDADC_HandleTypeDef *hsdadc, uint32_t *pData,
mbed_official 330:c80ac197fa6a 1276 uint32_t Length)
mbed_official 330:c80ac197fa6a 1277 {
mbed_official 330:c80ac197fa6a 1278 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1279
mbed_official 330:c80ac197fa6a 1280 /* Check parameters */
mbed_official 330:c80ac197fa6a 1281 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 634:ac7d6880524d 1282 assert_param(pData != HAL_NULL);
mbed_official 330:c80ac197fa6a 1283 assert_param(Length != 0);
mbed_official 330:c80ac197fa6a 1284
mbed_official 330:c80ac197fa6a 1285 /* Check that DMA is not enabled for injected conversion */
mbed_official 330:c80ac197fa6a 1286 if((hsdadc->Instance->CR1 & SDADC_CR1_JDMAEN) == SDADC_CR1_JDMAEN)
mbed_official 330:c80ac197fa6a 1287 {
mbed_official 330:c80ac197fa6a 1288 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1289 }
mbed_official 330:c80ac197fa6a 1290 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 1291 else if((hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1292 (hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1293 (hsdadc->hdma->Init.Mode == DMA_NORMAL) && \
mbed_official 330:c80ac197fa6a 1294 (Length != 1))
mbed_official 330:c80ac197fa6a 1295 {
mbed_official 330:c80ac197fa6a 1296 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1297 }
mbed_official 330:c80ac197fa6a 1298 else if((hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1299 (hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1300 (hsdadc->hdma->Init.Mode == DMA_CIRCULAR))
mbed_official 330:c80ac197fa6a 1301 {
mbed_official 330:c80ac197fa6a 1302 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1303 }
mbed_official 330:c80ac197fa6a 1304 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1305 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1306 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 1307 {
mbed_official 330:c80ac197fa6a 1308 /* Set callbacks on DMA handler */
mbed_official 330:c80ac197fa6a 1309 hsdadc->hdma->XferCpltCallback = SDADC_DMARegularConvCplt;
mbed_official 330:c80ac197fa6a 1310 hsdadc->hdma->XferErrorCallback = SDADC_DMAError;
mbed_official 330:c80ac197fa6a 1311 if(hsdadc->hdma->Init.Mode == DMA_CIRCULAR)
mbed_official 330:c80ac197fa6a 1312 {
mbed_official 330:c80ac197fa6a 1313 hsdadc->hdma->XferHalfCpltCallback = SDADC_DMARegularHalfConvCplt;
mbed_official 330:c80ac197fa6a 1314 }
mbed_official 330:c80ac197fa6a 1315
mbed_official 330:c80ac197fa6a 1316 /* Set RDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1317 hsdadc->Instance->CR1 |= SDADC_CR1_RDMAEN;
mbed_official 330:c80ac197fa6a 1318
mbed_official 330:c80ac197fa6a 1319 /* Start DMA in interrupt mode */
mbed_official 330:c80ac197fa6a 1320 if(HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->RDATAR, \
mbed_official 330:c80ac197fa6a 1321 (uint32_t) pData, Length) != HAL_OK)
mbed_official 330:c80ac197fa6a 1322 {
mbed_official 330:c80ac197fa6a 1323 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1324 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1325 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1326 }
mbed_official 330:c80ac197fa6a 1327 else
mbed_official 330:c80ac197fa6a 1328 {
mbed_official 330:c80ac197fa6a 1329 /* Start regular conversion */
mbed_official 330:c80ac197fa6a 1330 status = SDADC_RegConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1331 }
mbed_official 330:c80ac197fa6a 1332 }
mbed_official 330:c80ac197fa6a 1333 else
mbed_official 330:c80ac197fa6a 1334 {
mbed_official 330:c80ac197fa6a 1335 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1336 }
mbed_official 330:c80ac197fa6a 1337 /* Return function status */
mbed_official 330:c80ac197fa6a 1338 return status;
mbed_official 330:c80ac197fa6a 1339 }
mbed_official 330:c80ac197fa6a 1340
mbed_official 330:c80ac197fa6a 1341 /**
mbed_official 330:c80ac197fa6a 1342 * @brief This function allows to stop regular conversion in DMA mode.
mbed_official 330:c80ac197fa6a 1343 * @note This function should be called only if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1344 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1345 * @retval HAL status
mbed_official 330:c80ac197fa6a 1346 */
mbed_official 330:c80ac197fa6a 1347 HAL_StatusTypeDef HAL_SDADC_Stop_DMA(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1348 {
mbed_official 330:c80ac197fa6a 1349 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1350
mbed_official 330:c80ac197fa6a 1351 /* Check parameters */
mbed_official 330:c80ac197fa6a 1352 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1353
mbed_official 330:c80ac197fa6a 1354 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1355 if((hsdadc->State != HAL_SDADC_STATE_REG) && \
mbed_official 330:c80ac197fa6a 1356 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1357 {
mbed_official 330:c80ac197fa6a 1358 /* Return error status */
mbed_official 330:c80ac197fa6a 1359 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1360 }
mbed_official 330:c80ac197fa6a 1361 else
mbed_official 330:c80ac197fa6a 1362 {
mbed_official 330:c80ac197fa6a 1363 /* Clear RDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1364 hsdadc->Instance->CR1 &= ~(SDADC_CR1_RDMAEN);
mbed_official 330:c80ac197fa6a 1365
mbed_official 330:c80ac197fa6a 1366 /* Stop current DMA transfer */
mbed_official 330:c80ac197fa6a 1367 if(HAL_DMA_Abort(hsdadc->hdma) != HAL_OK)
mbed_official 330:c80ac197fa6a 1368 {
mbed_official 330:c80ac197fa6a 1369 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1370 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1371 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1372 }
mbed_official 330:c80ac197fa6a 1373 else
mbed_official 330:c80ac197fa6a 1374 {
mbed_official 330:c80ac197fa6a 1375 /* Stop regular conversion */
mbed_official 330:c80ac197fa6a 1376 status = SDADC_RegConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1377 }
mbed_official 330:c80ac197fa6a 1378 }
mbed_official 330:c80ac197fa6a 1379 /* Return function status */
mbed_official 330:c80ac197fa6a 1380 return status;
mbed_official 330:c80ac197fa6a 1381 }
mbed_official 330:c80ac197fa6a 1382
mbed_official 330:c80ac197fa6a 1383 /**
mbed_official 330:c80ac197fa6a 1384 * @brief This function allows to get regular conversion value.
mbed_official 330:c80ac197fa6a 1385 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1386 * @retval Regular conversion value
mbed_official 330:c80ac197fa6a 1387 */
mbed_official 330:c80ac197fa6a 1388 uint32_t HAL_SDADC_GetValue(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1389 {
mbed_official 330:c80ac197fa6a 1390 /* Check parameters */
mbed_official 330:c80ac197fa6a 1391 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1392
mbed_official 330:c80ac197fa6a 1393 /* Return regular conversion value */
mbed_official 330:c80ac197fa6a 1394 return hsdadc->Instance->RDATAR;
mbed_official 330:c80ac197fa6a 1395 }
mbed_official 330:c80ac197fa6a 1396
mbed_official 330:c80ac197fa6a 1397 /**
mbed_official 330:c80ac197fa6a 1398 * @brief This function allows to start injected conversion in polling mode.
mbed_official 330:c80ac197fa6a 1399 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1400 * or if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1401 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1402 * @retval HAL status
mbed_official 330:c80ac197fa6a 1403 */
mbed_official 330:c80ac197fa6a 1404 HAL_StatusTypeDef HAL_SDADC_InjectedStart(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1405 {
mbed_official 330:c80ac197fa6a 1406 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1407
mbed_official 330:c80ac197fa6a 1408 /* Check parameters */
mbed_official 330:c80ac197fa6a 1409 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1410
mbed_official 330:c80ac197fa6a 1411 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1412 if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1413 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 1414 {
mbed_official 330:c80ac197fa6a 1415 /* Start injected conversion */
mbed_official 330:c80ac197fa6a 1416 status = SDADC_InjConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1417 }
mbed_official 330:c80ac197fa6a 1418 else
mbed_official 330:c80ac197fa6a 1419 {
mbed_official 330:c80ac197fa6a 1420 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1421 }
mbed_official 330:c80ac197fa6a 1422 /* Return function status */
mbed_official 330:c80ac197fa6a 1423 return status;
mbed_official 330:c80ac197fa6a 1424 }
mbed_official 330:c80ac197fa6a 1425
mbed_official 330:c80ac197fa6a 1426 /**
mbed_official 330:c80ac197fa6a 1427 * @brief This function allows to poll for the end of injected conversion.
mbed_official 330:c80ac197fa6a 1428 * @note This function should be called only if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1429 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1430 * @param Timeout : Timeout value in milliseconds.
mbed_official 330:c80ac197fa6a 1431 * @retval HAL status
mbed_official 330:c80ac197fa6a 1432 */
mbed_official 330:c80ac197fa6a 1433 HAL_StatusTypeDef HAL_SDADC_PollForInjectedConversion(SDADC_HandleTypeDef* hsdadc,
mbed_official 330:c80ac197fa6a 1434 uint32_t Timeout)
mbed_official 330:c80ac197fa6a 1435 {
mbed_official 330:c80ac197fa6a 1436 uint32_t tickstart;
mbed_official 330:c80ac197fa6a 1437
mbed_official 330:c80ac197fa6a 1438 /* Check parameters */
mbed_official 330:c80ac197fa6a 1439 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1440
mbed_official 330:c80ac197fa6a 1441 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1442 if((hsdadc->State != HAL_SDADC_STATE_INJ) && \
mbed_official 330:c80ac197fa6a 1443 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1444 {
mbed_official 330:c80ac197fa6a 1445 /* Return error status */
mbed_official 330:c80ac197fa6a 1446 return HAL_ERROR;
mbed_official 330:c80ac197fa6a 1447 }
mbed_official 330:c80ac197fa6a 1448 else
mbed_official 330:c80ac197fa6a 1449 {
mbed_official 330:c80ac197fa6a 1450 /* Get timeout */
mbed_official 330:c80ac197fa6a 1451 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 1452
mbed_official 330:c80ac197fa6a 1453 /* Wait JEOCF bit in SDADC_ISR register */
mbed_official 330:c80ac197fa6a 1454 while((hsdadc->Instance->ISR & SDADC_ISR_JEOCF) != SDADC_ISR_JEOCF)
mbed_official 330:c80ac197fa6a 1455 {
mbed_official 330:c80ac197fa6a 1456 /* Check the Timeout */
mbed_official 330:c80ac197fa6a 1457 if(Timeout != HAL_MAX_DELAY)
mbed_official 330:c80ac197fa6a 1458 {
mbed_official 330:c80ac197fa6a 1459 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
mbed_official 330:c80ac197fa6a 1460 {
mbed_official 330:c80ac197fa6a 1461 /* Return timeout status */
mbed_official 330:c80ac197fa6a 1462 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 1463 }
mbed_official 330:c80ac197fa6a 1464 }
mbed_official 330:c80ac197fa6a 1465 }
mbed_official 330:c80ac197fa6a 1466 /* Check if overrun occurs */
mbed_official 330:c80ac197fa6a 1467 if((hsdadc->Instance->ISR & SDADC_ISR_JOVRF) == SDADC_ISR_JOVRF)
mbed_official 330:c80ac197fa6a 1468 {
mbed_official 330:c80ac197fa6a 1469 /* Update error code and call error callback */
mbed_official 330:c80ac197fa6a 1470 hsdadc->ErrorCode = SDADC_ERROR_INJECTED_OVERRUN;
mbed_official 330:c80ac197fa6a 1471 HAL_SDADC_ErrorCallback(hsdadc);
mbed_official 330:c80ac197fa6a 1472
mbed_official 330:c80ac197fa6a 1473 /* Set CLRJOVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 1474 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRJOVRF;
mbed_official 330:c80ac197fa6a 1475 }
mbed_official 330:c80ac197fa6a 1476 /* Update remaining injected conversions */
mbed_official 330:c80ac197fa6a 1477 hsdadc->InjConvRemaining--;
mbed_official 330:c80ac197fa6a 1478 if(hsdadc->InjConvRemaining == 0)
mbed_official 330:c80ac197fa6a 1479 {
mbed_official 330:c80ac197fa6a 1480 /* end of injected sequence, reset the value */
mbed_official 330:c80ac197fa6a 1481 hsdadc->InjConvRemaining = hsdadc->InjectedChannelsNbr;
mbed_official 330:c80ac197fa6a 1482 }
mbed_official 330:c80ac197fa6a 1483
mbed_official 330:c80ac197fa6a 1484 /* Update SDADC state only if not continuous conversion, SW trigger */
mbed_official 330:c80ac197fa6a 1485 /* and end of injected sequence */
mbed_official 330:c80ac197fa6a 1486 if((hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1487 (hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1488 (hsdadc->InjConvRemaining == hsdadc->InjectedChannelsNbr))
mbed_official 330:c80ac197fa6a 1489 {
mbed_official 330:c80ac197fa6a 1490 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_INJ) ? \
mbed_official 330:c80ac197fa6a 1491 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_REG;
mbed_official 330:c80ac197fa6a 1492 }
mbed_official 330:c80ac197fa6a 1493 /* Return function status */
mbed_official 330:c80ac197fa6a 1494 return HAL_OK;
mbed_official 330:c80ac197fa6a 1495 }
mbed_official 330:c80ac197fa6a 1496 }
mbed_official 330:c80ac197fa6a 1497
mbed_official 330:c80ac197fa6a 1498 /**
mbed_official 330:c80ac197fa6a 1499 * @brief This function allows to stop injected conversion in polling mode.
mbed_official 330:c80ac197fa6a 1500 * @note This function should be called only if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1501 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1502 * @retval HAL status
mbed_official 330:c80ac197fa6a 1503 */
mbed_official 330:c80ac197fa6a 1504 HAL_StatusTypeDef HAL_SDADC_InjectedStop(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1505 {
mbed_official 330:c80ac197fa6a 1506 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1507
mbed_official 330:c80ac197fa6a 1508 /* Check parameters */
mbed_official 330:c80ac197fa6a 1509 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1510
mbed_official 330:c80ac197fa6a 1511 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1512 if((hsdadc->State != HAL_SDADC_STATE_INJ) && \
mbed_official 330:c80ac197fa6a 1513 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1514 {
mbed_official 330:c80ac197fa6a 1515 /* Return error status */
mbed_official 330:c80ac197fa6a 1516 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1517 }
mbed_official 330:c80ac197fa6a 1518 else
mbed_official 330:c80ac197fa6a 1519 {
mbed_official 330:c80ac197fa6a 1520 /* Stop injected conversion */
mbed_official 330:c80ac197fa6a 1521 status = SDADC_InjConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1522 }
mbed_official 330:c80ac197fa6a 1523 /* Return function status */
mbed_official 330:c80ac197fa6a 1524 return status;
mbed_official 330:c80ac197fa6a 1525 }
mbed_official 330:c80ac197fa6a 1526
mbed_official 330:c80ac197fa6a 1527 /**
mbed_official 330:c80ac197fa6a 1528 * @brief This function allows to start injected conversion in interrupt mode.
mbed_official 330:c80ac197fa6a 1529 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1530 * or if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1531 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1532 * @retval HAL status
mbed_official 330:c80ac197fa6a 1533 */
mbed_official 330:c80ac197fa6a 1534 HAL_StatusTypeDef HAL_SDADC_InjectedStart_IT(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1535 {
mbed_official 330:c80ac197fa6a 1536 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1537
mbed_official 330:c80ac197fa6a 1538 /* Check parameters */
mbed_official 330:c80ac197fa6a 1539 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1540
mbed_official 330:c80ac197fa6a 1541 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1542 if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1543 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 1544 {
mbed_official 330:c80ac197fa6a 1545 /* Set JEOCIE and JOVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1546 hsdadc->Instance->CR1 |= (uint32_t) (SDADC_CR1_JEOCIE | SDADC_CR1_JOVRIE);
mbed_official 330:c80ac197fa6a 1547
mbed_official 330:c80ac197fa6a 1548 /* Start injected conversion */
mbed_official 330:c80ac197fa6a 1549 status = SDADC_InjConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1550 }
mbed_official 330:c80ac197fa6a 1551 else
mbed_official 330:c80ac197fa6a 1552 {
mbed_official 330:c80ac197fa6a 1553 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1554 }
mbed_official 330:c80ac197fa6a 1555 /* Return function status */
mbed_official 330:c80ac197fa6a 1556 return status;
mbed_official 330:c80ac197fa6a 1557 }
mbed_official 330:c80ac197fa6a 1558
mbed_official 330:c80ac197fa6a 1559 /**
mbed_official 330:c80ac197fa6a 1560 * @brief This function allows to stop injected conversion in interrupt mode.
mbed_official 330:c80ac197fa6a 1561 * @note This function should be called only if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1562 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1563 * @retval HAL status
mbed_official 330:c80ac197fa6a 1564 */
mbed_official 330:c80ac197fa6a 1565 HAL_StatusTypeDef HAL_SDADC_InjectedStop_IT(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1566 {
mbed_official 330:c80ac197fa6a 1567 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1568
mbed_official 330:c80ac197fa6a 1569 /* Check parameters */
mbed_official 330:c80ac197fa6a 1570 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1571
mbed_official 330:c80ac197fa6a 1572 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1573 if((hsdadc->State != HAL_SDADC_STATE_INJ) && \
mbed_official 330:c80ac197fa6a 1574 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1575 {
mbed_official 330:c80ac197fa6a 1576 /* Return error status */
mbed_official 330:c80ac197fa6a 1577 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1578 }
mbed_official 330:c80ac197fa6a 1579 else
mbed_official 330:c80ac197fa6a 1580 {
mbed_official 330:c80ac197fa6a 1581 /* Clear JEOCIE and JOVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1582 hsdadc->Instance->CR1 &= (uint32_t) ~(SDADC_CR1_JEOCIE | SDADC_CR1_JOVRIE);
mbed_official 330:c80ac197fa6a 1583
mbed_official 330:c80ac197fa6a 1584 /* Stop injected conversion */
mbed_official 330:c80ac197fa6a 1585 status = SDADC_InjConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1586 }
mbed_official 330:c80ac197fa6a 1587 /* Return function status */
mbed_official 330:c80ac197fa6a 1588 return status;
mbed_official 330:c80ac197fa6a 1589 }
mbed_official 330:c80ac197fa6a 1590
mbed_official 330:c80ac197fa6a 1591 /**
mbed_official 330:c80ac197fa6a 1592 * @brief This function allows to start injected conversion in DMA mode.
mbed_official 330:c80ac197fa6a 1593 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1594 * or if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1595 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1596 * @param pData : The destination buffer address.
mbed_official 330:c80ac197fa6a 1597 * @param Length : The length of data to be transferred from SDADC peripheral to memory.
mbed_official 330:c80ac197fa6a 1598 * @retval HAL status
mbed_official 330:c80ac197fa6a 1599 */
mbed_official 330:c80ac197fa6a 1600 HAL_StatusTypeDef HAL_SDADC_InjectedStart_DMA(SDADC_HandleTypeDef *hsdadc, uint32_t *pData,
mbed_official 330:c80ac197fa6a 1601 uint32_t Length)
mbed_official 330:c80ac197fa6a 1602 {
mbed_official 330:c80ac197fa6a 1603 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1604
mbed_official 330:c80ac197fa6a 1605 /* Check parameters */
mbed_official 330:c80ac197fa6a 1606 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 634:ac7d6880524d 1607 assert_param(pData != HAL_NULL);
mbed_official 330:c80ac197fa6a 1608 assert_param(Length != 0);
mbed_official 330:c80ac197fa6a 1609
mbed_official 330:c80ac197fa6a 1610 /* Check that DMA is not enabled for regular conversion */
mbed_official 330:c80ac197fa6a 1611 if((hsdadc->Instance->CR1 & SDADC_CR1_RDMAEN) == SDADC_CR1_RDMAEN)
mbed_official 330:c80ac197fa6a 1612 {
mbed_official 330:c80ac197fa6a 1613 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1614 }
mbed_official 330:c80ac197fa6a 1615 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 1616 else if((hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1617 (hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1618 (hsdadc->hdma->Init.Mode == DMA_NORMAL) && \
mbed_official 330:c80ac197fa6a 1619 (Length > hsdadc->InjectedChannelsNbr))
mbed_official 330:c80ac197fa6a 1620 {
mbed_official 330:c80ac197fa6a 1621 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1622 }
mbed_official 330:c80ac197fa6a 1623 else if((hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1624 (hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1625 (hsdadc->hdma->Init.Mode == DMA_CIRCULAR))
mbed_official 330:c80ac197fa6a 1626 {
mbed_official 330:c80ac197fa6a 1627 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1628 }
mbed_official 330:c80ac197fa6a 1629 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1630 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1631 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 1632 {
mbed_official 330:c80ac197fa6a 1633 /* Set callbacks on DMA handler */
mbed_official 330:c80ac197fa6a 1634 hsdadc->hdma->XferCpltCallback = SDADC_DMAInjectedConvCplt;
mbed_official 330:c80ac197fa6a 1635 hsdadc->hdma->XferErrorCallback = SDADC_DMAError;
mbed_official 330:c80ac197fa6a 1636 if(hsdadc->hdma->Init.Mode == DMA_CIRCULAR)
mbed_official 330:c80ac197fa6a 1637 {
mbed_official 330:c80ac197fa6a 1638 hsdadc->hdma->XferHalfCpltCallback = SDADC_DMAInjectedHalfConvCplt;
mbed_official 330:c80ac197fa6a 1639 }
mbed_official 330:c80ac197fa6a 1640
mbed_official 330:c80ac197fa6a 1641 /* Set JDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1642 hsdadc->Instance->CR1 |= SDADC_CR1_JDMAEN;
mbed_official 330:c80ac197fa6a 1643
mbed_official 330:c80ac197fa6a 1644 /* Start DMA in interrupt mode */
mbed_official 330:c80ac197fa6a 1645 if(HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->JDATAR, \
mbed_official 330:c80ac197fa6a 1646 (uint32_t) pData, Length) != HAL_OK)
mbed_official 330:c80ac197fa6a 1647 {
mbed_official 330:c80ac197fa6a 1648 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1649 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1650 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1651 }
mbed_official 330:c80ac197fa6a 1652 else
mbed_official 330:c80ac197fa6a 1653 {
mbed_official 330:c80ac197fa6a 1654 /* Start injected conversion */
mbed_official 330:c80ac197fa6a 1655 status = SDADC_InjConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1656 }
mbed_official 330:c80ac197fa6a 1657 }
mbed_official 330:c80ac197fa6a 1658 else
mbed_official 330:c80ac197fa6a 1659 {
mbed_official 330:c80ac197fa6a 1660 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1661 }
mbed_official 330:c80ac197fa6a 1662 /* Return function status */
mbed_official 330:c80ac197fa6a 1663 return status;
mbed_official 330:c80ac197fa6a 1664 }
mbed_official 330:c80ac197fa6a 1665
mbed_official 330:c80ac197fa6a 1666 /**
mbed_official 330:c80ac197fa6a 1667 * @brief This function allows to stop injected conversion in DMA mode.
mbed_official 330:c80ac197fa6a 1668 * @note This function should be called only if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1669 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1670 * @retval HAL status
mbed_official 330:c80ac197fa6a 1671 */
mbed_official 330:c80ac197fa6a 1672 HAL_StatusTypeDef HAL_SDADC_InjectedStop_DMA(SDADC_HandleTypeDef *hsdadc)
mbed_official 330:c80ac197fa6a 1673 {
mbed_official 330:c80ac197fa6a 1674 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1675
mbed_official 330:c80ac197fa6a 1676 /* Check parameters */
mbed_official 330:c80ac197fa6a 1677 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1678
mbed_official 330:c80ac197fa6a 1679 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1680 if((hsdadc->State != HAL_SDADC_STATE_INJ) && \
mbed_official 330:c80ac197fa6a 1681 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1682 {
mbed_official 330:c80ac197fa6a 1683 /* Return error status */
mbed_official 330:c80ac197fa6a 1684 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1685 }
mbed_official 330:c80ac197fa6a 1686 else
mbed_official 330:c80ac197fa6a 1687 {
mbed_official 330:c80ac197fa6a 1688 /* Clear JDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1689 hsdadc->Instance->CR1 &= ~(SDADC_CR1_JDMAEN);
mbed_official 330:c80ac197fa6a 1690
mbed_official 330:c80ac197fa6a 1691 /* Stop current DMA transfer */
mbed_official 330:c80ac197fa6a 1692 if(HAL_DMA_Abort(hsdadc->hdma) != HAL_OK)
mbed_official 330:c80ac197fa6a 1693 {
mbed_official 330:c80ac197fa6a 1694 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1695 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1696 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1697 }
mbed_official 330:c80ac197fa6a 1698 else
mbed_official 330:c80ac197fa6a 1699 {
mbed_official 330:c80ac197fa6a 1700 /* Stop injected conversion */
mbed_official 330:c80ac197fa6a 1701 status = SDADC_InjConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1702 }
mbed_official 330:c80ac197fa6a 1703 }
mbed_official 330:c80ac197fa6a 1704 /* Return function status */
mbed_official 330:c80ac197fa6a 1705 return status;
mbed_official 330:c80ac197fa6a 1706 }
mbed_official 330:c80ac197fa6a 1707
mbed_official 330:c80ac197fa6a 1708 /**
mbed_official 330:c80ac197fa6a 1709 * @brief This function allows to get injected conversion value.
mbed_official 330:c80ac197fa6a 1710 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1711 * @param Channel : Corresponding channel of injected conversion.
mbed_official 330:c80ac197fa6a 1712 * @retval Injected conversion value
mbed_official 330:c80ac197fa6a 1713 */
mbed_official 330:c80ac197fa6a 1714 uint32_t HAL_SDADC_InjectedGetValue(SDADC_HandleTypeDef *hsdadc, uint32_t* Channel)
mbed_official 330:c80ac197fa6a 1715 {
mbed_official 330:c80ac197fa6a 1716 uint32_t value = 0;
mbed_official 330:c80ac197fa6a 1717
mbed_official 330:c80ac197fa6a 1718 /* Check parameters */
mbed_official 330:c80ac197fa6a 1719 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 634:ac7d6880524d 1720 assert_param(Channel != HAL_NULL);
mbed_official 330:c80ac197fa6a 1721
mbed_official 330:c80ac197fa6a 1722 /* Read SDADC_JDATAR register and extract channel and conversion value */
mbed_official 330:c80ac197fa6a 1723 value = hsdadc->Instance->JDATAR;
mbed_official 330:c80ac197fa6a 1724 *Channel = ((value & SDADC_JDATAR_JDATACH) >> SDADC_JDATAR_CH_OFFSET);
mbed_official 330:c80ac197fa6a 1725 value &= SDADC_JDATAR_JDATA;
mbed_official 330:c80ac197fa6a 1726
mbed_official 330:c80ac197fa6a 1727 /* Return injected conversion value */
mbed_official 330:c80ac197fa6a 1728 return value;
mbed_official 330:c80ac197fa6a 1729 }
mbed_official 330:c80ac197fa6a 1730
mbed_official 330:c80ac197fa6a 1731 /**
mbed_official 330:c80ac197fa6a 1732 * @brief This function allows to start multimode regular conversions in DMA mode.
mbed_official 330:c80ac197fa6a 1733 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1734 * or if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1735 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1736 * @param pData : The destination buffer address.
mbed_official 330:c80ac197fa6a 1737 * @param Length : The length of data to be transferred from SDADC peripheral to memory.
mbed_official 330:c80ac197fa6a 1738 * @retval HAL status
mbed_official 330:c80ac197fa6a 1739 */
mbed_official 330:c80ac197fa6a 1740 HAL_StatusTypeDef HAL_SDADC_MultiModeStart_DMA(SDADC_HandleTypeDef* hsdadc, uint32_t* pData,
mbed_official 330:c80ac197fa6a 1741 uint32_t Length)
mbed_official 330:c80ac197fa6a 1742 {
mbed_official 330:c80ac197fa6a 1743 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1744
mbed_official 330:c80ac197fa6a 1745 /* Check parameters */
mbed_official 330:c80ac197fa6a 1746 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 634:ac7d6880524d 1747 assert_param(pData != HAL_NULL);
mbed_official 330:c80ac197fa6a 1748 assert_param(Length != 0);
mbed_official 330:c80ac197fa6a 1749
mbed_official 330:c80ac197fa6a 1750 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 1751 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 1752 {
mbed_official 330:c80ac197fa6a 1753 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1754 }
mbed_official 330:c80ac197fa6a 1755 /* Check that DMA is not enabled for injected conversion */
mbed_official 330:c80ac197fa6a 1756 else if((hsdadc->Instance->CR1 & SDADC_CR1_JDMAEN) == SDADC_CR1_JDMAEN)
mbed_official 330:c80ac197fa6a 1757 {
mbed_official 330:c80ac197fa6a 1758 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1759 }
mbed_official 330:c80ac197fa6a 1760 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 1761 else if((hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1762 (hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1763 (hsdadc->hdma->Init.Mode == DMA_NORMAL) && \
mbed_official 330:c80ac197fa6a 1764 (Length != 1))
mbed_official 330:c80ac197fa6a 1765 {
mbed_official 330:c80ac197fa6a 1766 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1767 }
mbed_official 330:c80ac197fa6a 1768 else if((hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1769 (hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1770 (hsdadc->hdma->Init.Mode == DMA_CIRCULAR))
mbed_official 330:c80ac197fa6a 1771 {
mbed_official 330:c80ac197fa6a 1772 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1773 }
mbed_official 330:c80ac197fa6a 1774 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1775 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1776 (hsdadc->State == HAL_SDADC_STATE_INJ))
mbed_official 330:c80ac197fa6a 1777 {
mbed_official 330:c80ac197fa6a 1778 /* Set callbacks on DMA handler */
mbed_official 330:c80ac197fa6a 1779 hsdadc->hdma->XferCpltCallback = SDADC_DMARegularConvCplt;
mbed_official 330:c80ac197fa6a 1780 hsdadc->hdma->XferErrorCallback = SDADC_DMAError;
mbed_official 330:c80ac197fa6a 1781 if(hsdadc->hdma->Init.Mode == DMA_CIRCULAR)
mbed_official 330:c80ac197fa6a 1782 {
mbed_official 330:c80ac197fa6a 1783 hsdadc->hdma->XferHalfCpltCallback = SDADC_DMARegularHalfConvCplt;
mbed_official 330:c80ac197fa6a 1784 }
mbed_official 330:c80ac197fa6a 1785 /* Set RDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1786 hsdadc->Instance->CR1 |= SDADC_CR1_RDMAEN;
mbed_official 330:c80ac197fa6a 1787
mbed_official 330:c80ac197fa6a 1788 /* Start DMA in interrupt mode */
mbed_official 330:c80ac197fa6a 1789 if(hsdadc->RegularMultimode == SDADC_MULTIMODE_SDADC1_SDADC2)
mbed_official 330:c80ac197fa6a 1790 {
mbed_official 330:c80ac197fa6a 1791 status = HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->RDATA12R, \
mbed_official 330:c80ac197fa6a 1792 (uint32_t) pData, Length);
mbed_official 330:c80ac197fa6a 1793 }
mbed_official 330:c80ac197fa6a 1794 else
mbed_official 330:c80ac197fa6a 1795 {
mbed_official 330:c80ac197fa6a 1796 status = HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->RDATA13R, \
mbed_official 330:c80ac197fa6a 1797 (uint32_t) pData, Length);
mbed_official 330:c80ac197fa6a 1798 }
mbed_official 330:c80ac197fa6a 1799 if(status != HAL_OK)
mbed_official 330:c80ac197fa6a 1800 {
mbed_official 330:c80ac197fa6a 1801 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1802 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1803 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1804 }
mbed_official 330:c80ac197fa6a 1805 else
mbed_official 330:c80ac197fa6a 1806 {
mbed_official 330:c80ac197fa6a 1807 /* Start regular conversion */
mbed_official 330:c80ac197fa6a 1808 status = SDADC_RegConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1809 }
mbed_official 330:c80ac197fa6a 1810 }
mbed_official 330:c80ac197fa6a 1811 else
mbed_official 330:c80ac197fa6a 1812 {
mbed_official 330:c80ac197fa6a 1813 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1814 }
mbed_official 330:c80ac197fa6a 1815 /* Return function status */
mbed_official 330:c80ac197fa6a 1816 return status;
mbed_official 330:c80ac197fa6a 1817 }
mbed_official 330:c80ac197fa6a 1818
mbed_official 330:c80ac197fa6a 1819 /**
mbed_official 330:c80ac197fa6a 1820 * @brief This function allows to stop multimode regular conversions in DMA mode.
mbed_official 330:c80ac197fa6a 1821 * @note This function should be called only if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1822 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1823 * @retval HAL status
mbed_official 330:c80ac197fa6a 1824 */
mbed_official 330:c80ac197fa6a 1825 HAL_StatusTypeDef HAL_SDADC_MultiModeStop_DMA(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 1826 {
mbed_official 330:c80ac197fa6a 1827 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1828
mbed_official 330:c80ac197fa6a 1829 /* Check parameters */
mbed_official 330:c80ac197fa6a 1830 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1831
mbed_official 330:c80ac197fa6a 1832 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 1833 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 1834 {
mbed_official 330:c80ac197fa6a 1835 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1836 }
mbed_official 330:c80ac197fa6a 1837 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1838 else if((hsdadc->State != HAL_SDADC_STATE_REG) && \
mbed_official 330:c80ac197fa6a 1839 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1840 {
mbed_official 330:c80ac197fa6a 1841 /* Return error status */
mbed_official 330:c80ac197fa6a 1842 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1843 }
mbed_official 330:c80ac197fa6a 1844 else
mbed_official 330:c80ac197fa6a 1845 {
mbed_official 330:c80ac197fa6a 1846 /* Clear RDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1847 hsdadc->Instance->CR1 &= ~(SDADC_CR1_RDMAEN);
mbed_official 330:c80ac197fa6a 1848
mbed_official 330:c80ac197fa6a 1849 /* Stop current DMA transfer */
mbed_official 330:c80ac197fa6a 1850 if(HAL_DMA_Abort(hsdadc->hdma) != HAL_OK)
mbed_official 330:c80ac197fa6a 1851 {
mbed_official 330:c80ac197fa6a 1852 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1853 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1854 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1855 }
mbed_official 330:c80ac197fa6a 1856 else
mbed_official 330:c80ac197fa6a 1857 {
mbed_official 330:c80ac197fa6a 1858 /* Stop regular conversion */
mbed_official 330:c80ac197fa6a 1859 status = SDADC_RegConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 1860 }
mbed_official 330:c80ac197fa6a 1861 }
mbed_official 330:c80ac197fa6a 1862 /* Return function status */
mbed_official 330:c80ac197fa6a 1863 return status;
mbed_official 330:c80ac197fa6a 1864 }
mbed_official 330:c80ac197fa6a 1865
mbed_official 330:c80ac197fa6a 1866 /**
mbed_official 330:c80ac197fa6a 1867 * @brief This function allows to get multimode regular conversion value.
mbed_official 330:c80ac197fa6a 1868 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1869 * @retval Multimode regular conversion value
mbed_official 330:c80ac197fa6a 1870 */
mbed_official 330:c80ac197fa6a 1871 uint32_t HAL_SDADC_MultiModeGetValue(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 1872 {
mbed_official 330:c80ac197fa6a 1873 uint32_t value = 0;
mbed_official 330:c80ac197fa6a 1874
mbed_official 330:c80ac197fa6a 1875 /* Check parameters and check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 1876 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1877 assert_param(hsdadc->Instance == SDADC1);
mbed_official 330:c80ac197fa6a 1878
mbed_official 330:c80ac197fa6a 1879 /* read multimode regular value */
mbed_official 330:c80ac197fa6a 1880 value = (hsdadc->RegularMultimode == SDADC_MULTIMODE_SDADC1_SDADC2) ? \
mbed_official 330:c80ac197fa6a 1881 hsdadc->Instance->RDATA12R : hsdadc->Instance->RDATA13R;
mbed_official 330:c80ac197fa6a 1882
mbed_official 330:c80ac197fa6a 1883 /* Return multimode regular conversions value */
mbed_official 330:c80ac197fa6a 1884 return value;
mbed_official 330:c80ac197fa6a 1885 }
mbed_official 330:c80ac197fa6a 1886
mbed_official 330:c80ac197fa6a 1887 /**
mbed_official 330:c80ac197fa6a 1888 * @brief This function allows to start multimode injected conversions in DMA mode.
mbed_official 330:c80ac197fa6a 1889 * @note This function should be called only when SDADC instance is in idle state
mbed_official 330:c80ac197fa6a 1890 * or if regular conversion is ongoing.
mbed_official 330:c80ac197fa6a 1891 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1892 * @param pData : The destination buffer address.
mbed_official 330:c80ac197fa6a 1893 * @param Length : The length of data to be transferred from SDADC peripheral to memory.
mbed_official 330:c80ac197fa6a 1894 * @retval HAL status
mbed_official 330:c80ac197fa6a 1895 */
mbed_official 330:c80ac197fa6a 1896 HAL_StatusTypeDef HAL_SDADC_InjectedMultiModeStart_DMA(SDADC_HandleTypeDef* hsdadc,
mbed_official 330:c80ac197fa6a 1897 uint32_t* pData, uint32_t Length)
mbed_official 330:c80ac197fa6a 1898 {
mbed_official 330:c80ac197fa6a 1899 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1900
mbed_official 330:c80ac197fa6a 1901 /* Check parameters */
mbed_official 330:c80ac197fa6a 1902 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 634:ac7d6880524d 1903 assert_param(pData != HAL_NULL);
mbed_official 330:c80ac197fa6a 1904 assert_param(Length != 0);
mbed_official 330:c80ac197fa6a 1905
mbed_official 330:c80ac197fa6a 1906 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 1907 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 1908 {
mbed_official 330:c80ac197fa6a 1909 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1910 }
mbed_official 330:c80ac197fa6a 1911 /* Check that DMA is not enabled for regular conversion */
mbed_official 330:c80ac197fa6a 1912 else if((hsdadc->Instance->CR1 & SDADC_CR1_RDMAEN) == SDADC_CR1_RDMAEN)
mbed_official 330:c80ac197fa6a 1913 {
mbed_official 330:c80ac197fa6a 1914 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1915 }
mbed_official 330:c80ac197fa6a 1916 /* Check parameters compatibility */
mbed_official 330:c80ac197fa6a 1917 else if((hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1918 (hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1919 (hsdadc->hdma->Init.Mode == DMA_NORMAL) && \
mbed_official 330:c80ac197fa6a 1920 (Length > (hsdadc->InjectedChannelsNbr << 1)))
mbed_official 330:c80ac197fa6a 1921 {
mbed_official 330:c80ac197fa6a 1922 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1923 }
mbed_official 330:c80ac197fa6a 1924 else if((hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 1925 (hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 1926 (hsdadc->hdma->Init.Mode == DMA_CIRCULAR))
mbed_official 330:c80ac197fa6a 1927 {
mbed_official 330:c80ac197fa6a 1928 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1929 }
mbed_official 330:c80ac197fa6a 1930 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1931 else if((hsdadc->State == HAL_SDADC_STATE_READY) || \
mbed_official 330:c80ac197fa6a 1932 (hsdadc->State == HAL_SDADC_STATE_REG))
mbed_official 330:c80ac197fa6a 1933 {
mbed_official 330:c80ac197fa6a 1934 /* Set callbacks on DMA handler */
mbed_official 330:c80ac197fa6a 1935 hsdadc->hdma->XferCpltCallback = SDADC_DMAInjectedConvCplt;
mbed_official 330:c80ac197fa6a 1936 hsdadc->hdma->XferErrorCallback = SDADC_DMAError;
mbed_official 330:c80ac197fa6a 1937 if(hsdadc->hdma->Init.Mode == DMA_CIRCULAR)
mbed_official 330:c80ac197fa6a 1938 {
mbed_official 330:c80ac197fa6a 1939 hsdadc->hdma->XferHalfCpltCallback = SDADC_DMAInjectedHalfConvCplt;
mbed_official 330:c80ac197fa6a 1940 }
mbed_official 330:c80ac197fa6a 1941 /* Set JDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 1942 hsdadc->Instance->CR1 |= SDADC_CR1_JDMAEN;
mbed_official 330:c80ac197fa6a 1943
mbed_official 330:c80ac197fa6a 1944 /* Start DMA in interrupt mode */
mbed_official 330:c80ac197fa6a 1945 if(hsdadc->InjectedMultimode == SDADC_MULTIMODE_SDADC1_SDADC2)
mbed_official 330:c80ac197fa6a 1946 {
mbed_official 330:c80ac197fa6a 1947 status = HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->JDATA12R, \
mbed_official 330:c80ac197fa6a 1948 (uint32_t) pData, Length);
mbed_official 330:c80ac197fa6a 1949 }
mbed_official 330:c80ac197fa6a 1950 else
mbed_official 330:c80ac197fa6a 1951 {
mbed_official 330:c80ac197fa6a 1952 status = HAL_DMA_Start_IT(hsdadc->hdma, (uint32_t)&hsdadc->Instance->JDATA13R, \
mbed_official 330:c80ac197fa6a 1953 (uint32_t) pData, Length);
mbed_official 330:c80ac197fa6a 1954 }
mbed_official 330:c80ac197fa6a 1955 if(status != HAL_OK)
mbed_official 330:c80ac197fa6a 1956 {
mbed_official 330:c80ac197fa6a 1957 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 1958 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 1959 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1960 }
mbed_official 330:c80ac197fa6a 1961 else
mbed_official 330:c80ac197fa6a 1962 {
mbed_official 330:c80ac197fa6a 1963 /* Start injected conversion */
mbed_official 330:c80ac197fa6a 1964 status = SDADC_InjConvStart(hsdadc);
mbed_official 330:c80ac197fa6a 1965 }
mbed_official 330:c80ac197fa6a 1966 }
mbed_official 330:c80ac197fa6a 1967 else
mbed_official 330:c80ac197fa6a 1968 {
mbed_official 330:c80ac197fa6a 1969 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1970 }
mbed_official 330:c80ac197fa6a 1971 /* Return function status */
mbed_official 330:c80ac197fa6a 1972 return status;
mbed_official 330:c80ac197fa6a 1973 }
mbed_official 330:c80ac197fa6a 1974
mbed_official 330:c80ac197fa6a 1975 /**
mbed_official 330:c80ac197fa6a 1976 * @brief This function allows to stop multimode injected conversions in DMA mode.
mbed_official 330:c80ac197fa6a 1977 * @note This function should be called only if injected conversion is ongoing.
mbed_official 330:c80ac197fa6a 1978 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 1979 * @retval HAL status
mbed_official 330:c80ac197fa6a 1980 */
mbed_official 330:c80ac197fa6a 1981 HAL_StatusTypeDef HAL_SDADC_InjectedMultiModeStop_DMA(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 1982 {
mbed_official 330:c80ac197fa6a 1983 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 1984
mbed_official 330:c80ac197fa6a 1985 /* Check parameters */
mbed_official 330:c80ac197fa6a 1986 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 1987
mbed_official 330:c80ac197fa6a 1988 /* Check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 1989 if(hsdadc->Instance != SDADC1)
mbed_official 330:c80ac197fa6a 1990 {
mbed_official 330:c80ac197fa6a 1991 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1992 }
mbed_official 330:c80ac197fa6a 1993 /* Check SDADC state */
mbed_official 330:c80ac197fa6a 1994 else if((hsdadc->State != HAL_SDADC_STATE_INJ) && \
mbed_official 330:c80ac197fa6a 1995 (hsdadc->State != HAL_SDADC_STATE_REG_INJ))
mbed_official 330:c80ac197fa6a 1996 {
mbed_official 330:c80ac197fa6a 1997 /* Return error status */
mbed_official 330:c80ac197fa6a 1998 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 1999 }
mbed_official 330:c80ac197fa6a 2000 else
mbed_official 330:c80ac197fa6a 2001 {
mbed_official 330:c80ac197fa6a 2002 /* Clear JDMAEN bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2003 hsdadc->Instance->CR1 &= ~(SDADC_CR1_JDMAEN);
mbed_official 330:c80ac197fa6a 2004
mbed_official 330:c80ac197fa6a 2005 /* Stop current DMA transfer */
mbed_official 330:c80ac197fa6a 2006 if(HAL_DMA_Abort(hsdadc->hdma) != HAL_OK)
mbed_official 330:c80ac197fa6a 2007 {
mbed_official 330:c80ac197fa6a 2008 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 2009 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2010 status = HAL_ERROR;
mbed_official 330:c80ac197fa6a 2011 }
mbed_official 330:c80ac197fa6a 2012 else
mbed_official 330:c80ac197fa6a 2013 {
mbed_official 330:c80ac197fa6a 2014 /* Stop injected conversion */
mbed_official 330:c80ac197fa6a 2015 status = SDADC_InjConvStop(hsdadc);
mbed_official 330:c80ac197fa6a 2016 }
mbed_official 330:c80ac197fa6a 2017 }
mbed_official 330:c80ac197fa6a 2018 /* Return function status */
mbed_official 330:c80ac197fa6a 2019 return status;
mbed_official 330:c80ac197fa6a 2020 }
mbed_official 330:c80ac197fa6a 2021
mbed_official 330:c80ac197fa6a 2022 /**
mbed_official 330:c80ac197fa6a 2023 * @brief This function allows to get multimode injected conversion value.
mbed_official 330:c80ac197fa6a 2024 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2025 * @retval Multimode injected conversion value
mbed_official 330:c80ac197fa6a 2026 */
mbed_official 330:c80ac197fa6a 2027 uint32_t HAL_SDADC_InjectedMultiModeGetValue(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2028 {
mbed_official 330:c80ac197fa6a 2029 uint32_t value = 0;
mbed_official 330:c80ac197fa6a 2030
mbed_official 330:c80ac197fa6a 2031 /* Check parameters and check instance is SDADC1 */
mbed_official 330:c80ac197fa6a 2032 assert_param(IS_SDADC_ALL_INSTANCE(hsdadc->Instance));
mbed_official 330:c80ac197fa6a 2033 assert_param(hsdadc->Instance == SDADC1);
mbed_official 330:c80ac197fa6a 2034
mbed_official 330:c80ac197fa6a 2035 /* read multimode injected value */
mbed_official 330:c80ac197fa6a 2036 value = (hsdadc->InjectedMultimode == SDADC_MULTIMODE_SDADC1_SDADC2) ? \
mbed_official 330:c80ac197fa6a 2037 hsdadc->Instance->JDATA12R : hsdadc->Instance->JDATA13R;
mbed_official 330:c80ac197fa6a 2038
mbed_official 330:c80ac197fa6a 2039 /* Return multimode injected conversions value */
mbed_official 330:c80ac197fa6a 2040 return value;
mbed_official 330:c80ac197fa6a 2041 }
mbed_official 330:c80ac197fa6a 2042
mbed_official 330:c80ac197fa6a 2043 /**
mbed_official 330:c80ac197fa6a 2044 * @brief This function handles the SDADC interrupts.
mbed_official 330:c80ac197fa6a 2045 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2046 * @retval None
mbed_official 330:c80ac197fa6a 2047 */
mbed_official 330:c80ac197fa6a 2048 void HAL_SDADC_IRQHandler(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2049 {
mbed_official 330:c80ac197fa6a 2050 /* Check if end of regular conversion */
mbed_official 330:c80ac197fa6a 2051 if(((hsdadc->Instance->ISR & SDADC_ISR_REOCF) == SDADC_ISR_REOCF) && \
mbed_official 330:c80ac197fa6a 2052 ((hsdadc->Instance->CR1 & SDADC_CR1_REOCIE) == SDADC_CR1_REOCIE))
mbed_official 330:c80ac197fa6a 2053 {
mbed_official 330:c80ac197fa6a 2054 /* Call regular conversion complete callback */
mbed_official 330:c80ac197fa6a 2055 HAL_SDADC_ConvCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2056
mbed_official 330:c80ac197fa6a 2057 /* End of conversion if mode is not continuous and software trigger */
mbed_official 330:c80ac197fa6a 2058 if((hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 2059 (hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER))
mbed_official 330:c80ac197fa6a 2060 {
mbed_official 330:c80ac197fa6a 2061 /* Clear REOCIE and ROVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2062 hsdadc->Instance->CR1 &= ~(SDADC_CR1_REOCIE | SDADC_CR1_ROVRIE);
mbed_official 330:c80ac197fa6a 2063
mbed_official 330:c80ac197fa6a 2064 /* Update SDADC state */
mbed_official 330:c80ac197fa6a 2065 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_REG) ? \
mbed_official 330:c80ac197fa6a 2066 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_INJ;
mbed_official 330:c80ac197fa6a 2067 }
mbed_official 330:c80ac197fa6a 2068 }
mbed_official 330:c80ac197fa6a 2069 /* Check if end of injected conversion */
mbed_official 330:c80ac197fa6a 2070 else if(((hsdadc->Instance->ISR & SDADC_ISR_JEOCF) == SDADC_ISR_JEOCF) && \
mbed_official 330:c80ac197fa6a 2071 ((hsdadc->Instance->CR1 & SDADC_CR1_JEOCIE) == SDADC_CR1_JEOCIE))
mbed_official 330:c80ac197fa6a 2072 {
mbed_official 330:c80ac197fa6a 2073 /* Call injected conversion complete callback */
mbed_official 330:c80ac197fa6a 2074 HAL_SDADC_InjectedConvCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2075
mbed_official 330:c80ac197fa6a 2076 /* Update remaining injected conversions */
mbed_official 330:c80ac197fa6a 2077 hsdadc->InjConvRemaining--;
mbed_official 330:c80ac197fa6a 2078 if(hsdadc->InjConvRemaining ==0)
mbed_official 330:c80ac197fa6a 2079 {
mbed_official 330:c80ac197fa6a 2080 /* end of injected sequence, reset the value */
mbed_official 330:c80ac197fa6a 2081 hsdadc->InjConvRemaining = hsdadc->InjectedChannelsNbr;
mbed_official 330:c80ac197fa6a 2082 }
mbed_official 330:c80ac197fa6a 2083 /* End of conversion if mode is not continuous, software trigger */
mbed_official 330:c80ac197fa6a 2084 /* and end of injected sequence */
mbed_official 330:c80ac197fa6a 2085 if((hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_OFF) && \
mbed_official 330:c80ac197fa6a 2086 (hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER) && \
mbed_official 330:c80ac197fa6a 2087 (hsdadc->InjConvRemaining == hsdadc->InjectedChannelsNbr))
mbed_official 330:c80ac197fa6a 2088 {
mbed_official 330:c80ac197fa6a 2089 /* Clear JEOCIE and JOVRIE bits in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2090 hsdadc->Instance->CR1 &= ~(SDADC_CR1_JEOCIE | SDADC_CR1_JOVRIE);
mbed_official 330:c80ac197fa6a 2091
mbed_official 330:c80ac197fa6a 2092 /* Update SDADC state */
mbed_official 330:c80ac197fa6a 2093 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_INJ) ? \
mbed_official 330:c80ac197fa6a 2094 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_REG;
mbed_official 330:c80ac197fa6a 2095 }
mbed_official 330:c80ac197fa6a 2096 }
mbed_official 330:c80ac197fa6a 2097 /* Check if end of calibration */
mbed_official 330:c80ac197fa6a 2098 else if(((hsdadc->Instance->ISR & SDADC_ISR_EOCALF) == SDADC_ISR_EOCALF) && \
mbed_official 330:c80ac197fa6a 2099 ((hsdadc->Instance->CR1 & SDADC_CR1_EOCALIE) == SDADC_CR1_EOCALIE))
mbed_official 330:c80ac197fa6a 2100 {
mbed_official 330:c80ac197fa6a 2101 /* Clear EOCALIE bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2102 hsdadc->Instance->CR1 &= ~(SDADC_CR1_EOCALIE);
mbed_official 330:c80ac197fa6a 2103
mbed_official 330:c80ac197fa6a 2104 /* Set CLREOCALF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 2105 hsdadc->Instance->CLRISR |= SDADC_ISR_CLREOCALF;
mbed_official 330:c80ac197fa6a 2106
mbed_official 330:c80ac197fa6a 2107 /* Call calibration callback */
mbed_official 330:c80ac197fa6a 2108 HAL_SDADC_CalibrationCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2109
mbed_official 330:c80ac197fa6a 2110 /* Update SDADC state */
mbed_official 330:c80ac197fa6a 2111 hsdadc->State = HAL_SDADC_STATE_READY;
mbed_official 330:c80ac197fa6a 2112 }
mbed_official 330:c80ac197fa6a 2113 /* Check if overrun occurs during regular conversion */
mbed_official 330:c80ac197fa6a 2114 else if(((hsdadc->Instance->ISR & SDADC_ISR_ROVRF) == SDADC_ISR_ROVRF) && \
mbed_official 330:c80ac197fa6a 2115 ((hsdadc->Instance->CR1 & SDADC_CR1_ROVRIE) == SDADC_CR1_ROVRIE))
mbed_official 330:c80ac197fa6a 2116 {
mbed_official 330:c80ac197fa6a 2117 /* Set CLRROVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 2118 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRROVRF;
mbed_official 330:c80ac197fa6a 2119
mbed_official 330:c80ac197fa6a 2120 /* Update error code */
mbed_official 330:c80ac197fa6a 2121 hsdadc->ErrorCode = SDADC_ERROR_REGULAR_OVERRUN;
mbed_official 330:c80ac197fa6a 2122
mbed_official 330:c80ac197fa6a 2123 /* Call error callback */
mbed_official 330:c80ac197fa6a 2124 HAL_SDADC_ErrorCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2125 }
mbed_official 330:c80ac197fa6a 2126 /* Check if overrun occurs during injected conversion */
mbed_official 330:c80ac197fa6a 2127 else if(((hsdadc->Instance->ISR & SDADC_ISR_JOVRF) == SDADC_ISR_JOVRF) && \
mbed_official 330:c80ac197fa6a 2128 ((hsdadc->Instance->CR1 & SDADC_CR1_JOVRIE) == SDADC_CR1_JOVRIE))
mbed_official 330:c80ac197fa6a 2129 {
mbed_official 330:c80ac197fa6a 2130 /* Set CLRJOVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 2131 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRJOVRF;
mbed_official 330:c80ac197fa6a 2132
mbed_official 330:c80ac197fa6a 2133 /* Update error code */
mbed_official 330:c80ac197fa6a 2134 hsdadc->ErrorCode = SDADC_ERROR_INJECTED_OVERRUN;
mbed_official 330:c80ac197fa6a 2135
mbed_official 330:c80ac197fa6a 2136 /* Call error callback */
mbed_official 330:c80ac197fa6a 2137 HAL_SDADC_ErrorCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2138 }
mbed_official 330:c80ac197fa6a 2139 return;
mbed_official 330:c80ac197fa6a 2140 }
mbed_official 330:c80ac197fa6a 2141
mbed_official 330:c80ac197fa6a 2142 /**
mbed_official 330:c80ac197fa6a 2143 * @brief Calibration complete callback.
mbed_official 330:c80ac197fa6a 2144 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2145 * @retval None
mbed_official 330:c80ac197fa6a 2146 */
mbed_official 330:c80ac197fa6a 2147 __weak void HAL_SDADC_CalibrationCpltCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2148 {
mbed_official 330:c80ac197fa6a 2149 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2150 the HAL_SDADC_CalibrationCpltCallback could be implemented in the user file
mbed_official 330:c80ac197fa6a 2151 */
mbed_official 330:c80ac197fa6a 2152 }
mbed_official 330:c80ac197fa6a 2153
mbed_official 330:c80ac197fa6a 2154 /**
mbed_official 330:c80ac197fa6a 2155 * @brief Half regular conversion complete callback.
mbed_official 330:c80ac197fa6a 2156 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2157 * @retval None
mbed_official 330:c80ac197fa6a 2158 */
mbed_official 330:c80ac197fa6a 2159 __weak void HAL_SDADC_ConvHalfCpltCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2160 {
mbed_official 330:c80ac197fa6a 2161 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2162 the HAL_SDADC_ConvHalfCpltCallback could be implemented in the user file
mbed_official 330:c80ac197fa6a 2163 */
mbed_official 330:c80ac197fa6a 2164 }
mbed_official 330:c80ac197fa6a 2165
mbed_official 330:c80ac197fa6a 2166 /**
mbed_official 330:c80ac197fa6a 2167 * @brief Regular conversion complete callback.
mbed_official 330:c80ac197fa6a 2168 * @note In interrupt mode, user has to read conversion value in this function
mbed_official 330:c80ac197fa6a 2169 using HAL_SDADC_GetValue or HAL_SDADC_MultiModeGetValue.
mbed_official 330:c80ac197fa6a 2170 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2171 * @retval None
mbed_official 330:c80ac197fa6a 2172 */
mbed_official 330:c80ac197fa6a 2173 __weak void HAL_SDADC_ConvCpltCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2174 {
mbed_official 330:c80ac197fa6a 2175 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2176 the HAL_SDADC_ConvCpltCallback could be implemented in the user file.
mbed_official 330:c80ac197fa6a 2177 */
mbed_official 330:c80ac197fa6a 2178 }
mbed_official 330:c80ac197fa6a 2179
mbed_official 330:c80ac197fa6a 2180 /**
mbed_official 330:c80ac197fa6a 2181 * @brief Half injected conversion complete callback.
mbed_official 330:c80ac197fa6a 2182 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2183 * @retval None
mbed_official 330:c80ac197fa6a 2184 */
mbed_official 330:c80ac197fa6a 2185 __weak void HAL_SDADC_InjectedConvHalfCpltCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2186 {
mbed_official 330:c80ac197fa6a 2187 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2188 the HAL_SDADC_InjectedConvHalfCpltCallback could be implemented in the user file.
mbed_official 330:c80ac197fa6a 2189 */
mbed_official 330:c80ac197fa6a 2190 }
mbed_official 330:c80ac197fa6a 2191
mbed_official 330:c80ac197fa6a 2192 /**
mbed_official 330:c80ac197fa6a 2193 * @brief Injected conversion complete callback.
mbed_official 330:c80ac197fa6a 2194 * @note In interrupt mode, user has to read conversion value in this function
mbed_official 330:c80ac197fa6a 2195 using HAL_SDADC_InjectedGetValue or HAL_SDADC_InjectedMultiModeGetValue.
mbed_official 330:c80ac197fa6a 2196 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2197 * @retval None
mbed_official 330:c80ac197fa6a 2198 */
mbed_official 330:c80ac197fa6a 2199 __weak void HAL_SDADC_InjectedConvCpltCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2200 {
mbed_official 330:c80ac197fa6a 2201 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2202 the HAL_SDADC_InjectedConvCpltCallback could be implemented in the user file.
mbed_official 330:c80ac197fa6a 2203 */
mbed_official 330:c80ac197fa6a 2204 }
mbed_official 330:c80ac197fa6a 2205
mbed_official 330:c80ac197fa6a 2206 /**
mbed_official 330:c80ac197fa6a 2207 * @brief Error callback.
mbed_official 330:c80ac197fa6a 2208 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2209 * @retval None
mbed_official 330:c80ac197fa6a 2210 */
mbed_official 330:c80ac197fa6a 2211 __weak void HAL_SDADC_ErrorCallback(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2212 {
mbed_official 330:c80ac197fa6a 2213 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 330:c80ac197fa6a 2214 the HAL_SDADC_ErrorCallback could be implemented in the user file.
mbed_official 330:c80ac197fa6a 2215 */
mbed_official 330:c80ac197fa6a 2216 }
mbed_official 330:c80ac197fa6a 2217
mbed_official 330:c80ac197fa6a 2218 /**
mbed_official 330:c80ac197fa6a 2219 * @brief DMA half transfer complete callback for regular conversion.
mbed_official 330:c80ac197fa6a 2220 * @param hdma : DMA handle.
mbed_official 330:c80ac197fa6a 2221 * @retval None
mbed_official 330:c80ac197fa6a 2222 */
mbed_official 330:c80ac197fa6a 2223 static void SDADC_DMARegularHalfConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 330:c80ac197fa6a 2224 {
mbed_official 330:c80ac197fa6a 2225 /* Get SDADC handle */
mbed_official 330:c80ac197fa6a 2226 SDADC_HandleTypeDef* hsdadc = (SDADC_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 330:c80ac197fa6a 2227
mbed_official 330:c80ac197fa6a 2228 /* Call regular half conversion complete callback */
mbed_official 330:c80ac197fa6a 2229 HAL_SDADC_ConvHalfCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2230 }
mbed_official 330:c80ac197fa6a 2231
mbed_official 330:c80ac197fa6a 2232 /**
mbed_official 330:c80ac197fa6a 2233 * @brief DMA transfer complete callback for regular conversion.
mbed_official 330:c80ac197fa6a 2234 * @param hdma : DMA handle.
mbed_official 330:c80ac197fa6a 2235 * @retval None
mbed_official 330:c80ac197fa6a 2236 */
mbed_official 330:c80ac197fa6a 2237 static void SDADC_DMARegularConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 330:c80ac197fa6a 2238 {
mbed_official 330:c80ac197fa6a 2239 /* Get SDADC handle */
mbed_official 330:c80ac197fa6a 2240 SDADC_HandleTypeDef* hsdadc = (SDADC_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 330:c80ac197fa6a 2241
mbed_official 330:c80ac197fa6a 2242 /* Call regular conversion complete callback */
mbed_official 330:c80ac197fa6a 2243 HAL_SDADC_ConvCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2244 }
mbed_official 330:c80ac197fa6a 2245
mbed_official 330:c80ac197fa6a 2246 /**
mbed_official 330:c80ac197fa6a 2247 * @brief DMA half transfer complete callback for injected conversion.
mbed_official 330:c80ac197fa6a 2248 * @param hdma : DMA handle.
mbed_official 330:c80ac197fa6a 2249 * @retval None
mbed_official 330:c80ac197fa6a 2250 */
mbed_official 330:c80ac197fa6a 2251 static void SDADC_DMAInjectedHalfConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 330:c80ac197fa6a 2252 {
mbed_official 330:c80ac197fa6a 2253 /* Get SDADC handle */
mbed_official 330:c80ac197fa6a 2254 SDADC_HandleTypeDef* hsdadc = (SDADC_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 330:c80ac197fa6a 2255
mbed_official 330:c80ac197fa6a 2256 /* Call injected half conversion complete callback */
mbed_official 330:c80ac197fa6a 2257 HAL_SDADC_InjectedConvHalfCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2258 }
mbed_official 330:c80ac197fa6a 2259
mbed_official 330:c80ac197fa6a 2260 /**
mbed_official 330:c80ac197fa6a 2261 * @brief DMA transfer complete callback for injected conversion.
mbed_official 330:c80ac197fa6a 2262 * @param hdma : DMA handle.
mbed_official 330:c80ac197fa6a 2263 * @retval None
mbed_official 330:c80ac197fa6a 2264 */
mbed_official 330:c80ac197fa6a 2265 static void SDADC_DMAInjectedConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 330:c80ac197fa6a 2266 {
mbed_official 330:c80ac197fa6a 2267 /* Get SDADC handle */
mbed_official 330:c80ac197fa6a 2268 SDADC_HandleTypeDef* hsdadc = (SDADC_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 330:c80ac197fa6a 2269
mbed_official 330:c80ac197fa6a 2270 /* Call injected conversion complete callback */
mbed_official 330:c80ac197fa6a 2271 HAL_SDADC_InjectedConvCpltCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2272 }
mbed_official 330:c80ac197fa6a 2273
mbed_official 330:c80ac197fa6a 2274 /**
mbed_official 330:c80ac197fa6a 2275 * @brief DMA error callback.
mbed_official 330:c80ac197fa6a 2276 * @param hdma : DMA handle.
mbed_official 330:c80ac197fa6a 2277 * @retval None
mbed_official 330:c80ac197fa6a 2278 */
mbed_official 330:c80ac197fa6a 2279 static void SDADC_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 330:c80ac197fa6a 2280 {
mbed_official 330:c80ac197fa6a 2281 /* Get SDADC handle */
mbed_official 330:c80ac197fa6a 2282 SDADC_HandleTypeDef* hsdadc = (SDADC_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 330:c80ac197fa6a 2283
mbed_official 330:c80ac197fa6a 2284 /* Update error code */
mbed_official 330:c80ac197fa6a 2285 hsdadc->ErrorCode = SDADC_ERROR_DMA;
mbed_official 330:c80ac197fa6a 2286
mbed_official 330:c80ac197fa6a 2287 /* Call error callback */
mbed_official 330:c80ac197fa6a 2288 HAL_SDADC_ErrorCallback(hsdadc);
mbed_official 330:c80ac197fa6a 2289 }
mbed_official 330:c80ac197fa6a 2290
mbed_official 330:c80ac197fa6a 2291 /**
mbed_official 330:c80ac197fa6a 2292 * @}
mbed_official 330:c80ac197fa6a 2293 */
mbed_official 330:c80ac197fa6a 2294
mbed_official 330:c80ac197fa6a 2295 /** @defgroup SDADC_Exported_Functions_Group4 Peripheral State functions
mbed_official 330:c80ac197fa6a 2296 * @brief SDADC Peripheral State functions
mbed_official 330:c80ac197fa6a 2297 *
mbed_official 330:c80ac197fa6a 2298 @verbatim
mbed_official 330:c80ac197fa6a 2299 ===============================================================================
mbed_official 330:c80ac197fa6a 2300 ##### ADC Peripheral State functions #####
mbed_official 330:c80ac197fa6a 2301 ===============================================================================
mbed_official 330:c80ac197fa6a 2302 [..] This subsection provides functions allowing to
mbed_official 330:c80ac197fa6a 2303 (+) Get the SDADC state
mbed_official 330:c80ac197fa6a 2304 (+) Get the SDADC Error
mbed_official 330:c80ac197fa6a 2305
mbed_official 330:c80ac197fa6a 2306 @endverbatim
mbed_official 330:c80ac197fa6a 2307 * @{
mbed_official 330:c80ac197fa6a 2308 */
mbed_official 330:c80ac197fa6a 2309
mbed_official 330:c80ac197fa6a 2310 /**
mbed_official 330:c80ac197fa6a 2311 * @brief This function allows to get the current SDADC state.
mbed_official 330:c80ac197fa6a 2312 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2313 * @retval SDADC state.
mbed_official 330:c80ac197fa6a 2314 */
mbed_official 330:c80ac197fa6a 2315 HAL_SDADC_StateTypeDef HAL_SDADC_GetState(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2316 {
mbed_official 330:c80ac197fa6a 2317 return hsdadc->State;
mbed_official 330:c80ac197fa6a 2318 }
mbed_official 330:c80ac197fa6a 2319
mbed_official 330:c80ac197fa6a 2320 /**
mbed_official 330:c80ac197fa6a 2321 * @brief This function allows to get the current SDADC error code.
mbed_official 330:c80ac197fa6a 2322 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2323 * @retval SDADC error code.
mbed_official 330:c80ac197fa6a 2324 */
mbed_official 330:c80ac197fa6a 2325 uint32_t HAL_SDADC_GetError(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2326 {
mbed_official 330:c80ac197fa6a 2327 return hsdadc->ErrorCode;
mbed_official 330:c80ac197fa6a 2328 }
mbed_official 330:c80ac197fa6a 2329
mbed_official 330:c80ac197fa6a 2330 /**
mbed_official 330:c80ac197fa6a 2331 * @}
mbed_official 330:c80ac197fa6a 2332 */
mbed_official 330:c80ac197fa6a 2333
mbed_official 330:c80ac197fa6a 2334 /**
mbed_official 330:c80ac197fa6a 2335 * @brief This function allows to enter in init mode for SDADC instance.
mbed_official 330:c80ac197fa6a 2336 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2337 * @retval HAL status.
mbed_official 330:c80ac197fa6a 2338 */
mbed_official 330:c80ac197fa6a 2339 static HAL_StatusTypeDef SDADC_EnterInitMode(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2340 {
mbed_official 330:c80ac197fa6a 2341 uint32_t tickstart = 0;
mbed_official 330:c80ac197fa6a 2342
mbed_official 330:c80ac197fa6a 2343 /* Set INIT bit on SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2344 hsdadc->Instance->CR1 |= SDADC_CR1_INIT;
mbed_official 330:c80ac197fa6a 2345
mbed_official 330:c80ac197fa6a 2346 /* Wait INITRDY bit on SDADC_ISR */
mbed_official 330:c80ac197fa6a 2347 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 2348 while((hsdadc->Instance->ISR & SDADC_ISR_INITRDY) == (uint32_t)RESET)
mbed_official 330:c80ac197fa6a 2349 {
mbed_official 330:c80ac197fa6a 2350 if((HAL_GetTick()-tickstart) > SDADC_TIMEOUT)
mbed_official 330:c80ac197fa6a 2351 {
mbed_official 330:c80ac197fa6a 2352 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2353 }
mbed_official 330:c80ac197fa6a 2354 }
mbed_official 330:c80ac197fa6a 2355
mbed_official 330:c80ac197fa6a 2356 /* Return HAL status */
mbed_official 330:c80ac197fa6a 2357 return HAL_OK;
mbed_official 330:c80ac197fa6a 2358 }
mbed_official 330:c80ac197fa6a 2359
mbed_official 330:c80ac197fa6a 2360 /**
mbed_official 330:c80ac197fa6a 2361 * @brief This function allows to exit from init mode for SDADC instance.
mbed_official 330:c80ac197fa6a 2362 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2363 * @retval None.
mbed_official 330:c80ac197fa6a 2364 */
mbed_official 330:c80ac197fa6a 2365 static void SDADC_ExitInitMode(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2366 {
mbed_official 330:c80ac197fa6a 2367 /* Reset INIT bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2368 hsdadc->Instance->CR1 &= ~(SDADC_CR1_INIT);
mbed_official 330:c80ac197fa6a 2369 }
mbed_official 330:c80ac197fa6a 2370
mbed_official 330:c80ac197fa6a 2371 /**
mbed_official 330:c80ac197fa6a 2372 * @brief This function allows to get the number of injected channels.
mbed_official 330:c80ac197fa6a 2373 * @param Channels : bitfield of injected channels.
mbed_official 330:c80ac197fa6a 2374 * @retval Number of injected channels.
mbed_official 330:c80ac197fa6a 2375 */
mbed_official 330:c80ac197fa6a 2376 static uint32_t SDADC_GetInjChannelsNbr(uint32_t Channels)
mbed_official 330:c80ac197fa6a 2377 {
mbed_official 330:c80ac197fa6a 2378 uint32_t nbChannels = 0;
mbed_official 330:c80ac197fa6a 2379 uint32_t tmp,i;
mbed_official 330:c80ac197fa6a 2380
mbed_official 330:c80ac197fa6a 2381 /* Get the number of channels from bitfield */
mbed_official 330:c80ac197fa6a 2382 tmp = (uint32_t) (Channels & SDADC_LSB_MASK);
mbed_official 330:c80ac197fa6a 2383 for(i = 0 ; i < 9 ; i++)
mbed_official 330:c80ac197fa6a 2384 {
mbed_official 330:c80ac197fa6a 2385 if(tmp & 1)
mbed_official 330:c80ac197fa6a 2386 {
mbed_official 330:c80ac197fa6a 2387 nbChannels++;
mbed_official 330:c80ac197fa6a 2388 }
mbed_official 330:c80ac197fa6a 2389 tmp = (uint32_t) (tmp >> 1);
mbed_official 330:c80ac197fa6a 2390 }
mbed_official 330:c80ac197fa6a 2391 return nbChannels;
mbed_official 330:c80ac197fa6a 2392 }
mbed_official 330:c80ac197fa6a 2393
mbed_official 330:c80ac197fa6a 2394 /**
mbed_official 330:c80ac197fa6a 2395 * @brief This function allows to really start regular conversion.
mbed_official 330:c80ac197fa6a 2396 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2397 * @retval HAL status.
mbed_official 330:c80ac197fa6a 2398 */
mbed_official 330:c80ac197fa6a 2399 static HAL_StatusTypeDef SDADC_RegConvStart(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2400 {
mbed_official 330:c80ac197fa6a 2401 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 2402
mbed_official 330:c80ac197fa6a 2403 /* Check regular trigger */
mbed_official 330:c80ac197fa6a 2404 if(hsdadc->RegularTrigger == SDADC_SOFTWARE_TRIGGER)
mbed_official 330:c80ac197fa6a 2405 {
mbed_official 330:c80ac197fa6a 2406 /* Set RSWSTART bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2407 hsdadc->Instance->CR2 |= SDADC_CR2_RSWSTART;
mbed_official 330:c80ac197fa6a 2408 }
mbed_official 330:c80ac197fa6a 2409 else /* synchronuous trigger */
mbed_official 330:c80ac197fa6a 2410 {
mbed_official 330:c80ac197fa6a 2411 /* Enter init mode */
mbed_official 330:c80ac197fa6a 2412 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 2413 {
mbed_official 330:c80ac197fa6a 2414 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 2415 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2416 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2417 }
mbed_official 330:c80ac197fa6a 2418 else
mbed_official 330:c80ac197fa6a 2419 {
mbed_official 330:c80ac197fa6a 2420 /* Set RSYNC bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2421 hsdadc->Instance->CR1 |= SDADC_CR1_RSYNC;
mbed_official 330:c80ac197fa6a 2422
mbed_official 330:c80ac197fa6a 2423 /* Exit init mode */
mbed_official 330:c80ac197fa6a 2424 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 2425 }
mbed_official 330:c80ac197fa6a 2426 }
mbed_official 330:c80ac197fa6a 2427 /* Update SDADC state only if status is OK */
mbed_official 330:c80ac197fa6a 2428 if(status == HAL_OK)
mbed_official 330:c80ac197fa6a 2429 {
mbed_official 330:c80ac197fa6a 2430 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_READY) ? \
mbed_official 330:c80ac197fa6a 2431 HAL_SDADC_STATE_REG : HAL_SDADC_STATE_REG_INJ;
mbed_official 330:c80ac197fa6a 2432 }
mbed_official 330:c80ac197fa6a 2433 /* Return function status */
mbed_official 330:c80ac197fa6a 2434 return status;
mbed_official 330:c80ac197fa6a 2435 }
mbed_official 330:c80ac197fa6a 2436
mbed_official 330:c80ac197fa6a 2437 /**
mbed_official 330:c80ac197fa6a 2438 * @brief This function allows to really stop regular conversion.
mbed_official 330:c80ac197fa6a 2439 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2440 * @retval HAL status.
mbed_official 330:c80ac197fa6a 2441 */
mbed_official 330:c80ac197fa6a 2442 static HAL_StatusTypeDef SDADC_RegConvStop(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2443 {
mbed_official 330:c80ac197fa6a 2444 uint32_t tickstart;
mbed_official 330:c80ac197fa6a 2445
mbed_official 330:c80ac197fa6a 2446 /* Check continuous mode */
mbed_official 330:c80ac197fa6a 2447 if(hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 2448 {
mbed_official 330:c80ac197fa6a 2449 /* Clear REOCF by reading SDADC_RDATAR register */
mbed_official 330:c80ac197fa6a 2450 hsdadc->Instance->RDATAR;
mbed_official 330:c80ac197fa6a 2451
mbed_official 330:c80ac197fa6a 2452 /* Clear RCONT bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2453 hsdadc->Instance->CR2 &= ~(SDADC_CR2_RCONT);
mbed_official 330:c80ac197fa6a 2454 }
mbed_official 330:c80ac197fa6a 2455 /* Wait for the end of regular conversion */
mbed_official 330:c80ac197fa6a 2456 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 2457 while((hsdadc->Instance->ISR & SDADC_ISR_RCIP) != 0)
mbed_official 330:c80ac197fa6a 2458 {
mbed_official 330:c80ac197fa6a 2459 if((HAL_GetTick()-tickstart) > SDADC_TIMEOUT)
mbed_official 330:c80ac197fa6a 2460 {
mbed_official 330:c80ac197fa6a 2461 /* Set SDADC in error state and return timeout status */
mbed_official 330:c80ac197fa6a 2462 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2463 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2464 }
mbed_official 330:c80ac197fa6a 2465 }
mbed_official 330:c80ac197fa6a 2466 /* Check if trigger is synchronuous */
mbed_official 330:c80ac197fa6a 2467 if(hsdadc->RegularTrigger == SDADC_SYNCHRONOUS_TRIGGER)
mbed_official 330:c80ac197fa6a 2468 {
mbed_official 330:c80ac197fa6a 2469 /* Enter init mode */
mbed_official 330:c80ac197fa6a 2470 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 2471 {
mbed_official 330:c80ac197fa6a 2472 /* Set SDADC in error state and return timeout status */
mbed_official 330:c80ac197fa6a 2473 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2474 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2475 }
mbed_official 330:c80ac197fa6a 2476 else
mbed_official 330:c80ac197fa6a 2477 {
mbed_official 330:c80ac197fa6a 2478 /* Clear RSYNC bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2479 hsdadc->Instance->CR1 &= ~(SDADC_CR1_RSYNC);
mbed_official 330:c80ac197fa6a 2480
mbed_official 330:c80ac197fa6a 2481 /* Exit init mode */
mbed_official 330:c80ac197fa6a 2482 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 2483 }
mbed_official 330:c80ac197fa6a 2484 }
mbed_official 330:c80ac197fa6a 2485 /* Check if continuous mode */
mbed_official 330:c80ac197fa6a 2486 if(hsdadc->RegularContMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 2487 {
mbed_official 330:c80ac197fa6a 2488 /* Restore RCONT bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2489 hsdadc->Instance->CR2 |= SDADC_CR2_RCONT;
mbed_official 330:c80ac197fa6a 2490 }
mbed_official 330:c80ac197fa6a 2491 /* Clear REOCF by reading SDADC_RDATAR register */
mbed_official 330:c80ac197fa6a 2492 hsdadc->Instance->RDATAR;
mbed_official 330:c80ac197fa6a 2493
mbed_official 330:c80ac197fa6a 2494 /* Set CLRROVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 2495 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRROVRF;
mbed_official 330:c80ac197fa6a 2496
mbed_official 330:c80ac197fa6a 2497 /* Update SDADC state */
mbed_official 330:c80ac197fa6a 2498 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_REG) ? \
mbed_official 330:c80ac197fa6a 2499 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_INJ;
mbed_official 330:c80ac197fa6a 2500
mbed_official 330:c80ac197fa6a 2501 /* Return function status */
mbed_official 330:c80ac197fa6a 2502 return HAL_OK;
mbed_official 330:c80ac197fa6a 2503 }
mbed_official 330:c80ac197fa6a 2504
mbed_official 330:c80ac197fa6a 2505 /**
mbed_official 330:c80ac197fa6a 2506 * @brief This function allows to really start injected conversion.
mbed_official 330:c80ac197fa6a 2507 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2508 * @retval HAL status.
mbed_official 330:c80ac197fa6a 2509 */
mbed_official 330:c80ac197fa6a 2510 static HAL_StatusTypeDef SDADC_InjConvStart(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2511 {
mbed_official 330:c80ac197fa6a 2512 HAL_StatusTypeDef status = HAL_OK;
mbed_official 330:c80ac197fa6a 2513
mbed_official 330:c80ac197fa6a 2514 /* Initialize number of injected conversions remaining */
mbed_official 330:c80ac197fa6a 2515 hsdadc->InjConvRemaining = hsdadc->InjectedChannelsNbr;
mbed_official 330:c80ac197fa6a 2516
mbed_official 330:c80ac197fa6a 2517 /* Check injected trigger */
mbed_official 330:c80ac197fa6a 2518 if(hsdadc->InjectedTrigger == SDADC_SOFTWARE_TRIGGER)
mbed_official 330:c80ac197fa6a 2519 {
mbed_official 330:c80ac197fa6a 2520 /* Set JSWSTART bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2521 hsdadc->Instance->CR2 |= SDADC_CR2_JSWSTART;
mbed_official 330:c80ac197fa6a 2522 }
mbed_official 330:c80ac197fa6a 2523 else /* external or synchronuous trigger */
mbed_official 330:c80ac197fa6a 2524 {
mbed_official 330:c80ac197fa6a 2525 /* Enter init mode */
mbed_official 330:c80ac197fa6a 2526 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 2527 {
mbed_official 330:c80ac197fa6a 2528 /* Set SDADC in error state */
mbed_official 330:c80ac197fa6a 2529 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2530 status = HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2531 }
mbed_official 330:c80ac197fa6a 2532 else
mbed_official 330:c80ac197fa6a 2533 {
mbed_official 330:c80ac197fa6a 2534 if(hsdadc->InjectedTrigger == SDADC_SYNCHRONOUS_TRIGGER)
mbed_official 330:c80ac197fa6a 2535 {
mbed_official 330:c80ac197fa6a 2536 /* Set JSYNC bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2537 hsdadc->Instance->CR1 |= SDADC_CR1_JSYNC;
mbed_official 330:c80ac197fa6a 2538 }
mbed_official 330:c80ac197fa6a 2539 else /* external trigger */
mbed_official 330:c80ac197fa6a 2540 {
mbed_official 330:c80ac197fa6a 2541 /* Set JEXTEN[1:0] bits in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2542 hsdadc->Instance->CR2 |= hsdadc->ExtTriggerEdge;
mbed_official 330:c80ac197fa6a 2543 }
mbed_official 330:c80ac197fa6a 2544 /* Exit init mode */
mbed_official 330:c80ac197fa6a 2545 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 2546 }
mbed_official 330:c80ac197fa6a 2547 }
mbed_official 330:c80ac197fa6a 2548 /* Update SDADC state only if status is OK */
mbed_official 330:c80ac197fa6a 2549 if(status == HAL_OK)
mbed_official 330:c80ac197fa6a 2550 {
mbed_official 330:c80ac197fa6a 2551 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_READY) ? \
mbed_official 330:c80ac197fa6a 2552 HAL_SDADC_STATE_INJ : HAL_SDADC_STATE_REG_INJ;
mbed_official 330:c80ac197fa6a 2553 }
mbed_official 330:c80ac197fa6a 2554 /* Return function status */
mbed_official 330:c80ac197fa6a 2555 return status;
mbed_official 330:c80ac197fa6a 2556 }
mbed_official 330:c80ac197fa6a 2557
mbed_official 330:c80ac197fa6a 2558 /**
mbed_official 330:c80ac197fa6a 2559 * @brief This function allows to really stop injected conversion.
mbed_official 330:c80ac197fa6a 2560 * @param hsdadc : SDADC handle.
mbed_official 330:c80ac197fa6a 2561 * @retval HAL status.
mbed_official 330:c80ac197fa6a 2562 */
mbed_official 330:c80ac197fa6a 2563 static HAL_StatusTypeDef SDADC_InjConvStop(SDADC_HandleTypeDef* hsdadc)
mbed_official 330:c80ac197fa6a 2564 {
mbed_official 330:c80ac197fa6a 2565 uint32_t tickstart;
mbed_official 330:c80ac197fa6a 2566
mbed_official 330:c80ac197fa6a 2567 /* Check continuous mode */
mbed_official 330:c80ac197fa6a 2568 if(hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 2569 {
mbed_official 330:c80ac197fa6a 2570 /* Clear JEOCF by reading SDADC_JDATAR register */
mbed_official 330:c80ac197fa6a 2571 hsdadc->Instance->JDATAR;
mbed_official 330:c80ac197fa6a 2572
mbed_official 330:c80ac197fa6a 2573 /* Clear JCONT bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2574 hsdadc->Instance->CR2 &= ~(SDADC_CR2_JCONT);
mbed_official 330:c80ac197fa6a 2575 }
mbed_official 330:c80ac197fa6a 2576 /* Wait for the end of injected conversion */
mbed_official 330:c80ac197fa6a 2577 tickstart = HAL_GetTick();
mbed_official 330:c80ac197fa6a 2578 while((hsdadc->Instance->ISR & SDADC_ISR_JCIP) != 0)
mbed_official 330:c80ac197fa6a 2579 {
mbed_official 330:c80ac197fa6a 2580 if((HAL_GetTick()-tickstart) > SDADC_TIMEOUT)
mbed_official 330:c80ac197fa6a 2581 {
mbed_official 330:c80ac197fa6a 2582 /* Set SDADC in error state and return timeout status */
mbed_official 330:c80ac197fa6a 2583 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2584 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2585 }
mbed_official 330:c80ac197fa6a 2586 }
mbed_official 330:c80ac197fa6a 2587 /* Check if trigger is not software */
mbed_official 330:c80ac197fa6a 2588 if(hsdadc->InjectedTrigger != SDADC_SOFTWARE_TRIGGER)
mbed_official 330:c80ac197fa6a 2589 {
mbed_official 330:c80ac197fa6a 2590 /* Enter init mode */
mbed_official 330:c80ac197fa6a 2591 if(SDADC_EnterInitMode(hsdadc) != HAL_OK)
mbed_official 330:c80ac197fa6a 2592 {
mbed_official 330:c80ac197fa6a 2593 /* Set SDADC in error state and return timeout status */
mbed_official 330:c80ac197fa6a 2594 hsdadc->State = HAL_SDADC_STATE_ERROR;
mbed_official 330:c80ac197fa6a 2595 return HAL_TIMEOUT;
mbed_official 330:c80ac197fa6a 2596 }
mbed_official 330:c80ac197fa6a 2597 else
mbed_official 330:c80ac197fa6a 2598 {
mbed_official 330:c80ac197fa6a 2599 /* Check if trigger is synchronuous */
mbed_official 330:c80ac197fa6a 2600 if(hsdadc->InjectedTrigger == SDADC_SYNCHRONOUS_TRIGGER)
mbed_official 330:c80ac197fa6a 2601 {
mbed_official 330:c80ac197fa6a 2602 /* Clear JSYNC bit in SDADC_CR1 register */
mbed_official 330:c80ac197fa6a 2603 hsdadc->Instance->CR1 &= ~(SDADC_CR1_JSYNC);
mbed_official 330:c80ac197fa6a 2604 }
mbed_official 330:c80ac197fa6a 2605 else /* external trigger */
mbed_official 330:c80ac197fa6a 2606 {
mbed_official 330:c80ac197fa6a 2607 /* Clear JEXTEN[1:0] bits in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2608 hsdadc->Instance->CR2 &= ~(SDADC_CR2_JEXTEN);
mbed_official 330:c80ac197fa6a 2609 }
mbed_official 330:c80ac197fa6a 2610 /* Exit init mode */
mbed_official 330:c80ac197fa6a 2611 SDADC_ExitInitMode(hsdadc);
mbed_official 330:c80ac197fa6a 2612 }
mbed_official 330:c80ac197fa6a 2613 }
mbed_official 330:c80ac197fa6a 2614 /* Check if continuous mode */
mbed_official 330:c80ac197fa6a 2615 if(hsdadc->InjectedContMode == SDADC_CONTINUOUS_CONV_ON)
mbed_official 330:c80ac197fa6a 2616 {
mbed_official 330:c80ac197fa6a 2617 /* Restore JCONT bit in SDADC_CR2 register */
mbed_official 330:c80ac197fa6a 2618 hsdadc->Instance->CR2 |= SDADC_CR2_JCONT;
mbed_official 330:c80ac197fa6a 2619 }
mbed_official 330:c80ac197fa6a 2620 /* Clear JEOCF by reading SDADC_JDATAR register */
mbed_official 330:c80ac197fa6a 2621 hsdadc->Instance->JDATAR;
mbed_official 330:c80ac197fa6a 2622
mbed_official 330:c80ac197fa6a 2623 /* Set CLRJOVRF bit in SDADC_CLRISR register */
mbed_official 330:c80ac197fa6a 2624 hsdadc->Instance->CLRISR |= SDADC_ISR_CLRJOVRF;
mbed_official 330:c80ac197fa6a 2625
mbed_official 330:c80ac197fa6a 2626 /* Update SDADC state */
mbed_official 330:c80ac197fa6a 2627 hsdadc->State = (hsdadc->State == HAL_SDADC_STATE_INJ) ? \
mbed_official 330:c80ac197fa6a 2628 HAL_SDADC_STATE_READY : HAL_SDADC_STATE_REG;
mbed_official 330:c80ac197fa6a 2629
mbed_official 330:c80ac197fa6a 2630 /* Return function status */
mbed_official 330:c80ac197fa6a 2631 return HAL_OK;
mbed_official 330:c80ac197fa6a 2632 }
mbed_official 330:c80ac197fa6a 2633
mbed_official 330:c80ac197fa6a 2634 /**
mbed_official 330:c80ac197fa6a 2635 * @}
mbed_official 330:c80ac197fa6a 2636 */
mbed_official 330:c80ac197fa6a 2637
mbed_official 330:c80ac197fa6a 2638 /**
mbed_official 330:c80ac197fa6a 2639 * @}
mbed_official 330:c80ac197fa6a 2640 */
mbed_official 330:c80ac197fa6a 2641
mbed_official 330:c80ac197fa6a 2642 #endif /* defined(STM32F373xC) || defined(STM32F378xx) */
mbed_official 330:c80ac197fa6a 2643 #endif /* HAL_SDADC_MODULE_ENABLED */
mbed_official 330:c80ac197fa6a 2644 /**
mbed_official 330:c80ac197fa6a 2645 * @}
mbed_official 330:c80ac197fa6a 2646 */
mbed_official 330:c80ac197fa6a 2647
mbed_official 330:c80ac197fa6a 2648 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/