fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

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