philippe s. / mbed-dev

Fork of mbed-dev by mbed official

Committer:
neurofun
Date:
Tue Feb 23 21:59:35 2016 +0000
Revision:
70:b3a5af880266
Parent:
0:9b334a45a8ff
Edited DAC routines to allow for the simultaneous use of three channels from two DACs as seen on the STM32F334R8 and STM32F303K8. Edited ADC routines to allow for the simultaneous use of more than one ADC.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32l1xx_hal_dac.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.0.0
bogdanm 0:9b334a45a8ff 6 * @date 5-September-2014
bogdanm 0:9b334a45a8ff 7 * @brief DAC HAL module driver.
bogdanm 0:9b334a45a8ff 8 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 9 * functionalities of the Digital to Analog Converter (DAC) peripheral:
bogdanm 0:9b334a45a8ff 10 * + Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 11 * + IO operation functions
bogdanm 0:9b334a45a8ff 12 * + Peripheral Control functions
bogdanm 0:9b334a45a8ff 13 * + Peripheral State and Errors functions
bogdanm 0:9b334a45a8ff 14 *
bogdanm 0:9b334a45a8ff 15 *
bogdanm 0:9b334a45a8ff 16 @verbatim
bogdanm 0:9b334a45a8ff 17 ==============================================================================
bogdanm 0:9b334a45a8ff 18 ##### DAC Peripheral features #####
bogdanm 0:9b334a45a8ff 19 ==============================================================================
bogdanm 0:9b334a45a8ff 20 [..]
bogdanm 0:9b334a45a8ff 21 *** DAC Channels ***
bogdanm 0:9b334a45a8ff 22 ====================
bogdanm 0:9b334a45a8ff 23 [..]
bogdanm 0:9b334a45a8ff 24 The device integrates two 12-bit Digital Analog Converters that can
bogdanm 0:9b334a45a8ff 25 be used independently or simultaneously (dual mode):
bogdanm 0:9b334a45a8ff 26 (#) DAC channel1 with DAC_OUT1 (PA4) as output
bogdanm 0:9b334a45a8ff 27 (#) DAC channel2 with DAC_OUT2 (PA5) as output
bogdanm 0:9b334a45a8ff 28
bogdanm 0:9b334a45a8ff 29 *** DAC Triggers ***
bogdanm 0:9b334a45a8ff 30 ====================
bogdanm 0:9b334a45a8ff 31 [..]
bogdanm 0:9b334a45a8ff 32 Digital to Analog conversion can be non-triggered using DAC_Trigger_None
bogdanm 0:9b334a45a8ff 33 and DAC_OUT1/DAC_OUT2 is available once writing to DHRx register.
bogdanm 0:9b334a45a8ff 34 [..]
bogdanm 0:9b334a45a8ff 35 Digital to Analog conversion can be triggered by:
bogdanm 0:9b334a45a8ff 36 (#) External event: EXTI Line 9 (any GPIOx_Pin9) using DAC_Trigger_Ext_IT9.
bogdanm 0:9b334a45a8ff 37 The used pin (GPIOx_Pin9) must be configured in input mode.
bogdanm 0:9b334a45a8ff 38
bogdanm 0:9b334a45a8ff 39 (#) Timers TRGO: TIM2, TIM4, TIM6, TIM7, TIM9
bogdanm 0:9b334a45a8ff 40 (DAC_Trigger_T2_TRGO, DAC_Trigger_T4_TRGO...)
bogdanm 0:9b334a45a8ff 41
bogdanm 0:9b334a45a8ff 42 (#) Software using DAC_Trigger_Software
bogdanm 0:9b334a45a8ff 43
bogdanm 0:9b334a45a8ff 44 *** DAC Buffer mode feature ***
bogdanm 0:9b334a45a8ff 45 ===============================
bogdanm 0:9b334a45a8ff 46 [..]
bogdanm 0:9b334a45a8ff 47 Each DAC channel integrates an output buffer that can be used to
bogdanm 0:9b334a45a8ff 48 reduce the output impedance, and to drive external loads directly
bogdanm 0:9b334a45a8ff 49 without having to add an external operational amplifier.
bogdanm 0:9b334a45a8ff 50 To enable, the output buffer use
bogdanm 0:9b334a45a8ff 51 sConfig.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
bogdanm 0:9b334a45a8ff 52 [..]
bogdanm 0:9b334a45a8ff 53 (@) Refer to the device datasheet for more details about output
bogdanm 0:9b334a45a8ff 54 impedance value with and without output buffer.
bogdanm 0:9b334a45a8ff 55
bogdanm 0:9b334a45a8ff 56 *** DAC wave generation feature ***
bogdanm 0:9b334a45a8ff 57 ===================================
bogdanm 0:9b334a45a8ff 58 [..]
bogdanm 0:9b334a45a8ff 59 Both DAC channels can be used to generate
bogdanm 0:9b334a45a8ff 60 (#) Noise wave
bogdanm 0:9b334a45a8ff 61 (#) Triangle wave
bogdanm 0:9b334a45a8ff 62
bogdanm 0:9b334a45a8ff 63 *** DAC data format ***
bogdanm 0:9b334a45a8ff 64 =======================
bogdanm 0:9b334a45a8ff 65 [..]
bogdanm 0:9b334a45a8ff 66 The DAC data format can be:
bogdanm 0:9b334a45a8ff 67 (#) 8-bit right alignment using DAC_ALIGN_8B_R
bogdanm 0:9b334a45a8ff 68 (#) 12-bit left alignment using DAC_ALIGN_12B_L
bogdanm 0:9b334a45a8ff 69 (#) 12-bit right alignment using DAC_ALIGN_12B_R
bogdanm 0:9b334a45a8ff 70
bogdanm 0:9b334a45a8ff 71 *** DAC data value to voltage correspondence ***
bogdanm 0:9b334a45a8ff 72 ================================================
bogdanm 0:9b334a45a8ff 73 [..]
bogdanm 0:9b334a45a8ff 74 The analog output voltage on each DAC channel pin is determined
bogdanm 0:9b334a45a8ff 75 by the following equation:
bogdanm 0:9b334a45a8ff 76 DAC_OUTx = VREF+ * DOR / 4095
bogdanm 0:9b334a45a8ff 77 with DOR is the Data Output Register
bogdanm 0:9b334a45a8ff 78 VEF+ is the input voltage reference (refer to the device datasheet)
bogdanm 0:9b334a45a8ff 79 e.g. To set DAC_OUT1 to 0.7V, use
bogdanm 0:9b334a45a8ff 80 Assuming that VREF+ = 3.3V, DAC_OUT1 = (3.3 * 868) / 4095 = 0.7V
bogdanm 0:9b334a45a8ff 81
bogdanm 0:9b334a45a8ff 82 *** DMA requests ***
bogdanm 0:9b334a45a8ff 83 =====================
bogdanm 0:9b334a45a8ff 84 [..]
bogdanm 0:9b334a45a8ff 85 A DMA1 request can be generated when an external trigger (but not
bogdanm 0:9b334a45a8ff 86 a software trigger) occurs if DMA1 requests are enabled using
bogdanm 0:9b334a45a8ff 87 HAL_DAC_Start_DMA()
bogdanm 0:9b334a45a8ff 88 [..]
bogdanm 0:9b334a45a8ff 89 DMA1 requests are mapped as following:
bogdanm 0:9b334a45a8ff 90 (#) DAC channel1 : mapped on DMA1 channel2 which must be
bogdanm 0:9b334a45a8ff 91 already configured
bogdanm 0:9b334a45a8ff 92 (#) DAC channel2 : mapped on DMA1 channel3 which must be
bogdanm 0:9b334a45a8ff 93 already configured
bogdanm 0:9b334a45a8ff 94
bogdanm 0:9b334a45a8ff 95 -@- For Dual mode and specific signal (Triangle and noise) generation please
bogdanm 0:9b334a45a8ff 96 refer to Extension Features Driver description
bogdanm 0:9b334a45a8ff 97
bogdanm 0:9b334a45a8ff 98
bogdanm 0:9b334a45a8ff 99 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 100 ==============================================================================
bogdanm 0:9b334a45a8ff 101 [..]
bogdanm 0:9b334a45a8ff 102 (+) DAC APB clock must be enabled to get write access to DAC
bogdanm 0:9b334a45a8ff 103 registers using HAL_DAC_Init()
bogdanm 0:9b334a45a8ff 104 (+) Configure DAC_OUTx (DAC_OUT1: PA4, DAC_OUT2: PA5) in analog mode.
bogdanm 0:9b334a45a8ff 105 (+) Configure the DAC channel using HAL_DAC_ConfigChannel() function.
bogdanm 0:9b334a45a8ff 106 (+) Enable the DAC channel using HAL_DAC_Start() or HAL_DAC_Start_DMA functions
bogdanm 0:9b334a45a8ff 107
bogdanm 0:9b334a45a8ff 108 *** Polling mode IO operation ***
bogdanm 0:9b334a45a8ff 109 =================================
bogdanm 0:9b334a45a8ff 110 [..]
bogdanm 0:9b334a45a8ff 111 (+) Start the DAC peripheral using HAL_DAC_Start()
bogdanm 0:9b334a45a8ff 112 (+) To read the DAC last data output value value, use the HAL_DAC_GetValue() function.
bogdanm 0:9b334a45a8ff 113 (+) Stop the DAC peripheral using HAL_DAC_Stop()
bogdanm 0:9b334a45a8ff 114
bogdanm 0:9b334a45a8ff 115 *** DMA mode IO operation ***
bogdanm 0:9b334a45a8ff 116 ==============================
bogdanm 0:9b334a45a8ff 117 [..]
bogdanm 0:9b334a45a8ff 118 (+) Start the DAC peripheral using HAL_DAC_Start_DMA(), at this stage the user specify the length
bogdanm 0:9b334a45a8ff 119 of data to be transferred at each end of conversion
bogdanm 0:9b334a45a8ff 120 (+) At the middle of data transfer HAL_DAC_ConvHalfCpltCallbackCh1()or HAL_DAC_ConvHalfCpltCallbackCh2()
bogdanm 0:9b334a45a8ff 121 function is executed and user can add his own code by customization of function pointer
bogdanm 0:9b334a45a8ff 122 HAL_DAC_ConvHalfCpltCallbackCh1 or HAL_DAC_ConvHalfCpltCallbackCh2
bogdanm 0:9b334a45a8ff 123 (+) At The end of data transfer HAL_DAC_ConvCpltCallbackCh1()or HAL_DAC_ConvCpltCallbackCh2()
bogdanm 0:9b334a45a8ff 124 function is executed and user can add his own code by customization of function pointer
bogdanm 0:9b334a45a8ff 125 HAL_DAC_ConvCpltCallbackCh1 or HAL_DAC_ConvCpltCallbackCh2
bogdanm 0:9b334a45a8ff 126 (+) In case of transfer Error, HAL_DAC_ErrorCallbackCh1() function is executed and user can
bogdanm 0:9b334a45a8ff 127 add his own code by customization of function pointer HAL_DAC_ErrorCallbackCh1
bogdanm 0:9b334a45a8ff 128 (+) In case of DMA underrun, DAC interruption triggers and execute internal function HAL_DAC_IRQHandler.
bogdanm 0:9b334a45a8ff 129 HAL_DAC_DMAUnderrunCallbackCh1()or HAL_DAC_DMAUnderrunCallbackCh2()
bogdanm 0:9b334a45a8ff 130 function is executed and user can add his own code by customization of function pointer
bogdanm 0:9b334a45a8ff 131 HAL_DAC_DMAUnderrunCallbackCh1 or HAL_DAC_DMAUnderrunCallbackCh2
bogdanm 0:9b334a45a8ff 132 add his own code by customization of function pointer HAL_DAC_ErrorCallbackCh1
bogdanm 0:9b334a45a8ff 133 (+) Stop the DAC peripheral using HAL_DAC_Stop_DMA()
bogdanm 0:9b334a45a8ff 134
bogdanm 0:9b334a45a8ff 135 *** DAC HAL driver macros list ***
bogdanm 0:9b334a45a8ff 136 =============================================
bogdanm 0:9b334a45a8ff 137 [..]
bogdanm 0:9b334a45a8ff 138 Below the list of most used macros in DAC HAL driver.
bogdanm 0:9b334a45a8ff 139
bogdanm 0:9b334a45a8ff 140 (+) __HAL_DAC_ENABLE : Enable the DAC peripheral
bogdanm 0:9b334a45a8ff 141 (+) __HAL_DAC_DISABLE : Disable the DAC peripheral
bogdanm 0:9b334a45a8ff 142 (+) __HAL_DAC_CLEAR_FLAG: Clear the DAC's pending flags
bogdanm 0:9b334a45a8ff 143 (+) __HAL_DAC_GET_FLAG: Get the selected DAC's flag status
bogdanm 0:9b334a45a8ff 144
bogdanm 0:9b334a45a8ff 145 [..]
bogdanm 0:9b334a45a8ff 146 (@) You can refer to the DAC HAL driver header file for more useful macros
bogdanm 0:9b334a45a8ff 147
bogdanm 0:9b334a45a8ff 148 @endverbatim
bogdanm 0:9b334a45a8ff 149 ******************************************************************************
bogdanm 0:9b334a45a8ff 150 * @attention
bogdanm 0:9b334a45a8ff 151 *
bogdanm 0:9b334a45a8ff 152 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 153 *
bogdanm 0:9b334a45a8ff 154 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 155 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 156 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 157 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 158 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 159 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 160 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 161 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 162 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 163 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 164 *
bogdanm 0:9b334a45a8ff 165 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 166 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 167 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 168 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 169 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 170 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 171 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 172 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 173 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 174 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 175 *
bogdanm 0:9b334a45a8ff 176 ******************************************************************************
bogdanm 0:9b334a45a8ff 177 */
bogdanm 0:9b334a45a8ff 178
bogdanm 0:9b334a45a8ff 179
bogdanm 0:9b334a45a8ff 180 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 181 #include "stm32l1xx_hal.h"
bogdanm 0:9b334a45a8ff 182
bogdanm 0:9b334a45a8ff 183 /** @addtogroup STM32L1xx_HAL_Driver
bogdanm 0:9b334a45a8ff 184 * @{
bogdanm 0:9b334a45a8ff 185 */
bogdanm 0:9b334a45a8ff 186
bogdanm 0:9b334a45a8ff 187 /** @defgroup DAC DAC
bogdanm 0:9b334a45a8ff 188 * @brief DAC driver modules
bogdanm 0:9b334a45a8ff 189 * @{
bogdanm 0:9b334a45a8ff 190 */
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192 #ifdef HAL_DAC_MODULE_ENABLED
bogdanm 0:9b334a45a8ff 193
bogdanm 0:9b334a45a8ff 194 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 195 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 196 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 197 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 198 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 199 /** @defgroup DAC_Private_Functions DAC Private Functions
bogdanm 0:9b334a45a8ff 200 * @{
bogdanm 0:9b334a45a8ff 201 */
bogdanm 0:9b334a45a8ff 202 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 203 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 204 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma);
bogdanm 0:9b334a45a8ff 205
bogdanm 0:9b334a45a8ff 206 /**
bogdanm 0:9b334a45a8ff 207 * @}
bogdanm 0:9b334a45a8ff 208 */
bogdanm 0:9b334a45a8ff 209 /* Private functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 210
bogdanm 0:9b334a45a8ff 211 /** @defgroup DAC_Exported_Functions DAC Exported Functions
bogdanm 0:9b334a45a8ff 212 * @{
bogdanm 0:9b334a45a8ff 213 */
bogdanm 0:9b334a45a8ff 214
bogdanm 0:9b334a45a8ff 215 /** @defgroup DAC_Exported_Functions_Group1 Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 216 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 217 *
bogdanm 0:9b334a45a8ff 218 @verbatim
bogdanm 0:9b334a45a8ff 219 ==============================================================================
bogdanm 0:9b334a45a8ff 220 ##### Initialization and de-initialization functions #####
bogdanm 0:9b334a45a8ff 221 ==============================================================================
bogdanm 0:9b334a45a8ff 222 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 223 (+) Initialize and configure the DAC.
bogdanm 0:9b334a45a8ff 224 (+) De-initialize the DAC.
bogdanm 0:9b334a45a8ff 225
bogdanm 0:9b334a45a8ff 226 @endverbatim
bogdanm 0:9b334a45a8ff 227 * @{
bogdanm 0:9b334a45a8ff 228 */
bogdanm 0:9b334a45a8ff 229
bogdanm 0:9b334a45a8ff 230 /**
bogdanm 0:9b334a45a8ff 231 * @brief Initializes the DAC peripheral according to the specified parameters
bogdanm 0:9b334a45a8ff 232 * in the DAC_InitStruct.
bogdanm 0:9b334a45a8ff 233 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 234 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 235 * @retval HAL status
bogdanm 0:9b334a45a8ff 236 */
bogdanm 0:9b334a45a8ff 237 HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 238 {
bogdanm 0:9b334a45a8ff 239 /* Check DAC handle */
bogdanm 0:9b334a45a8ff 240 if(hdac == HAL_NULL)
bogdanm 0:9b334a45a8ff 241 {
bogdanm 0:9b334a45a8ff 242 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 243 }
bogdanm 0:9b334a45a8ff 244 /* Check the parameters */
bogdanm 0:9b334a45a8ff 245 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
bogdanm 0:9b334a45a8ff 246
bogdanm 0:9b334a45a8ff 247 if(hdac->State == HAL_DAC_STATE_RESET)
bogdanm 0:9b334a45a8ff 248 {
bogdanm 0:9b334a45a8ff 249 /* Init the low level hardware */
bogdanm 0:9b334a45a8ff 250 HAL_DAC_MspInit(hdac);
bogdanm 0:9b334a45a8ff 251 }
bogdanm 0:9b334a45a8ff 252
bogdanm 0:9b334a45a8ff 253 /* Initialize the DAC state*/
bogdanm 0:9b334a45a8ff 254 hdac->State = HAL_DAC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 255
bogdanm 0:9b334a45a8ff 256 /* Set DAC error code to none */
bogdanm 0:9b334a45a8ff 257 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
bogdanm 0:9b334a45a8ff 258
bogdanm 0:9b334a45a8ff 259 /* Initialize the DAC state*/
bogdanm 0:9b334a45a8ff 260 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 261
bogdanm 0:9b334a45a8ff 262 /* Return function status */
bogdanm 0:9b334a45a8ff 263 return HAL_OK;
bogdanm 0:9b334a45a8ff 264 }
bogdanm 0:9b334a45a8ff 265
bogdanm 0:9b334a45a8ff 266 /**
bogdanm 0:9b334a45a8ff 267 * @brief Deinitializes the DAC peripheral registers to their default reset values.
bogdanm 0:9b334a45a8ff 268 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 269 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 270 * @retval HAL status
bogdanm 0:9b334a45a8ff 271 */
bogdanm 0:9b334a45a8ff 272 HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 273 {
bogdanm 0:9b334a45a8ff 274 /* Check DAC handle */
bogdanm 0:9b334a45a8ff 275 if(hdac == HAL_NULL)
bogdanm 0:9b334a45a8ff 276 {
bogdanm 0:9b334a45a8ff 277 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 278 }
bogdanm 0:9b334a45a8ff 279
bogdanm 0:9b334a45a8ff 280 /* Check the parameters */
bogdanm 0:9b334a45a8ff 281 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
bogdanm 0:9b334a45a8ff 282
bogdanm 0:9b334a45a8ff 283 /* Change DAC state */
bogdanm 0:9b334a45a8ff 284 hdac->State = HAL_DAC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 285
bogdanm 0:9b334a45a8ff 286 /* DeInit the low level hardware */
bogdanm 0:9b334a45a8ff 287 HAL_DAC_MspDeInit(hdac);
bogdanm 0:9b334a45a8ff 288
bogdanm 0:9b334a45a8ff 289 /* Set DAC error code to none */
bogdanm 0:9b334a45a8ff 290 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
bogdanm 0:9b334a45a8ff 291
bogdanm 0:9b334a45a8ff 292 /* Change DAC state */
bogdanm 0:9b334a45a8ff 293 hdac->State = HAL_DAC_STATE_RESET;
bogdanm 0:9b334a45a8ff 294
bogdanm 0:9b334a45a8ff 295 /* Release Lock */
bogdanm 0:9b334a45a8ff 296 __HAL_UNLOCK(hdac);
bogdanm 0:9b334a45a8ff 297
bogdanm 0:9b334a45a8ff 298 /* Return function status */
bogdanm 0:9b334a45a8ff 299 return HAL_OK;
bogdanm 0:9b334a45a8ff 300 }
bogdanm 0:9b334a45a8ff 301
bogdanm 0:9b334a45a8ff 302 /**
bogdanm 0:9b334a45a8ff 303 * @brief Initializes the DAC MSP.
bogdanm 0:9b334a45a8ff 304 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 305 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 306 * @retval None
bogdanm 0:9b334a45a8ff 307 */
bogdanm 0:9b334a45a8ff 308 __weak void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 309 {
bogdanm 0:9b334a45a8ff 310 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 311 the HAL_DAC_MspInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 312 */
bogdanm 0:9b334a45a8ff 313 }
bogdanm 0:9b334a45a8ff 314
bogdanm 0:9b334a45a8ff 315 /**
bogdanm 0:9b334a45a8ff 316 * @brief DeInitializes the DAC MSP.
bogdanm 0:9b334a45a8ff 317 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 318 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 319 * @retval None
bogdanm 0:9b334a45a8ff 320 */
bogdanm 0:9b334a45a8ff 321 __weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 322 {
bogdanm 0:9b334a45a8ff 323 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 324 the HAL_DAC_MspDeInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 325 */
bogdanm 0:9b334a45a8ff 326 }
bogdanm 0:9b334a45a8ff 327
bogdanm 0:9b334a45a8ff 328 /**
bogdanm 0:9b334a45a8ff 329 * @}
bogdanm 0:9b334a45a8ff 330 */
bogdanm 0:9b334a45a8ff 331
bogdanm 0:9b334a45a8ff 332 /** @defgroup DAC_Exported_Functions_Group2 IO operation functions
bogdanm 0:9b334a45a8ff 333 * @brief IO operation functions
bogdanm 0:9b334a45a8ff 334 *
bogdanm 0:9b334a45a8ff 335 @verbatim
bogdanm 0:9b334a45a8ff 336 ==============================================================================
bogdanm 0:9b334a45a8ff 337 ##### IO operation functions #####
bogdanm 0:9b334a45a8ff 338 ==============================================================================
bogdanm 0:9b334a45a8ff 339 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 340 (+) Start conversion.
bogdanm 0:9b334a45a8ff 341 (+) Stop conversion.
bogdanm 0:9b334a45a8ff 342 (+) Start conversion and enable DMA transfer.
bogdanm 0:9b334a45a8ff 343 (+) Stop conversion and disable DMA transfer.
bogdanm 0:9b334a45a8ff 344 (+) Get result of conversion.
bogdanm 0:9b334a45a8ff 345
bogdanm 0:9b334a45a8ff 346 @endverbatim
bogdanm 0:9b334a45a8ff 347 * @{
bogdanm 0:9b334a45a8ff 348 */
bogdanm 0:9b334a45a8ff 349
bogdanm 0:9b334a45a8ff 350 /**
bogdanm 0:9b334a45a8ff 351 * @brief Enables DAC and starts conversion of channel.
bogdanm 0:9b334a45a8ff 352 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 353 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 354 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 355 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 356 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 357 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 358 * @retval HAL status
bogdanm 0:9b334a45a8ff 359 */
bogdanm 0:9b334a45a8ff 360 HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel)
bogdanm 0:9b334a45a8ff 361 {
bogdanm 0:9b334a45a8ff 362 uint32_t tmp1 = 0, tmp2 = 0;
bogdanm 0:9b334a45a8ff 363
bogdanm 0:9b334a45a8ff 364 /* Check the parameters */
bogdanm 0:9b334a45a8ff 365 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 366
bogdanm 0:9b334a45a8ff 367 /* Process locked */
bogdanm 0:9b334a45a8ff 368 __HAL_LOCK(hdac);
bogdanm 0:9b334a45a8ff 369
bogdanm 0:9b334a45a8ff 370 /* Change DAC state */
bogdanm 0:9b334a45a8ff 371 hdac->State = HAL_DAC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 372
bogdanm 0:9b334a45a8ff 373 /* Enable the Peripharal */
bogdanm 0:9b334a45a8ff 374 __HAL_DAC_ENABLE(hdac, Channel);
bogdanm 0:9b334a45a8ff 375
bogdanm 0:9b334a45a8ff 376 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 377 {
bogdanm 0:9b334a45a8ff 378 tmp1 = hdac->Instance->CR & DAC_CR_TEN1;
bogdanm 0:9b334a45a8ff 379 tmp2 = hdac->Instance->CR & DAC_CR_TSEL1;
bogdanm 0:9b334a45a8ff 380 /* Check if software trigger enabled */
bogdanm 0:9b334a45a8ff 381 if((tmp1 == DAC_CR_TEN1) && (tmp2 == DAC_CR_TSEL1))
bogdanm 0:9b334a45a8ff 382 {
bogdanm 0:9b334a45a8ff 383 /* Enable the selected DAC software conversion */
bogdanm 0:9b334a45a8ff 384 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
bogdanm 0:9b334a45a8ff 385 }
bogdanm 0:9b334a45a8ff 386 }
bogdanm 0:9b334a45a8ff 387 else
bogdanm 0:9b334a45a8ff 388 {
bogdanm 0:9b334a45a8ff 389 tmp1 = hdac->Instance->CR & DAC_CR_TEN2;
bogdanm 0:9b334a45a8ff 390 tmp2 = hdac->Instance->CR & DAC_CR_TSEL2;
bogdanm 0:9b334a45a8ff 391 /* Check if software trigger enabled */
bogdanm 0:9b334a45a8ff 392 if((tmp1 == DAC_CR_TEN2) && (tmp2 == DAC_CR_TSEL2))
bogdanm 0:9b334a45a8ff 393 {
bogdanm 0:9b334a45a8ff 394 /* Enable the selected DAC software conversion*/
bogdanm 0:9b334a45a8ff 395 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
bogdanm 0:9b334a45a8ff 396 }
bogdanm 0:9b334a45a8ff 397 }
bogdanm 0:9b334a45a8ff 398
bogdanm 0:9b334a45a8ff 399 /* Change DAC state */
bogdanm 0:9b334a45a8ff 400 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 401
bogdanm 0:9b334a45a8ff 402 /* Process unlocked */
bogdanm 0:9b334a45a8ff 403 __HAL_UNLOCK(hdac);
bogdanm 0:9b334a45a8ff 404
bogdanm 0:9b334a45a8ff 405 /* Return function status */
bogdanm 0:9b334a45a8ff 406 return HAL_OK;
bogdanm 0:9b334a45a8ff 407 }
bogdanm 0:9b334a45a8ff 408
bogdanm 0:9b334a45a8ff 409 /**
bogdanm 0:9b334a45a8ff 410 * @brief Disables DAC and stop conversion of channel.
bogdanm 0:9b334a45a8ff 411 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 412 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 413 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 414 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 415 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 416 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 417 * @retval HAL status
bogdanm 0:9b334a45a8ff 418 */
bogdanm 0:9b334a45a8ff 419 HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel)
bogdanm 0:9b334a45a8ff 420 {
bogdanm 0:9b334a45a8ff 421 /* Check the parameters */
bogdanm 0:9b334a45a8ff 422 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 423
bogdanm 0:9b334a45a8ff 424 /* Disable the Peripheral */
bogdanm 0:9b334a45a8ff 425 __HAL_DAC_DISABLE(hdac, Channel);
bogdanm 0:9b334a45a8ff 426
bogdanm 0:9b334a45a8ff 427 /* Change DAC state */
bogdanm 0:9b334a45a8ff 428 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 429
bogdanm 0:9b334a45a8ff 430 /* Return function status */
bogdanm 0:9b334a45a8ff 431 return HAL_OK;
bogdanm 0:9b334a45a8ff 432 }
bogdanm 0:9b334a45a8ff 433
bogdanm 0:9b334a45a8ff 434 /**
bogdanm 0:9b334a45a8ff 435 * @brief Enables DAC and starts conversion of channel.
bogdanm 0:9b334a45a8ff 436 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 437 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 438 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 439 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 440 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 441 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 442 * @param pData: The destination peripheral Buffer address.
bogdanm 0:9b334a45a8ff 443 * @param Length: The length of data to be transferred from memory to DAC peripheral
bogdanm 0:9b334a45a8ff 444 * @param Alignment: Specifies the data alignment for DAC channel.
bogdanm 0:9b334a45a8ff 445 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 446 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
bogdanm 0:9b334a45a8ff 447 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
bogdanm 0:9b334a45a8ff 448 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
bogdanm 0:9b334a45a8ff 449 * @retval HAL status
bogdanm 0:9b334a45a8ff 450 */
bogdanm 0:9b334a45a8ff 451 HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment)
bogdanm 0:9b334a45a8ff 452 {
bogdanm 0:9b334a45a8ff 453 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 454
bogdanm 0:9b334a45a8ff 455 /* Check the parameters */
bogdanm 0:9b334a45a8ff 456 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 457 assert_param(IS_DAC_ALIGN(Alignment));
bogdanm 0:9b334a45a8ff 458
bogdanm 0:9b334a45a8ff 459 /* Process locked */
bogdanm 0:9b334a45a8ff 460 __HAL_LOCK(hdac);
bogdanm 0:9b334a45a8ff 461
bogdanm 0:9b334a45a8ff 462 /* Change DAC state */
bogdanm 0:9b334a45a8ff 463 hdac->State = HAL_DAC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 464
bogdanm 0:9b334a45a8ff 465 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 466 {
bogdanm 0:9b334a45a8ff 467 /* Set the DMA transfer complete callback for channel1 */
bogdanm 0:9b334a45a8ff 468 hdac->DMA_Handle1->XferCpltCallback = DAC_DMAConvCpltCh1;
bogdanm 0:9b334a45a8ff 469
bogdanm 0:9b334a45a8ff 470 /* Set the DMA half transfer complete callback for channel1 */
bogdanm 0:9b334a45a8ff 471 hdac->DMA_Handle1->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh1;
bogdanm 0:9b334a45a8ff 472
bogdanm 0:9b334a45a8ff 473 /* Set the DMA error callback for channel1 */
bogdanm 0:9b334a45a8ff 474 hdac->DMA_Handle1->XferErrorCallback = DAC_DMAErrorCh1;
bogdanm 0:9b334a45a8ff 475
bogdanm 0:9b334a45a8ff 476 /* Enable the selected DAC channel1 DMA request */
bogdanm 0:9b334a45a8ff 477 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
bogdanm 0:9b334a45a8ff 478
bogdanm 0:9b334a45a8ff 479 /* Case of use of channel 1 */
bogdanm 0:9b334a45a8ff 480 switch(Alignment)
bogdanm 0:9b334a45a8ff 481 {
bogdanm 0:9b334a45a8ff 482 case DAC_ALIGN_12B_R:
bogdanm 0:9b334a45a8ff 483 /* Get DHR12R1 address */
bogdanm 0:9b334a45a8ff 484 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
bogdanm 0:9b334a45a8ff 485 break;
bogdanm 0:9b334a45a8ff 486 case DAC_ALIGN_12B_L:
bogdanm 0:9b334a45a8ff 487 /* Get DHR12L1 address */
bogdanm 0:9b334a45a8ff 488 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
bogdanm 0:9b334a45a8ff 489 break;
bogdanm 0:9b334a45a8ff 490 case DAC_ALIGN_8B_R:
bogdanm 0:9b334a45a8ff 491 /* Get DHR8R1 address */
bogdanm 0:9b334a45a8ff 492 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
bogdanm 0:9b334a45a8ff 493 break;
bogdanm 0:9b334a45a8ff 494 default:
bogdanm 0:9b334a45a8ff 495 break;
bogdanm 0:9b334a45a8ff 496 }
bogdanm 0:9b334a45a8ff 497 }
bogdanm 0:9b334a45a8ff 498 else
bogdanm 0:9b334a45a8ff 499 {
bogdanm 0:9b334a45a8ff 500 /* Set the DMA transfer complete callback for channel2 */
bogdanm 0:9b334a45a8ff 501 hdac->DMA_Handle2->XferCpltCallback = DAC_DMAConvCpltCh2;
bogdanm 0:9b334a45a8ff 502
bogdanm 0:9b334a45a8ff 503 /* Set the DMA half transfer complete callback for channel2 */
bogdanm 0:9b334a45a8ff 504 hdac->DMA_Handle2->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh2;
bogdanm 0:9b334a45a8ff 505
bogdanm 0:9b334a45a8ff 506 /* Set the DMA error callback for channel2 */
bogdanm 0:9b334a45a8ff 507 hdac->DMA_Handle2->XferErrorCallback = DAC_DMAErrorCh2;
bogdanm 0:9b334a45a8ff 508
bogdanm 0:9b334a45a8ff 509 /* Enable the selected DAC channel2 DMA request */
bogdanm 0:9b334a45a8ff 510 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
bogdanm 0:9b334a45a8ff 511
bogdanm 0:9b334a45a8ff 512 /* Case of use of channel 2 */
bogdanm 0:9b334a45a8ff 513 switch(Alignment)
bogdanm 0:9b334a45a8ff 514 {
bogdanm 0:9b334a45a8ff 515 case DAC_ALIGN_12B_R:
bogdanm 0:9b334a45a8ff 516 /* Get DHR12R2 address */
bogdanm 0:9b334a45a8ff 517 tmpreg = (uint32_t)&hdac->Instance->DHR12R2;
bogdanm 0:9b334a45a8ff 518 break;
bogdanm 0:9b334a45a8ff 519 case DAC_ALIGN_12B_L:
bogdanm 0:9b334a45a8ff 520 /* Get DHR12L2 address */
bogdanm 0:9b334a45a8ff 521 tmpreg = (uint32_t)&hdac->Instance->DHR12L2;
bogdanm 0:9b334a45a8ff 522 break;
bogdanm 0:9b334a45a8ff 523 case DAC_ALIGN_8B_R:
bogdanm 0:9b334a45a8ff 524 /* Get DHR8R2 address */
bogdanm 0:9b334a45a8ff 525 tmpreg = (uint32_t)&hdac->Instance->DHR8R2;
bogdanm 0:9b334a45a8ff 526 break;
bogdanm 0:9b334a45a8ff 527 default:
bogdanm 0:9b334a45a8ff 528 break;
bogdanm 0:9b334a45a8ff 529 }
bogdanm 0:9b334a45a8ff 530 }
bogdanm 0:9b334a45a8ff 531
bogdanm 0:9b334a45a8ff 532 /* Enable the DMA Stream */
bogdanm 0:9b334a45a8ff 533 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 534 {
bogdanm 0:9b334a45a8ff 535 /* Enable the DAC DMA underrun interrupt */
bogdanm 0:9b334a45a8ff 536 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR1);
bogdanm 0:9b334a45a8ff 537
bogdanm 0:9b334a45a8ff 538 /* Enable the DMA Stream */
bogdanm 0:9b334a45a8ff 539 HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
bogdanm 0:9b334a45a8ff 540 }
bogdanm 0:9b334a45a8ff 541 else
bogdanm 0:9b334a45a8ff 542 {
bogdanm 0:9b334a45a8ff 543 /* Enable the DAC DMA underrun interrupt */
bogdanm 0:9b334a45a8ff 544 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR2);
bogdanm 0:9b334a45a8ff 545
bogdanm 0:9b334a45a8ff 546 /* Enable the DMA Stream */
bogdanm 0:9b334a45a8ff 547 HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length);
bogdanm 0:9b334a45a8ff 548 }
bogdanm 0:9b334a45a8ff 549
bogdanm 0:9b334a45a8ff 550 /* Enable the Peripharal */
bogdanm 0:9b334a45a8ff 551 __HAL_DAC_ENABLE(hdac, Channel);
bogdanm 0:9b334a45a8ff 552
bogdanm 0:9b334a45a8ff 553 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 554 __HAL_UNLOCK(hdac);
bogdanm 0:9b334a45a8ff 555
bogdanm 0:9b334a45a8ff 556 /* Return function status */
bogdanm 0:9b334a45a8ff 557 return HAL_OK;
bogdanm 0:9b334a45a8ff 558 }
bogdanm 0:9b334a45a8ff 559
bogdanm 0:9b334a45a8ff 560 /**
bogdanm 0:9b334a45a8ff 561 * @brief Disables DAC and stop conversion of channel.
bogdanm 0:9b334a45a8ff 562 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 563 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 564 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 565 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 566 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 567 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 568 * @retval HAL status
bogdanm 0:9b334a45a8ff 569 */
bogdanm 0:9b334a45a8ff 570 HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel)
bogdanm 0:9b334a45a8ff 571 {
bogdanm 0:9b334a45a8ff 572 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 573
bogdanm 0:9b334a45a8ff 574 /* Check the parameters */
bogdanm 0:9b334a45a8ff 575 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 576
bogdanm 0:9b334a45a8ff 577 /* Disable the selected DAC channel DMA request */
bogdanm 0:9b334a45a8ff 578 hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << Channel);
bogdanm 0:9b334a45a8ff 579
bogdanm 0:9b334a45a8ff 580 /* Disable the Peripharal */
bogdanm 0:9b334a45a8ff 581 __HAL_DAC_DISABLE(hdac, Channel);
bogdanm 0:9b334a45a8ff 582
bogdanm 0:9b334a45a8ff 583 /* Disable the DMA Channel */
bogdanm 0:9b334a45a8ff 584 /* Channel1 is used */
bogdanm 0:9b334a45a8ff 585 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 586 {
bogdanm 0:9b334a45a8ff 587 status = HAL_DMA_Abort(hdac->DMA_Handle1);
bogdanm 0:9b334a45a8ff 588 }
bogdanm 0:9b334a45a8ff 589 else /* Channel2 is used for */
bogdanm 0:9b334a45a8ff 590 {
bogdanm 0:9b334a45a8ff 591 status = HAL_DMA_Abort(hdac->DMA_Handle2);
bogdanm 0:9b334a45a8ff 592 }
bogdanm 0:9b334a45a8ff 593
bogdanm 0:9b334a45a8ff 594 /* Check if DMA Channel effectively disabled */
bogdanm 0:9b334a45a8ff 595 if(status != HAL_OK)
bogdanm 0:9b334a45a8ff 596 {
bogdanm 0:9b334a45a8ff 597 /* Update ADC state machine to error */
bogdanm 0:9b334a45a8ff 598 hdac->State = HAL_DAC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 599 }
bogdanm 0:9b334a45a8ff 600 else
bogdanm 0:9b334a45a8ff 601 {
bogdanm 0:9b334a45a8ff 602 /* Change DAC state */
bogdanm 0:9b334a45a8ff 603 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 604 }
bogdanm 0:9b334a45a8ff 605
bogdanm 0:9b334a45a8ff 606 /* Return function status */
bogdanm 0:9b334a45a8ff 607 return status;
bogdanm 0:9b334a45a8ff 608 }
bogdanm 0:9b334a45a8ff 609
bogdanm 0:9b334a45a8ff 610 /**
bogdanm 0:9b334a45a8ff 611 * @brief Returns the last data output value of the selected DAC channel.
bogdanm 0:9b334a45a8ff 612 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 613 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 614 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 615 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 616 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 617 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 618 * @retval The selected DAC channel data output value.
bogdanm 0:9b334a45a8ff 619 */
bogdanm 0:9b334a45a8ff 620 uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel)
bogdanm 0:9b334a45a8ff 621 {
bogdanm 0:9b334a45a8ff 622 /* Check the parameters */
bogdanm 0:9b334a45a8ff 623 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 624
bogdanm 0:9b334a45a8ff 625 /* Returns the DAC channel data output register value */
bogdanm 0:9b334a45a8ff 626 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 627 {
bogdanm 0:9b334a45a8ff 628 return hdac->Instance->DOR1;
bogdanm 0:9b334a45a8ff 629 }
bogdanm 0:9b334a45a8ff 630 else
bogdanm 0:9b334a45a8ff 631 {
bogdanm 0:9b334a45a8ff 632 return hdac->Instance->DOR2;
bogdanm 0:9b334a45a8ff 633 }
bogdanm 0:9b334a45a8ff 634 }
bogdanm 0:9b334a45a8ff 635
bogdanm 0:9b334a45a8ff 636 /**
bogdanm 0:9b334a45a8ff 637 * @brief Handles DAC interrupt request
bogdanm 0:9b334a45a8ff 638 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 639 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 640 * @retval None
bogdanm 0:9b334a45a8ff 641 */
bogdanm 0:9b334a45a8ff 642 void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 643 {
bogdanm 0:9b334a45a8ff 644 /* Check underrun flag of DAC channel 1 */
bogdanm 0:9b334a45a8ff 645 if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR1))
bogdanm 0:9b334a45a8ff 646 {
bogdanm 0:9b334a45a8ff 647 /* Change DAC state to error state */
bogdanm 0:9b334a45a8ff 648 hdac->State = HAL_DAC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 649
bogdanm 0:9b334a45a8ff 650 /* Set DAC error code to chanel1 DMA underrun error */
bogdanm 0:9b334a45a8ff 651 hdac->ErrorCode |= HAL_DAC_ERROR_DMAUNDERRUNCH1;
bogdanm 0:9b334a45a8ff 652
bogdanm 0:9b334a45a8ff 653 /* Clear the underrun flag */
bogdanm 0:9b334a45a8ff 654 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR1);
bogdanm 0:9b334a45a8ff 655
bogdanm 0:9b334a45a8ff 656 /* Disable the selected DAC channel1 DMA request */
bogdanm 0:9b334a45a8ff 657 hdac->Instance->CR &= ~DAC_CR_DMAEN1;
bogdanm 0:9b334a45a8ff 658
bogdanm 0:9b334a45a8ff 659 /* Error callback */
bogdanm 0:9b334a45a8ff 660 HAL_DAC_DMAUnderrunCallbackCh1(hdac);
bogdanm 0:9b334a45a8ff 661 }
bogdanm 0:9b334a45a8ff 662
bogdanm 0:9b334a45a8ff 663 /* Check underrun flag of DAC channel 2 */
bogdanm 0:9b334a45a8ff 664 if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR2))
bogdanm 0:9b334a45a8ff 665 {
bogdanm 0:9b334a45a8ff 666 /* Change DAC state to error state */
bogdanm 0:9b334a45a8ff 667 hdac->State = HAL_DAC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 668
bogdanm 0:9b334a45a8ff 669 /* Set DAC error code to channel2 DMA underrun error */
bogdanm 0:9b334a45a8ff 670 hdac->ErrorCode |= HAL_DAC_ERROR_DMAUNDERRUNCH2;
bogdanm 0:9b334a45a8ff 671
bogdanm 0:9b334a45a8ff 672 /* Clear the underrun flag */
bogdanm 0:9b334a45a8ff 673 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR2);
bogdanm 0:9b334a45a8ff 674
bogdanm 0:9b334a45a8ff 675 /* Disable the selected DAC channel1 DMA request */
bogdanm 0:9b334a45a8ff 676 hdac->Instance->CR &= ~DAC_CR_DMAEN2;
bogdanm 0:9b334a45a8ff 677
bogdanm 0:9b334a45a8ff 678 /* Error callback */
bogdanm 0:9b334a45a8ff 679 HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
bogdanm 0:9b334a45a8ff 680 }
bogdanm 0:9b334a45a8ff 681 }
bogdanm 0:9b334a45a8ff 682
bogdanm 0:9b334a45a8ff 683 /**
bogdanm 0:9b334a45a8ff 684 * @brief Conversion complete callback in non blocking mode for Channel1
bogdanm 0:9b334a45a8ff 685 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 686 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 687 * @retval None
bogdanm 0:9b334a45a8ff 688 */
bogdanm 0:9b334a45a8ff 689 __weak void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 690 {
bogdanm 0:9b334a45a8ff 691 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 692 the HAL_DAC_ConvCpltCallbackCh1 could be implemented in the user file
bogdanm 0:9b334a45a8ff 693 */
bogdanm 0:9b334a45a8ff 694 }
bogdanm 0:9b334a45a8ff 695
bogdanm 0:9b334a45a8ff 696 /**
bogdanm 0:9b334a45a8ff 697 * @brief Conversion half DMA transfer callback in non blocking mode for Channel1
bogdanm 0:9b334a45a8ff 698 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 699 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 700 * @retval None
bogdanm 0:9b334a45a8ff 701 */
bogdanm 0:9b334a45a8ff 702 __weak void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 703 {
bogdanm 0:9b334a45a8ff 704 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 705 the HAL_DAC_ConvHalfCpltCallbackCh1 could be implemented in the user file
bogdanm 0:9b334a45a8ff 706 */
bogdanm 0:9b334a45a8ff 707 }
bogdanm 0:9b334a45a8ff 708
bogdanm 0:9b334a45a8ff 709 /**
bogdanm 0:9b334a45a8ff 710 * @brief Error DAC callback for Channel1.
bogdanm 0:9b334a45a8ff 711 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 712 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 713 * @retval None
bogdanm 0:9b334a45a8ff 714 */
bogdanm 0:9b334a45a8ff 715 __weak void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac)
bogdanm 0:9b334a45a8ff 716 {
bogdanm 0:9b334a45a8ff 717 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 718 the HAL_DAC_ErrorCallbackCh1 could be implemented in the user file
bogdanm 0:9b334a45a8ff 719 */
bogdanm 0:9b334a45a8ff 720 }
bogdanm 0:9b334a45a8ff 721
bogdanm 0:9b334a45a8ff 722 /**
bogdanm 0:9b334a45a8ff 723 * @brief DMA underrun DAC callback for channel1.
bogdanm 0:9b334a45a8ff 724 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 725 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 726 * @retval None
bogdanm 0:9b334a45a8ff 727 */
bogdanm 0:9b334a45a8ff 728 __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
bogdanm 0:9b334a45a8ff 729 {
bogdanm 0:9b334a45a8ff 730 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 731 the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
bogdanm 0:9b334a45a8ff 732 */
bogdanm 0:9b334a45a8ff 733 }
bogdanm 0:9b334a45a8ff 734
bogdanm 0:9b334a45a8ff 735 /**
bogdanm 0:9b334a45a8ff 736 * @}
bogdanm 0:9b334a45a8ff 737 */
bogdanm 0:9b334a45a8ff 738
bogdanm 0:9b334a45a8ff 739 /** @defgroup DAC_Exported_Functions_Group3 Peripheral Control functions
bogdanm 0:9b334a45a8ff 740 * @brief Peripheral Control functions
bogdanm 0:9b334a45a8ff 741 *
bogdanm 0:9b334a45a8ff 742 @verbatim
bogdanm 0:9b334a45a8ff 743 ==============================================================================
bogdanm 0:9b334a45a8ff 744 ##### Peripheral Control functions #####
bogdanm 0:9b334a45a8ff 745 ==============================================================================
bogdanm 0:9b334a45a8ff 746 [..] This section provides functions allowing to:
bogdanm 0:9b334a45a8ff 747 (+) Configure channels.
bogdanm 0:9b334a45a8ff 748 (+) Set the specified data holding register value for DAC channel.
bogdanm 0:9b334a45a8ff 749
bogdanm 0:9b334a45a8ff 750 @endverbatim
bogdanm 0:9b334a45a8ff 751 * @{
bogdanm 0:9b334a45a8ff 752 */
bogdanm 0:9b334a45a8ff 753
bogdanm 0:9b334a45a8ff 754 /**
bogdanm 0:9b334a45a8ff 755 * @brief Configures the selected DAC channel.
bogdanm 0:9b334a45a8ff 756 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 757 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 758 * @param sConfig: DAC configuration structure.
bogdanm 0:9b334a45a8ff 759 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 760 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 761 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 762 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 763 * @retval HAL status
bogdanm 0:9b334a45a8ff 764 */
bogdanm 0:9b334a45a8ff 765 HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel)
bogdanm 0:9b334a45a8ff 766 {
bogdanm 0:9b334a45a8ff 767 uint32_t tmpreg1 = 0, tmpreg2 = 0;
bogdanm 0:9b334a45a8ff 768
bogdanm 0:9b334a45a8ff 769 /* Check the DAC parameters */
bogdanm 0:9b334a45a8ff 770 assert_param(IS_DAC_TRIGGER(sConfig->DAC_Trigger));
bogdanm 0:9b334a45a8ff 771 assert_param(IS_DAC_OUTPUT_BUFFER_STATE(sConfig->DAC_OutputBuffer));
bogdanm 0:9b334a45a8ff 772 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 773
bogdanm 0:9b334a45a8ff 774 /* Process locked */
bogdanm 0:9b334a45a8ff 775 __HAL_LOCK(hdac);
bogdanm 0:9b334a45a8ff 776
bogdanm 0:9b334a45a8ff 777 /* Change DAC state */
bogdanm 0:9b334a45a8ff 778 hdac->State = HAL_DAC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 779
bogdanm 0:9b334a45a8ff 780 /* Get the DAC CR value */
bogdanm 0:9b334a45a8ff 781 tmpreg1 = DAC->CR;
bogdanm 0:9b334a45a8ff 782 /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
bogdanm 0:9b334a45a8ff 783 tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1 | DAC_CR_BOFF1)) << Channel);
bogdanm 0:9b334a45a8ff 784 /* Configure for the selected DAC channel: buffer output, trigger */
bogdanm 0:9b334a45a8ff 785 /* Set TSELx and TENx bits according to DAC_Trigger value */
bogdanm 0:9b334a45a8ff 786 /* Set BOFFx bit according to DAC_OutputBuffer value */
bogdanm 0:9b334a45a8ff 787 tmpreg2 = (sConfig->DAC_Trigger | sConfig->DAC_OutputBuffer);
bogdanm 0:9b334a45a8ff 788 /* Calculate CR register value depending on DAC_Channel */
bogdanm 0:9b334a45a8ff 789 tmpreg1 |= tmpreg2 << Channel;
bogdanm 0:9b334a45a8ff 790 /* Write to DAC CR */
bogdanm 0:9b334a45a8ff 791 DAC->CR = tmpreg1;
bogdanm 0:9b334a45a8ff 792 /* Disable wave generation */
bogdanm 0:9b334a45a8ff 793 DAC->CR &= ~(DAC_CR_WAVE1 << Channel);
bogdanm 0:9b334a45a8ff 794
bogdanm 0:9b334a45a8ff 795 /* Change DAC state */
bogdanm 0:9b334a45a8ff 796 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 797
bogdanm 0:9b334a45a8ff 798 /* Process unlocked */
bogdanm 0:9b334a45a8ff 799 __HAL_UNLOCK(hdac);
bogdanm 0:9b334a45a8ff 800
bogdanm 0:9b334a45a8ff 801 /* Return function status */
bogdanm 0:9b334a45a8ff 802 return HAL_OK;
bogdanm 0:9b334a45a8ff 803 }
bogdanm 0:9b334a45a8ff 804
bogdanm 0:9b334a45a8ff 805 /**
bogdanm 0:9b334a45a8ff 806 * @brief Set the specified data holding register value for DAC channel.
bogdanm 0:9b334a45a8ff 807 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 808 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 809 * @param Channel: The selected DAC channel.
bogdanm 0:9b334a45a8ff 810 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 811 * @arg DAC_CHANNEL_1: DAC Channel1 selected
bogdanm 0:9b334a45a8ff 812 * @arg DAC_CHANNEL_2: DAC Channel2 selected
bogdanm 0:9b334a45a8ff 813 * @param Alignment: Specifies the data alignment.
bogdanm 0:9b334a45a8ff 814 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 815 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
bogdanm 0:9b334a45a8ff 816 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
bogdanm 0:9b334a45a8ff 817 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
bogdanm 0:9b334a45a8ff 818 * @param Data: Data to be loaded in the selected data holding register.
bogdanm 0:9b334a45a8ff 819 * @retval HAL status
bogdanm 0:9b334a45a8ff 820 */
bogdanm 0:9b334a45a8ff 821 HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
bogdanm 0:9b334a45a8ff 822 {
bogdanm 0:9b334a45a8ff 823 __IO uint32_t tmp = 0;
bogdanm 0:9b334a45a8ff 824
bogdanm 0:9b334a45a8ff 825 /* Check the parameters */
bogdanm 0:9b334a45a8ff 826 assert_param(IS_DAC_CHANNEL(Channel));
bogdanm 0:9b334a45a8ff 827 assert_param(IS_DAC_ALIGN(Alignment));
bogdanm 0:9b334a45a8ff 828 assert_param(IS_DAC_DATA(Data));
bogdanm 0:9b334a45a8ff 829
bogdanm 0:9b334a45a8ff 830 tmp = (uint32_t)hdac->Instance;
bogdanm 0:9b334a45a8ff 831 if(Channel == DAC_CHANNEL_1)
bogdanm 0:9b334a45a8ff 832 {
bogdanm 0:9b334a45a8ff 833 tmp += __HAL_DHR12R1_ALIGNEMENT(Alignment);
bogdanm 0:9b334a45a8ff 834 }
bogdanm 0:9b334a45a8ff 835 else
bogdanm 0:9b334a45a8ff 836 {
bogdanm 0:9b334a45a8ff 837 tmp += __HAL_DHR12R2_ALIGNEMENT(Alignment);
bogdanm 0:9b334a45a8ff 838 }
bogdanm 0:9b334a45a8ff 839
bogdanm 0:9b334a45a8ff 840 /* Set the DAC channel selected data holding register */
bogdanm 0:9b334a45a8ff 841 *(__IO uint32_t *) tmp = Data;
bogdanm 0:9b334a45a8ff 842
bogdanm 0:9b334a45a8ff 843 /* Return function status */
bogdanm 0:9b334a45a8ff 844 return HAL_OK;
bogdanm 0:9b334a45a8ff 845 }
bogdanm 0:9b334a45a8ff 846
bogdanm 0:9b334a45a8ff 847 /**
bogdanm 0:9b334a45a8ff 848 * @}
bogdanm 0:9b334a45a8ff 849 */
bogdanm 0:9b334a45a8ff 850
bogdanm 0:9b334a45a8ff 851 /** @defgroup DAC_Exported_Functions_Group4 Peripheral State and Errors functions
bogdanm 0:9b334a45a8ff 852 * @brief Peripheral State and Errors functions
bogdanm 0:9b334a45a8ff 853 *
bogdanm 0:9b334a45a8ff 854 @verbatim
bogdanm 0:9b334a45a8ff 855 ==============================================================================
bogdanm 0:9b334a45a8ff 856 ##### Peripheral State and Errors functions #####
bogdanm 0:9b334a45a8ff 857 ==============================================================================
bogdanm 0:9b334a45a8ff 858 [..]
bogdanm 0:9b334a45a8ff 859 This subsection provides functions allowing to
bogdanm 0:9b334a45a8ff 860 (+) Check the DAC state.
bogdanm 0:9b334a45a8ff 861 (+) Check the DAC Errors.
bogdanm 0:9b334a45a8ff 862
bogdanm 0:9b334a45a8ff 863 @endverbatim
bogdanm 0:9b334a45a8ff 864 * @{
bogdanm 0:9b334a45a8ff 865 */
bogdanm 0:9b334a45a8ff 866
bogdanm 0:9b334a45a8ff 867 /**
bogdanm 0:9b334a45a8ff 868 * @brief return the DAC state
bogdanm 0:9b334a45a8ff 869 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 870 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 871 * @retval HAL state
bogdanm 0:9b334a45a8ff 872 */
bogdanm 0:9b334a45a8ff 873 HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac)
bogdanm 0:9b334a45a8ff 874 {
bogdanm 0:9b334a45a8ff 875 /* Return DAC state */
bogdanm 0:9b334a45a8ff 876 return hdac->State;
bogdanm 0:9b334a45a8ff 877 }
bogdanm 0:9b334a45a8ff 878
bogdanm 0:9b334a45a8ff 879
bogdanm 0:9b334a45a8ff 880 /**
bogdanm 0:9b334a45a8ff 881 * @brief Return the DAC error code
bogdanm 0:9b334a45a8ff 882 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 883 * the configuration information for the specified DAC.
bogdanm 0:9b334a45a8ff 884 * @retval DAC Error Code
bogdanm 0:9b334a45a8ff 885 */
bogdanm 0:9b334a45a8ff 886 uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac)
bogdanm 0:9b334a45a8ff 887 {
bogdanm 0:9b334a45a8ff 888 return hdac->ErrorCode;
bogdanm 0:9b334a45a8ff 889 }
bogdanm 0:9b334a45a8ff 890
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 */
bogdanm 0:9b334a45a8ff 898
bogdanm 0:9b334a45a8ff 899 /** @addtogroup DAC_Private_Functions
bogdanm 0:9b334a45a8ff 900 * @{
bogdanm 0:9b334a45a8ff 901 */
bogdanm 0:9b334a45a8ff 902
bogdanm 0:9b334a45a8ff 903 /**
bogdanm 0:9b334a45a8ff 904 * @brief DMA conversion complete callback.
bogdanm 0:9b334a45a8ff 905 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 906 * the configuration information for the specified DMA module.
bogdanm 0:9b334a45a8ff 907 * @retval None
bogdanm 0:9b334a45a8ff 908 */
bogdanm 0:9b334a45a8ff 909 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 910 {
bogdanm 0:9b334a45a8ff 911 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
bogdanm 0:9b334a45a8ff 912
bogdanm 0:9b334a45a8ff 913 HAL_DAC_ConvCpltCallbackCh1(hdac);
bogdanm 0:9b334a45a8ff 914
bogdanm 0:9b334a45a8ff 915 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 916 }
bogdanm 0:9b334a45a8ff 917
bogdanm 0:9b334a45a8ff 918 /**
bogdanm 0:9b334a45a8ff 919 * @brief DMA half transfer complete callback.
bogdanm 0:9b334a45a8ff 920 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 921 * the configuration information for the specified DMA module.
bogdanm 0:9b334a45a8ff 922 * @retval None
bogdanm 0:9b334a45a8ff 923 */
bogdanm 0:9b334a45a8ff 924 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 925 {
bogdanm 0:9b334a45a8ff 926 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
bogdanm 0:9b334a45a8ff 927 /* Conversion complete callback */
bogdanm 0:9b334a45a8ff 928 HAL_DAC_ConvHalfCpltCallbackCh1(hdac);
bogdanm 0:9b334a45a8ff 929 }
bogdanm 0:9b334a45a8ff 930
bogdanm 0:9b334a45a8ff 931 /**
bogdanm 0:9b334a45a8ff 932 * @brief DMA error callback
bogdanm 0:9b334a45a8ff 933 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 934 * the configuration information for the specified DMA module.
bogdanm 0:9b334a45a8ff 935 * @retval None
bogdanm 0:9b334a45a8ff 936 */
bogdanm 0:9b334a45a8ff 937 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma)
bogdanm 0:9b334a45a8ff 938 {
bogdanm 0:9b334a45a8ff 939 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
bogdanm 0:9b334a45a8ff 940
bogdanm 0:9b334a45a8ff 941 /* Set DAC error code to DMA error */
bogdanm 0:9b334a45a8ff 942 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
bogdanm 0:9b334a45a8ff 943
bogdanm 0:9b334a45a8ff 944 HAL_DAC_ErrorCallbackCh1(hdac);
bogdanm 0:9b334a45a8ff 945
bogdanm 0:9b334a45a8ff 946 hdac->State = HAL_DAC_STATE_READY;
bogdanm 0:9b334a45a8ff 947 }
bogdanm 0:9b334a45a8ff 948
bogdanm 0:9b334a45a8ff 949 /**
bogdanm 0:9b334a45a8ff 950 * @}
bogdanm 0:9b334a45a8ff 951 */
bogdanm 0:9b334a45a8ff 952
bogdanm 0:9b334a45a8ff 953 #endif /* HAL_DAC_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 954
bogdanm 0:9b334a45a8ff 955 /**
bogdanm 0:9b334a45a8ff 956 * @}
bogdanm 0:9b334a45a8ff 957 */
bogdanm 0:9b334a45a8ff 958
bogdanm 0:9b334a45a8ff 959 /**
bogdanm 0:9b334a45a8ff 960 * @}
bogdanm 0:9b334a45a8ff 961 */
bogdanm 0:9b334a45a8ff 962
bogdanm 0:9b334a45a8ff 963 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/