STM32F479xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32f4xx_ll_dac.h 00004 * @author MCD Application Team 00005 * @brief Header file of DAC LL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * <h2><center>© Copyright (c) 2016 STMicroelectronics. 00010 * All rights reserved.</center></h2> 00011 * 00012 * This software component is licensed by ST under BSD 3-Clause license, 00013 * the "License"; You may not use this file except in compliance with the 00014 * License. You may obtain a copy of the License at: 00015 * opensource.org/licenses/BSD-3-Clause 00016 * 00017 ****************************************************************************** 00018 */ 00019 00020 /* Define to prevent recursive inclusion -------------------------------------*/ 00021 #ifndef STM32F4xx_LL_DAC_H 00022 #define STM32F4xx_LL_DAC_H 00023 00024 #ifdef __cplusplus 00025 extern "C" { 00026 #endif 00027 00028 /* Includes ------------------------------------------------------------------*/ 00029 #include "stm32f4xx.h" 00030 00031 /** @addtogroup STM32F4xx_LL_Driver 00032 * @{ 00033 */ 00034 00035 #if defined(DAC) 00036 00037 /** @defgroup DAC_LL DAC 00038 * @{ 00039 */ 00040 00041 /* Private types -------------------------------------------------------------*/ 00042 /* Private variables ---------------------------------------------------------*/ 00043 00044 /* Private constants ---------------------------------------------------------*/ 00045 /** @defgroup DAC_LL_Private_Constants DAC Private Constants 00046 * @{ 00047 */ 00048 00049 /* Internal masks for DAC channels definition */ 00050 /* To select into literal LL_DAC_CHANNEL_x the relevant bits for: */ 00051 /* - channel bits position into registers CR, MCR, CCR, SHHR, SHRR */ 00052 /* - channel bits position into register SWTRIG */ 00053 /* - channel register offset of data holding register DHRx */ 00054 /* - channel register offset of data output register DORx */ 00055 #define DAC_CR_CH1_BITOFFSET 0UL /* Position of channel bits into registers 00056 CR, MCR, CCR, SHHR, SHRR of channel 1 */ 00057 #if defined(DAC_CHANNEL2_SUPPORT) 00058 #define DAC_CR_CH2_BITOFFSET 16UL /* Position of channel bits into registers 00059 CR, MCR, CCR, SHHR, SHRR of channel 2 */ 00060 #define DAC_CR_CHX_BITOFFSET_MASK (DAC_CR_CH1_BITOFFSET | DAC_CR_CH2_BITOFFSET) 00061 #else 00062 #define DAC_CR_CHX_BITOFFSET_MASK (DAC_CR_CH1_BITOFFSET) 00063 #endif /* DAC_CHANNEL2_SUPPORT */ 00064 00065 #define DAC_SWTR_CH1 (DAC_SWTRIGR_SWTRIG1) /* Channel bit into register SWTRIGR of channel 1. */ 00066 #if defined(DAC_CHANNEL2_SUPPORT) 00067 #define DAC_SWTR_CH2 (DAC_SWTRIGR_SWTRIG2) /* Channel bit into register SWTRIGR of channel 2. */ 00068 #define DAC_SWTR_CHX_MASK (DAC_SWTR_CH1 | DAC_SWTR_CH2) 00069 #else 00070 #define DAC_SWTR_CHX_MASK (DAC_SWTR_CH1) 00071 #endif /* DAC_CHANNEL2_SUPPORT */ 00072 00073 #define DAC_REG_DHR12R1_REGOFFSET 0x00000000UL /* Register DHR12Rx channel 1 taken as reference */ 00074 #define DAC_REG_DHR12L1_REGOFFSET 0x00100000UL /* Register offset of DHR12Lx channel 1 versus 00075 DHR12Rx channel 1 (shifted left of 20 bits) */ 00076 #define DAC_REG_DHR8R1_REGOFFSET 0x02000000UL /* Register offset of DHR8Rx channel 1 versus 00077 DHR12Rx channel 1 (shifted left of 24 bits) */ 00078 #if defined(DAC_CHANNEL2_SUPPORT) 00079 #define DAC_REG_DHR12R2_REGOFFSET 0x00030000UL /* Register offset of DHR12Rx channel 2 versus 00080 DHR12Rx channel 1 (shifted left of 16 bits) */ 00081 #define DAC_REG_DHR12L2_REGOFFSET 0x00400000UL /* Register offset of DHR12Lx channel 2 versus 00082 DHR12Rx channel 1 (shifted left of 20 bits) */ 00083 #define DAC_REG_DHR8R2_REGOFFSET 0x05000000UL /* Register offset of DHR8Rx channel 2 versus 00084 DHR12Rx channel 1 (shifted left of 24 bits) */ 00085 #endif /* DAC_CHANNEL2_SUPPORT */ 00086 #define DAC_REG_DHR12RX_REGOFFSET_MASK 0x000F0000UL 00087 #define DAC_REG_DHR12LX_REGOFFSET_MASK 0x00F00000UL 00088 #define DAC_REG_DHR8RX_REGOFFSET_MASK 0x0F000000UL 00089 #define DAC_REG_DHRX_REGOFFSET_MASK (DAC_REG_DHR12RX_REGOFFSET_MASK\ 00090 | DAC_REG_DHR12LX_REGOFFSET_MASK | DAC_REG_DHR8RX_REGOFFSET_MASK) 00091 00092 #define DAC_REG_DOR1_REGOFFSET 0x00000000UL /* Register DORx channel 1 taken as reference */ 00093 #if defined(DAC_CHANNEL2_SUPPORT) 00094 #define DAC_REG_DOR2_REGOFFSET 0x10000000UL /* Register offset of DORx channel 1 versus 00095 DORx channel 2 (shifted left of 28 bits) */ 00096 #define DAC_REG_DORX_REGOFFSET_MASK (DAC_REG_DOR1_REGOFFSET | DAC_REG_DOR2_REGOFFSET) 00097 #endif /* DAC_CHANNEL2_SUPPORT */ 00098 00099 00100 #define DAC_REG_DHR_REGOFFSET_MASK_POSBIT0 0x0000000FUL /* Mask of data hold registers offset (DHR12Rx, 00101 DHR12Lx, DHR8Rx, ...) when shifted to position 0 */ 00102 #define DAC_REG_DORX_REGOFFSET_MASK_POSBIT0 0x00000001UL /* Mask of DORx registers offset when shifted 00103 to position 0 */ 00104 #define DAC_REG_SHSRX_REGOFFSET_MASK_POSBIT0 0x00000001UL /* Mask of SHSRx registers offset when shifted 00105 to position 0 */ 00106 00107 #define DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS 16UL /* Position of bits register offset of DHR12Rx 00108 channel 1 or 2 versus DHR12Rx channel 1 00109 (shifted left of 16 bits) */ 00110 #define DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS 20UL /* Position of bits register offset of DHR12Lx 00111 channel 1 or 2 versus DHR12Rx channel 1 00112 (shifted left of 20 bits) */ 00113 #define DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS 24UL /* Position of bits register offset of DHR8Rx 00114 channel 1 or 2 versus DHR12Rx channel 1 00115 (shifted left of 24 bits) */ 00116 #define DAC_REG_DORX_REGOFFSET_BITOFFSET_POS 28UL /* Position of bits register offset of DORx 00117 channel 1 or 2 versus DORx channel 1 00118 (shifted left of 28 bits) */ 00119 00120 /* DAC registers bits positions */ 00121 #if defined(DAC_CHANNEL2_SUPPORT) 00122 #endif 00123 #define DAC_DHR12RD_DACC2DHR_BITOFFSET_POS DAC_DHR12RD_DACC2DHR_Pos 00124 #define DAC_DHR12LD_DACC2DHR_BITOFFSET_POS DAC_DHR12LD_DACC2DHR_Pos 00125 #define DAC_DHR8RD_DACC2DHR_BITOFFSET_POS DAC_DHR8RD_DACC2DHR_Pos 00126 00127 /* Miscellaneous data */ 00128 #define DAC_DIGITAL_SCALE_12BITS 4095UL /* Full-scale digital value with a resolution of 12 00129 bits (voltage range determined by analog voltage 00130 references Vref+ and Vref-, refer to reference manual) */ 00131 00132 /** 00133 * @} 00134 */ 00135 00136 00137 /* Private macros ------------------------------------------------------------*/ 00138 /** @defgroup DAC_LL_Private_Macros DAC Private Macros 00139 * @{ 00140 */ 00141 00142 /** 00143 * @brief Driver macro reserved for internal use: set a pointer to 00144 * a register from a register basis from which an offset 00145 * is applied. 00146 * @param __REG__ Register basis from which the offset is applied. 00147 * @param __REG_OFFFSET__ Offset to be applied (unit: number of registers). 00148 * @retval Pointer to register address 00149 */ 00150 #define __DAC_PTR_REG_OFFSET(__REG__, __REG_OFFFSET__) \ 00151 ((uint32_t *)((uint32_t) ((uint32_t)(&(__REG__)) + ((__REG_OFFFSET__) << 2UL)))) 00152 00153 /** 00154 * @} 00155 */ 00156 00157 00158 /* Exported types ------------------------------------------------------------*/ 00159 #if defined(USE_FULL_LL_DRIVER) 00160 /** @defgroup DAC_LL_ES_INIT DAC Exported Init structure 00161 * @{ 00162 */ 00163 00164 /** 00165 * @brief Structure definition of some features of DAC instance. 00166 */ 00167 typedef struct 00168 { 00169 uint32_t TriggerSource; /*!< Set the conversion trigger source for the selected DAC channel: 00170 internal (SW start) or from external peripheral 00171 (timer event, external interrupt line). 00172 This parameter can be a value of @ref DAC_LL_EC_TRIGGER_SOURCE 00173 00174 This feature can be modified afterwards using unitary 00175 function @ref LL_DAC_SetTriggerSource(). */ 00176 00177 uint32_t WaveAutoGeneration; /*!< Set the waveform automatic generation mode for the selected DAC channel. 00178 This parameter can be a value of @ref DAC_LL_EC_WAVE_AUTO_GENERATION_MODE 00179 00180 This feature can be modified afterwards using unitary 00181 function @ref LL_DAC_SetWaveAutoGeneration(). */ 00182 00183 uint32_t WaveAutoGenerationConfig; /*!< Set the waveform automatic generation mode for the selected DAC channel. 00184 If waveform automatic generation mode is set to noise, this parameter 00185 can be a value of @ref DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS 00186 If waveform automatic generation mode is set to triangle, 00187 this parameter can be a value of @ref DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE 00188 @note If waveform automatic generation mode is disabled, 00189 this parameter is discarded. 00190 00191 This feature can be modified afterwards using unitary 00192 function @ref LL_DAC_SetWaveNoiseLFSR(), 00193 @ref LL_DAC_SetWaveTriangleAmplitude() 00194 depending on the wave automatic generation selected. */ 00195 00196 uint32_t OutputBuffer; /*!< Set the output buffer for the selected DAC channel. 00197 This parameter can be a value of @ref DAC_LL_EC_OUTPUT_BUFFER 00198 00199 This feature can be modified afterwards using unitary 00200 function @ref LL_DAC_SetOutputBuffer(). */ 00201 } LL_DAC_InitTypeDef; 00202 00203 /** 00204 * @} 00205 */ 00206 #endif /* USE_FULL_LL_DRIVER */ 00207 00208 /* Exported constants --------------------------------------------------------*/ 00209 /** @defgroup DAC_LL_Exported_Constants DAC Exported Constants 00210 * @{ 00211 */ 00212 00213 /** @defgroup DAC_LL_EC_GET_FLAG DAC flags 00214 * @brief Flags defines which can be used with LL_DAC_ReadReg function 00215 * @{ 00216 */ 00217 /* DAC channel 1 flags */ 00218 #define LL_DAC_FLAG_DMAUDR1 (DAC_SR_DMAUDR1) /*!< DAC channel 1 flag DMA underrun */ 00219 #if defined(DAC_CHANNEL2_SUPPORT) 00220 /* DAC channel 2 flags */ 00221 #define LL_DAC_FLAG_DMAUDR2 (DAC_SR_DMAUDR2) /*!< DAC channel 2 flag DMA underrun */ 00222 #endif /* DAC_CHANNEL2_SUPPORT */ 00223 /** 00224 * @} 00225 */ 00226 00227 /** @defgroup DAC_LL_EC_IT DAC interruptions 00228 * @brief IT defines which can be used with LL_DAC_ReadReg and LL_DAC_WriteReg functions 00229 * @{ 00230 */ 00231 #define LL_DAC_IT_DMAUDRIE1 (DAC_CR_DMAUDRIE1) /*!< DAC channel 1 interruption DMA underrun */ 00232 #if defined(DAC_CHANNEL2_SUPPORT) 00233 #define LL_DAC_IT_DMAUDRIE2 (DAC_CR_DMAUDRIE2) /*!< DAC channel 2 interruption DMA underrun */ 00234 #endif /* DAC_CHANNEL2_SUPPORT */ 00235 /** 00236 * @} 00237 */ 00238 00239 /** @defgroup DAC_LL_EC_CHANNEL DAC channels 00240 * @{ 00241 */ 00242 #define LL_DAC_CHANNEL_1 (DAC_REG_DOR1_REGOFFSET | DAC_REG_DHR12R1_REGOFFSET | DAC_REG_DHR12L1_REGOFFSET | DAC_REG_DHR8R1_REGOFFSET | DAC_CR_CH1_BITOFFSET | DAC_SWTR_CH1) /*!< DAC channel 1 */ 00243 #if defined(DAC_CHANNEL2_SUPPORT) 00244 #define LL_DAC_CHANNEL_2 (DAC_REG_DOR2_REGOFFSET | DAC_REG_DHR12R2_REGOFFSET | DAC_REG_DHR12L2_REGOFFSET | DAC_REG_DHR8R2_REGOFFSET | DAC_CR_CH2_BITOFFSET | DAC_SWTR_CH2) /*!< DAC channel 2 */ 00245 #endif /* DAC_CHANNEL2_SUPPORT */ 00246 /** 00247 * @} 00248 */ 00249 00250 /** @defgroup DAC_LL_EC_TRIGGER_SOURCE DAC trigger source 00251 * @{ 00252 */ 00253 #define LL_DAC_TRIG_SOFTWARE (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger internal (SW start) */ 00254 #define LL_DAC_TRIG_EXT_TIM2_TRGO (DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external peripheral: TIM2 TRGO. */ 00255 #define LL_DAC_TRIG_EXT_TIM8_TRGO ( DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM8 TRGO. */ 00256 #define LL_DAC_TRIG_EXT_TIM4_TRGO (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM4 TRGO. */ 00257 #define LL_DAC_TRIG_EXT_TIM6_TRGO 0x00000000UL /*!< DAC channel conversion trigger from external peripheral: TIM6 TRGO. */ 00258 #define LL_DAC_TRIG_EXT_TIM7_TRGO ( DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external peripheral: TIM7 TRGO. */ 00259 #define LL_DAC_TRIG_EXT_TIM5_TRGO ( DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM5 TRGO. */ 00260 #define LL_DAC_TRIG_EXT_EXTI_LINE9 (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external peripheral: external interrupt line 9. */ 00261 /** 00262 * @} 00263 */ 00264 00265 /** @defgroup DAC_LL_EC_WAVE_AUTO_GENERATION_MODE DAC waveform automatic generation mode 00266 * @{ 00267 */ 00268 #define LL_DAC_WAVE_AUTO_GENERATION_NONE 0x00000000UL /*!< DAC channel wave auto generation mode disabled. */ 00269 #define LL_DAC_WAVE_AUTO_GENERATION_NOISE ( DAC_CR_WAVE1_0) /*!< DAC channel wave auto generation mode enabled, set generated noise waveform. */ 00270 #define LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE (DAC_CR_WAVE1_1 ) /*!< DAC channel wave auto generation mode enabled, set generated triangle waveform. */ 00271 /** 00272 * @} 00273 */ 00274 00275 /** @defgroup DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS DAC wave generation - Noise LFSR unmask bits 00276 * @{ 00277 */ 00278 #define LL_DAC_NOISE_LFSR_UNMASK_BIT0 0x00000000UL /*!< Noise wave generation, unmask LFSR bit0, for the selected DAC channel */ 00279 #define LL_DAC_NOISE_LFSR_UNMASK_BITS1_0 ( DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[1:0], for the selected DAC channel */ 00280 #define LL_DAC_NOISE_LFSR_UNMASK_BITS2_0 ( DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[2:0], for the selected DAC channel */ 00281 #define LL_DAC_NOISE_LFSR_UNMASK_BITS3_0 ( DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[3:0], for the selected DAC channel */ 00282 #define LL_DAC_NOISE_LFSR_UNMASK_BITS4_0 ( DAC_CR_MAMP1_2 ) /*!< Noise wave generation, unmask LFSR bits[4:0], for the selected DAC channel */ 00283 #define LL_DAC_NOISE_LFSR_UNMASK_BITS5_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[5:0], for the selected DAC channel */ 00284 #define LL_DAC_NOISE_LFSR_UNMASK_BITS6_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[6:0], for the selected DAC channel */ 00285 #define LL_DAC_NOISE_LFSR_UNMASK_BITS7_0 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[7:0], for the selected DAC channel */ 00286 #define LL_DAC_NOISE_LFSR_UNMASK_BITS8_0 (DAC_CR_MAMP1_3 ) /*!< Noise wave generation, unmask LFSR bits[8:0], for the selected DAC channel */ 00287 #define LL_DAC_NOISE_LFSR_UNMASK_BITS9_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[9:0], for the selected DAC channel */ 00288 #define LL_DAC_NOISE_LFSR_UNMASK_BITS10_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 ) /*!< Noise wave generation, unmask LFSR bits[10:0], for the selected DAC channel */ 00289 #define LL_DAC_NOISE_LFSR_UNMASK_BITS11_0 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Noise wave generation, unmask LFSR bits[11:0], for the selected DAC channel */ 00290 /** 00291 * @} 00292 */ 00293 00294 /** @defgroup DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE DAC wave generation - Triangle amplitude 00295 * @{ 00296 */ 00297 #define LL_DAC_TRIANGLE_AMPLITUDE_1 0x00000000UL /*!< Triangle wave generation, amplitude of 1 LSB of DAC output range, for the selected DAC channel */ 00298 #define LL_DAC_TRIANGLE_AMPLITUDE_3 ( DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 3 LSB of DAC output range, for the selected DAC channel */ 00299 #define LL_DAC_TRIANGLE_AMPLITUDE_7 ( DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 7 LSB of DAC output range, for the selected DAC channel */ 00300 #define LL_DAC_TRIANGLE_AMPLITUDE_15 ( DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 15 LSB of DAC output range, for the selected DAC channel */ 00301 #define LL_DAC_TRIANGLE_AMPLITUDE_31 ( DAC_CR_MAMP1_2 ) /*!< Triangle wave generation, amplitude of 31 LSB of DAC output range, for the selected DAC channel */ 00302 #define LL_DAC_TRIANGLE_AMPLITUDE_63 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 63 LSB of DAC output range, for the selected DAC channel */ 00303 #define LL_DAC_TRIANGLE_AMPLITUDE_127 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 127 LSB of DAC output range, for the selected DAC channel */ 00304 #define LL_DAC_TRIANGLE_AMPLITUDE_255 ( DAC_CR_MAMP1_2 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 255 LSB of DAC output range, for the selected DAC channel */ 00305 #define LL_DAC_TRIANGLE_AMPLITUDE_511 (DAC_CR_MAMP1_3 ) /*!< Triangle wave generation, amplitude of 512 LSB of DAC output range, for the selected DAC channel */ 00306 #define LL_DAC_TRIANGLE_AMPLITUDE_1023 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 1023 LSB of DAC output range, for the selected DAC channel */ 00307 #define LL_DAC_TRIANGLE_AMPLITUDE_2047 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 ) /*!< Triangle wave generation, amplitude of 2047 LSB of DAC output range, for the selected DAC channel */ 00308 #define LL_DAC_TRIANGLE_AMPLITUDE_4095 (DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Triangle wave generation, amplitude of 4095 LSB of DAC output range, for the selected DAC channel */ 00309 /** 00310 * @} 00311 */ 00312 00313 /** @defgroup DAC_LL_EC_OUTPUT_BUFFER DAC channel output buffer 00314 * @{ 00315 */ 00316 #define LL_DAC_OUTPUT_BUFFER_ENABLE 0x00000000UL /*!< The selected DAC channel output is buffered: higher drive current capability, but also higher current consumption */ 00317 #define LL_DAC_OUTPUT_BUFFER_DISABLE (DAC_CR_BOFF1) /*!< The selected DAC channel output is not buffered: lower drive current capability, but also lower current consumption */ 00318 /** 00319 * @} 00320 */ 00321 00322 /** @defgroup DAC_LL_EC_RESOLUTION DAC channel output resolution 00323 * @{ 00324 */ 00325 #define LL_DAC_RESOLUTION_12B 0x00000000UL /*!< DAC channel resolution 12 bits */ 00326 #define LL_DAC_RESOLUTION_8B 0x00000002UL /*!< DAC channel resolution 8 bits */ 00327 /** 00328 * @} 00329 */ 00330 00331 /** @defgroup DAC_LL_EC_REGISTERS DAC registers compliant with specific purpose 00332 * @{ 00333 */ 00334 /* List of DAC registers intended to be used (most commonly) with */ 00335 /* DMA transfer. */ 00336 /* Refer to function @ref LL_DAC_DMA_GetRegAddr(). */ 00337 #define LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits right aligned */ 00338 #define LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits left aligned */ 00339 #define LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 8 bits right aligned */ 00340 /** 00341 * @} 00342 */ 00343 00344 /** @defgroup DAC_LL_EC_HW_DELAYS Definitions of DAC hardware constraints delays 00345 * @note Only DAC peripheral HW delays are defined in DAC LL driver driver, 00346 * not timeout values. 00347 * For details on delays values, refer to descriptions in source code 00348 * above each literal definition. 00349 * @{ 00350 */ 00351 00352 /* Delay for DAC channel voltage settling time from DAC channel startup */ 00353 /* (transition from disable to enable). */ 00354 /* Note: DAC channel startup time depends on board application environment: */ 00355 /* impedance connected to DAC channel output. */ 00356 /* The delay below is specified under conditions: */ 00357 /* - voltage maximum transition (lowest to highest value) */ 00358 /* - until voltage reaches final value +-1LSB */ 00359 /* - DAC channel output buffer enabled */ 00360 /* - load impedance of 5kOhm (min), 50pF (max) */ 00361 /* Literal set to maximum value (refer to device datasheet, */ 00362 /* parameter "tWAKEUP"). */ 00363 /* Unit: us */ 00364 #define LL_DAC_DELAY_STARTUP_VOLTAGE_SETTLING_US 15UL /*!< Delay for DAC channel voltage settling time from DAC channel startup (transition from disable to enable) */ 00365 00366 /* Delay for DAC channel voltage settling time. */ 00367 /* Note: DAC channel startup time depends on board application environment: */ 00368 /* impedance connected to DAC channel output. */ 00369 /* The delay below is specified under conditions: */ 00370 /* - voltage maximum transition (lowest to highest value) */ 00371 /* - until voltage reaches final value +-1LSB */ 00372 /* - DAC channel output buffer enabled */ 00373 /* - load impedance of 5kOhm min, 50pF max */ 00374 /* Literal set to maximum value (refer to device datasheet, */ 00375 /* parameter "tSETTLING"). */ 00376 /* Unit: us */ 00377 #define LL_DAC_DELAY_VOLTAGE_SETTLING_US 12UL /*!< Delay for DAC channel voltage settling time */ 00378 00379 /** 00380 * @} 00381 */ 00382 00383 /** 00384 * @} 00385 */ 00386 00387 /* Exported macro ------------------------------------------------------------*/ 00388 /** @defgroup DAC_LL_Exported_Macros DAC Exported Macros 00389 * @{ 00390 */ 00391 00392 /** @defgroup DAC_LL_EM_WRITE_READ Common write and read registers macros 00393 * @{ 00394 */ 00395 00396 /** 00397 * @brief Write a value in DAC register 00398 * @param __INSTANCE__ DAC Instance 00399 * @param __REG__ Register to be written 00400 * @param __VALUE__ Value to be written in the register 00401 * @retval None 00402 */ 00403 #define LL_DAC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) 00404 00405 /** 00406 * @brief Read a value in DAC register 00407 * @param __INSTANCE__ DAC Instance 00408 * @param __REG__ Register to be read 00409 * @retval Register value 00410 */ 00411 #define LL_DAC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) 00412 00413 /** 00414 * @} 00415 */ 00416 00417 /** @defgroup DAC_LL_EM_HELPER_MACRO DAC helper macro 00418 * @{ 00419 */ 00420 00421 /** 00422 * @brief Helper macro to get DAC channel number in decimal format 00423 * from literals LL_DAC_CHANNEL_x. 00424 * Example: 00425 * __LL_DAC_CHANNEL_TO_DECIMAL_NB(LL_DAC_CHANNEL_1) 00426 * will return decimal number "1". 00427 * @note The input can be a value from functions where a channel 00428 * number is returned. 00429 * @param __CHANNEL__ This parameter can be one of the following values: 00430 * @arg @ref LL_DAC_CHANNEL_1 00431 * @arg @ref LL_DAC_CHANNEL_2 (1) 00432 * 00433 * (1) On this STM32 serie, parameter not available on all devices. 00434 * Refer to device datasheet for channels availability. 00435 * @retval 1...2 (value "2" depending on DAC channel 2 availability) 00436 */ 00437 #define __LL_DAC_CHANNEL_TO_DECIMAL_NB(__CHANNEL__) \ 00438 ((__CHANNEL__) & DAC_SWTR_CHX_MASK) 00439 00440 /** 00441 * @brief Helper macro to get DAC channel in literal format LL_DAC_CHANNEL_x 00442 * from number in decimal format. 00443 * Example: 00444 * __LL_DAC_DECIMAL_NB_TO_CHANNEL(1) 00445 * will return a data equivalent to "LL_DAC_CHANNEL_1". 00446 * @note If the input parameter does not correspond to a DAC channel, 00447 * this macro returns value '0'. 00448 * @param __DECIMAL_NB__ 1...2 (value "2" depending on DAC channel 2 availability) 00449 * @retval Returned value can be one of the following values: 00450 * @arg @ref LL_DAC_CHANNEL_1 00451 * @arg @ref LL_DAC_CHANNEL_2 (1) 00452 * 00453 * (1) On this STM32 serie, parameter not available on all devices. 00454 * Refer to device datasheet for channels availability. 00455 */ 00456 #if defined(DAC_CHANNEL2_SUPPORT) 00457 #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__) \ 00458 (((__DECIMAL_NB__) == 1UL) \ 00459 ? ( \ 00460 LL_DAC_CHANNEL_1 \ 00461 ) \ 00462 : \ 00463 (((__DECIMAL_NB__) == 2UL) \ 00464 ? ( \ 00465 LL_DAC_CHANNEL_2 \ 00466 ) \ 00467 : \ 00468 ( \ 00469 0UL \ 00470 ) \ 00471 ) \ 00472 ) 00473 #else 00474 #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__) \ 00475 (((__DECIMAL_NB__) == 1UL) \ 00476 ? ( \ 00477 LL_DAC_CHANNEL_1 \ 00478 ) \ 00479 : \ 00480 ( \ 00481 0UL \ 00482 ) \ 00483 ) 00484 #endif /* DAC_CHANNEL2_SUPPORT */ 00485 00486 /** 00487 * @brief Helper macro to define the DAC conversion data full-scale digital 00488 * value corresponding to the selected DAC resolution. 00489 * @note DAC conversion data full-scale corresponds to voltage range 00490 * determined by analog voltage references Vref+ and Vref- 00491 * (refer to reference manual). 00492 * @param __DAC_RESOLUTION__ This parameter can be one of the following values: 00493 * @arg @ref LL_DAC_RESOLUTION_12B 00494 * @arg @ref LL_DAC_RESOLUTION_8B 00495 * @retval ADC conversion data equivalent voltage value (unit: mVolt) 00496 */ 00497 #define __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__) \ 00498 ((0x00000FFFUL) >> ((__DAC_RESOLUTION__) << 1UL)) 00499 00500 /** 00501 * @brief Helper macro to calculate the DAC conversion data (unit: digital 00502 * value) corresponding to a voltage (unit: mVolt). 00503 * @note This helper macro is intended to provide input data in voltage 00504 * rather than digital value, 00505 * to be used with LL DAC functions such as 00506 * @ref LL_DAC_ConvertData12RightAligned(). 00507 * @note Analog reference voltage (Vref+) must be either known from 00508 * user board environment or can be calculated using ADC measurement 00509 * and ADC helper macro __LL_ADC_CALC_VREFANALOG_VOLTAGE(). 00510 * @param __VREFANALOG_VOLTAGE__ Analog reference voltage (unit: mV) 00511 * @param __DAC_VOLTAGE__ Voltage to be generated by DAC channel 00512 * (unit: mVolt). 00513 * @param __DAC_RESOLUTION__ This parameter can be one of the following values: 00514 * @arg @ref LL_DAC_RESOLUTION_12B 00515 * @arg @ref LL_DAC_RESOLUTION_8B 00516 * @retval DAC conversion data (unit: digital value) 00517 */ 00518 #define __LL_DAC_CALC_VOLTAGE_TO_DATA(__VREFANALOG_VOLTAGE__,\ 00519 __DAC_VOLTAGE__,\ 00520 __DAC_RESOLUTION__) \ 00521 ((__DAC_VOLTAGE__) * __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__) \ 00522 / (__VREFANALOG_VOLTAGE__) \ 00523 ) 00524 00525 /** 00526 * @} 00527 */ 00528 00529 /** 00530 * @} 00531 */ 00532 00533 00534 /* Exported functions --------------------------------------------------------*/ 00535 /** @defgroup DAC_LL_Exported_Functions DAC Exported Functions 00536 * @{ 00537 */ 00538 /** 00539 * @brief Set the conversion trigger source for the selected DAC channel. 00540 * @note For conversion trigger source to be effective, DAC trigger 00541 * must be enabled using function @ref LL_DAC_EnableTrigger(). 00542 * @note To set conversion trigger source, DAC channel must be disabled. 00543 * Otherwise, the setting is discarded. 00544 * @note Availability of parameters of trigger sources from timer 00545 * depends on timers availability on the selected device. 00546 * @rmtoll CR TSEL1 LL_DAC_SetTriggerSource\n 00547 * CR TSEL2 LL_DAC_SetTriggerSource 00548 * @param DACx DAC instance 00549 * @param DAC_Channel This parameter can be one of the following values: 00550 * @arg @ref LL_DAC_CHANNEL_1 00551 * @arg @ref LL_DAC_CHANNEL_2 (1) 00552 * 00553 * (1) On this STM32 serie, parameter not available on all devices. 00554 * Refer to device datasheet for channels availability. 00555 * @param TriggerSource This parameter can be one of the following values: 00556 * @arg @ref LL_DAC_TRIG_SOFTWARE 00557 * @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO 00558 * @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO 00559 * @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO 00560 * @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO 00561 * @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO 00562 * @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO 00563 * @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9 00564 * @retval None 00565 */ 00566 __STATIC_INLINE void LL_DAC_SetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TriggerSource) 00567 { 00568 MODIFY_REG(DACx->CR, 00569 DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK), 00570 TriggerSource << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00571 } 00572 00573 /** 00574 * @brief Get the conversion trigger source for the selected DAC channel. 00575 * @note For conversion trigger source to be effective, DAC trigger 00576 * must be enabled using function @ref LL_DAC_EnableTrigger(). 00577 * @note Availability of parameters of trigger sources from timer 00578 * depends on timers availability on the selected device. 00579 * @rmtoll CR TSEL1 LL_DAC_GetTriggerSource\n 00580 * CR TSEL2 LL_DAC_GetTriggerSource 00581 * @param DACx DAC instance 00582 * @param DAC_Channel This parameter can be one of the following values: 00583 * @arg @ref LL_DAC_CHANNEL_1 00584 * @arg @ref LL_DAC_CHANNEL_2 (1) 00585 * 00586 * (1) On this STM32 serie, parameter not available on all devices. 00587 * Refer to device datasheet for channels availability. 00588 * @retval Returned value can be one of the following values: 00589 * @arg @ref LL_DAC_TRIG_SOFTWARE 00590 * @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO 00591 * @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO 00592 * @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO 00593 * @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO 00594 * @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO 00595 * @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO 00596 * @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9 00597 */ 00598 __STATIC_INLINE uint32_t LL_DAC_GetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00599 { 00600 return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00601 >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00602 ); 00603 } 00604 00605 /** 00606 * @brief Set the waveform automatic generation mode 00607 * for the selected DAC channel. 00608 * @rmtoll CR WAVE1 LL_DAC_SetWaveAutoGeneration\n 00609 * CR WAVE2 LL_DAC_SetWaveAutoGeneration 00610 * @param DACx DAC instance 00611 * @param DAC_Channel This parameter can be one of the following values: 00612 * @arg @ref LL_DAC_CHANNEL_1 00613 * @arg @ref LL_DAC_CHANNEL_2 (1) 00614 * 00615 * (1) On this STM32 serie, parameter not available on all devices. 00616 * Refer to device datasheet for channels availability. 00617 * @param WaveAutoGeneration This parameter can be one of the following values: 00618 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE 00619 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE 00620 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE 00621 * @retval None 00622 */ 00623 __STATIC_INLINE void LL_DAC_SetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t WaveAutoGeneration) 00624 { 00625 MODIFY_REG(DACx->CR, 00626 DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK), 00627 WaveAutoGeneration << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00628 } 00629 00630 /** 00631 * @brief Get the waveform automatic generation mode 00632 * for the selected DAC channel. 00633 * @rmtoll CR WAVE1 LL_DAC_GetWaveAutoGeneration\n 00634 * CR WAVE2 LL_DAC_GetWaveAutoGeneration 00635 * @param DACx DAC instance 00636 * @param DAC_Channel This parameter can be one of the following values: 00637 * @arg @ref LL_DAC_CHANNEL_1 00638 * @arg @ref LL_DAC_CHANNEL_2 (1) 00639 * 00640 * (1) On this STM32 serie, parameter not available on all devices. 00641 * Refer to device datasheet for channels availability. 00642 * @retval Returned value can be one of the following values: 00643 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE 00644 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE 00645 * @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE 00646 */ 00647 __STATIC_INLINE uint32_t LL_DAC_GetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00648 { 00649 return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00650 >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00651 ); 00652 } 00653 00654 /** 00655 * @brief Set the noise waveform generation for the selected DAC channel: 00656 * Noise mode and parameters LFSR (linear feedback shift register). 00657 * @note For wave generation to be effective, DAC channel 00658 * wave generation mode must be enabled using 00659 * function @ref LL_DAC_SetWaveAutoGeneration(). 00660 * @note This setting can be set when the selected DAC channel is disabled 00661 * (otherwise, the setting operation is ignored). 00662 * @rmtoll CR MAMP1 LL_DAC_SetWaveNoiseLFSR\n 00663 * CR MAMP2 LL_DAC_SetWaveNoiseLFSR 00664 * @param DACx DAC instance 00665 * @param DAC_Channel This parameter can be one of the following values: 00666 * @arg @ref LL_DAC_CHANNEL_1 00667 * @arg @ref LL_DAC_CHANNEL_2 (1) 00668 * 00669 * (1) On this STM32 serie, parameter not available on all devices. 00670 * Refer to device datasheet for channels availability. 00671 * @param NoiseLFSRMask This parameter can be one of the following values: 00672 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0 00673 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0 00674 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0 00675 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0 00676 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0 00677 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0 00678 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0 00679 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0 00680 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0 00681 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0 00682 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0 00683 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0 00684 * @retval None 00685 */ 00686 __STATIC_INLINE void LL_DAC_SetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t NoiseLFSRMask) 00687 { 00688 MODIFY_REG(DACx->CR, 00689 DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK), 00690 NoiseLFSRMask << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00691 } 00692 00693 /** 00694 * @brief Get the noise waveform generation for the selected DAC channel: 00695 * Noise mode and parameters LFSR (linear feedback shift register). 00696 * @rmtoll CR MAMP1 LL_DAC_GetWaveNoiseLFSR\n 00697 * CR MAMP2 LL_DAC_GetWaveNoiseLFSR 00698 * @param DACx DAC instance 00699 * @param DAC_Channel This parameter can be one of the following values: 00700 * @arg @ref LL_DAC_CHANNEL_1 00701 * @arg @ref LL_DAC_CHANNEL_2 (1) 00702 * 00703 * (1) On this STM32 serie, parameter not available on all devices. 00704 * Refer to device datasheet for channels availability. 00705 * @retval Returned value can be one of the following values: 00706 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0 00707 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0 00708 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0 00709 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0 00710 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0 00711 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0 00712 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0 00713 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0 00714 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0 00715 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0 00716 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0 00717 * @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0 00718 */ 00719 __STATIC_INLINE uint32_t LL_DAC_GetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00720 { 00721 return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00722 >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00723 ); 00724 } 00725 00726 /** 00727 * @brief Set the triangle waveform generation for the selected DAC channel: 00728 * triangle mode and amplitude. 00729 * @note For wave generation to be effective, DAC channel 00730 * wave generation mode must be enabled using 00731 * function @ref LL_DAC_SetWaveAutoGeneration(). 00732 * @note This setting can be set when the selected DAC channel is disabled 00733 * (otherwise, the setting operation is ignored). 00734 * @rmtoll CR MAMP1 LL_DAC_SetWaveTriangleAmplitude\n 00735 * CR MAMP2 LL_DAC_SetWaveTriangleAmplitude 00736 * @param DACx DAC instance 00737 * @param DAC_Channel This parameter can be one of the following values: 00738 * @arg @ref LL_DAC_CHANNEL_1 00739 * @arg @ref LL_DAC_CHANNEL_2 (1) 00740 * 00741 * (1) On this STM32 serie, parameter not available on all devices. 00742 * Refer to device datasheet for channels availability. 00743 * @param TriangleAmplitude This parameter can be one of the following values: 00744 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1 00745 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3 00746 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7 00747 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15 00748 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31 00749 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63 00750 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127 00751 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255 00752 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511 00753 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023 00754 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047 00755 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095 00756 * @retval None 00757 */ 00758 __STATIC_INLINE void LL_DAC_SetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel, 00759 uint32_t TriangleAmplitude) 00760 { 00761 MODIFY_REG(DACx->CR, 00762 DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK), 00763 TriangleAmplitude << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00764 } 00765 00766 /** 00767 * @brief Get the triangle waveform generation for the selected DAC channel: 00768 * triangle mode and amplitude. 00769 * @rmtoll CR MAMP1 LL_DAC_GetWaveTriangleAmplitude\n 00770 * CR MAMP2 LL_DAC_GetWaveTriangleAmplitude 00771 * @param DACx DAC instance 00772 * @param DAC_Channel This parameter can be one of the following values: 00773 * @arg @ref LL_DAC_CHANNEL_1 00774 * @arg @ref LL_DAC_CHANNEL_2 (1) 00775 * 00776 * (1) On this STM32 serie, parameter not available on all devices. 00777 * Refer to device datasheet for channels availability. 00778 * @retval Returned value can be one of the following values: 00779 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1 00780 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3 00781 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7 00782 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15 00783 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31 00784 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63 00785 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127 00786 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255 00787 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511 00788 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023 00789 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047 00790 * @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095 00791 */ 00792 __STATIC_INLINE uint32_t LL_DAC_GetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00793 { 00794 return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00795 >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00796 ); 00797 } 00798 00799 /** 00800 * @brief Set the output buffer for the selected DAC channel. 00801 * @rmtoll CR BOFF1 LL_DAC_SetOutputBuffer\n 00802 * CR BOFF2 LL_DAC_SetOutputBuffer 00803 * @param DACx DAC instance 00804 * @param DAC_Channel This parameter can be one of the following values: 00805 * @arg @ref LL_DAC_CHANNEL_1 00806 * @arg @ref LL_DAC_CHANNEL_2 (1) 00807 * 00808 * (1) On this STM32 serie, parameter not available on all devices. 00809 * Refer to device datasheet for channels availability. 00810 * @param OutputBuffer This parameter can be one of the following values: 00811 * @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE 00812 * @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE 00813 * @retval None 00814 */ 00815 __STATIC_INLINE void LL_DAC_SetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputBuffer) 00816 { 00817 MODIFY_REG(DACx->CR, 00818 DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK), 00819 OutputBuffer << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00820 } 00821 00822 /** 00823 * @brief Get the output buffer state for the selected DAC channel. 00824 * @rmtoll CR BOFF1 LL_DAC_GetOutputBuffer\n 00825 * CR BOFF2 LL_DAC_GetOutputBuffer 00826 * @param DACx DAC instance 00827 * @param DAC_Channel This parameter can be one of the following values: 00828 * @arg @ref LL_DAC_CHANNEL_1 00829 * @arg @ref LL_DAC_CHANNEL_2 (1) 00830 * 00831 * (1) On this STM32 serie, parameter not available on all devices. 00832 * Refer to device datasheet for channels availability. 00833 * @retval Returned value can be one of the following values: 00834 * @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE 00835 * @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE 00836 */ 00837 __STATIC_INLINE uint32_t LL_DAC_GetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00838 { 00839 return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00840 >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00841 ); 00842 } 00843 00844 /** 00845 * @} 00846 */ 00847 00848 /** @defgroup DAC_LL_EF_DMA_Management DMA Management 00849 * @{ 00850 */ 00851 00852 /** 00853 * @brief Enable DAC DMA transfer request of the selected channel. 00854 * @note To configure DMA source address (peripheral address), 00855 * use function @ref LL_DAC_DMA_GetRegAddr(). 00856 * @rmtoll CR DMAEN1 LL_DAC_EnableDMAReq\n 00857 * CR DMAEN2 LL_DAC_EnableDMAReq 00858 * @param DACx DAC instance 00859 * @param DAC_Channel This parameter can be one of the following values: 00860 * @arg @ref LL_DAC_CHANNEL_1 00861 * @arg @ref LL_DAC_CHANNEL_2 (1) 00862 * 00863 * (1) On this STM32 serie, parameter not available on all devices. 00864 * Refer to device datasheet for channels availability. 00865 * @retval None 00866 */ 00867 __STATIC_INLINE void LL_DAC_EnableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00868 { 00869 SET_BIT(DACx->CR, 00870 DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00871 } 00872 00873 /** 00874 * @brief Disable DAC DMA transfer request of the selected channel. 00875 * @note To configure DMA source address (peripheral address), 00876 * use function @ref LL_DAC_DMA_GetRegAddr(). 00877 * @rmtoll CR DMAEN1 LL_DAC_DisableDMAReq\n 00878 * CR DMAEN2 LL_DAC_DisableDMAReq 00879 * @param DACx DAC instance 00880 * @param DAC_Channel This parameter can be one of the following values: 00881 * @arg @ref LL_DAC_CHANNEL_1 00882 * @arg @ref LL_DAC_CHANNEL_2 (1) 00883 * 00884 * (1) On this STM32 serie, parameter not available on all devices. 00885 * Refer to device datasheet for channels availability. 00886 * @retval None 00887 */ 00888 __STATIC_INLINE void LL_DAC_DisableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00889 { 00890 CLEAR_BIT(DACx->CR, 00891 DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00892 } 00893 00894 /** 00895 * @brief Get DAC DMA transfer request state of the selected channel. 00896 * (0: DAC DMA transfer request is disabled, 1: DAC DMA transfer request is enabled) 00897 * @rmtoll CR DMAEN1 LL_DAC_IsDMAReqEnabled\n 00898 * CR DMAEN2 LL_DAC_IsDMAReqEnabled 00899 * @param DACx DAC instance 00900 * @param DAC_Channel This parameter can be one of the following values: 00901 * @arg @ref LL_DAC_CHANNEL_1 00902 * @arg @ref LL_DAC_CHANNEL_2 (1) 00903 * 00904 * (1) On this STM32 serie, parameter not available on all devices. 00905 * Refer to device datasheet for channels availability. 00906 * @retval State of bit (1 or 0). 00907 */ 00908 __STATIC_INLINE uint32_t LL_DAC_IsDMAReqEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00909 { 00910 return ((READ_BIT(DACx->CR, 00911 DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 00912 == (DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL); 00913 } 00914 00915 /** 00916 * @brief Function to help to configure DMA transfer to DAC: retrieve the 00917 * DAC register address from DAC instance and a list of DAC registers 00918 * intended to be used (most commonly) with DMA transfer. 00919 * @note These DAC registers are data holding registers: 00920 * when DAC conversion is requested, DAC generates a DMA transfer 00921 * request to have data available in DAC data holding registers. 00922 * @note This macro is intended to be used with LL DMA driver, refer to 00923 * function "LL_DMA_ConfigAddresses()". 00924 * Example: 00925 * LL_DMA_ConfigAddresses(DMA1, 00926 * LL_DMA_CHANNEL_1, 00927 * (uint32_t)&< array or variable >, 00928 * LL_DAC_DMA_GetRegAddr(DAC1, LL_DAC_CHANNEL_1, 00929 * LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED), 00930 * LL_DMA_DIRECTION_MEMORY_TO_PERIPH); 00931 * @rmtoll DHR12R1 DACC1DHR LL_DAC_DMA_GetRegAddr\n 00932 * DHR12L1 DACC1DHR LL_DAC_DMA_GetRegAddr\n 00933 * DHR8R1 DACC1DHR LL_DAC_DMA_GetRegAddr\n 00934 * DHR12R2 DACC2DHR LL_DAC_DMA_GetRegAddr\n 00935 * DHR12L2 DACC2DHR LL_DAC_DMA_GetRegAddr\n 00936 * DHR8R2 DACC2DHR LL_DAC_DMA_GetRegAddr 00937 * @param DACx DAC instance 00938 * @param DAC_Channel This parameter can be one of the following values: 00939 * @arg @ref LL_DAC_CHANNEL_1 00940 * @arg @ref LL_DAC_CHANNEL_2 (1) 00941 * 00942 * (1) On this STM32 serie, parameter not available on all devices. 00943 * Refer to device datasheet for channels availability. 00944 * @param Register This parameter can be one of the following values: 00945 * @arg @ref LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED 00946 * @arg @ref LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED 00947 * @arg @ref LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED 00948 * @retval DAC register address 00949 */ 00950 __STATIC_INLINE uint32_t LL_DAC_DMA_GetRegAddr(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Register) 00951 { 00952 /* Retrieve address of register DHR12Rx, DHR12Lx or DHR8Rx depending on */ 00953 /* DAC channel selected. */ 00954 return ((uint32_t)(__DAC_PTR_REG_OFFSET((DACx)->DHR12R1, ((DAC_Channel >> (Register & 0x1FUL)) 00955 & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0)))); 00956 } 00957 /** 00958 * @} 00959 */ 00960 00961 /** @defgroup DAC_LL_EF_Operation Operation on DAC channels 00962 * @{ 00963 */ 00964 00965 /** 00966 * @brief Enable DAC selected channel. 00967 * @rmtoll CR EN1 LL_DAC_Enable\n 00968 * CR EN2 LL_DAC_Enable 00969 * @note After enable from off state, DAC channel requires a delay 00970 * for output voltage to reach accuracy +/- 1 LSB. 00971 * Refer to device datasheet, parameter "tWAKEUP". 00972 * @param DACx DAC instance 00973 * @param DAC_Channel This parameter can be one of the following values: 00974 * @arg @ref LL_DAC_CHANNEL_1 00975 * @arg @ref LL_DAC_CHANNEL_2 (1) 00976 * 00977 * (1) On this STM32 serie, parameter not available on all devices. 00978 * Refer to device datasheet for channels availability. 00979 * @retval None 00980 */ 00981 __STATIC_INLINE void LL_DAC_Enable(DAC_TypeDef *DACx, uint32_t DAC_Channel) 00982 { 00983 SET_BIT(DACx->CR, 00984 DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 00985 } 00986 00987 /** 00988 * @brief Disable DAC selected channel. 00989 * @rmtoll CR EN1 LL_DAC_Disable\n 00990 * CR EN2 LL_DAC_Disable 00991 * @param DACx DAC instance 00992 * @param DAC_Channel This parameter can be one of the following values: 00993 * @arg @ref LL_DAC_CHANNEL_1 00994 * @arg @ref LL_DAC_CHANNEL_2 (1) 00995 * 00996 * (1) On this STM32 serie, parameter not available on all devices. 00997 * Refer to device datasheet for channels availability. 00998 * @retval None 00999 */ 01000 __STATIC_INLINE void LL_DAC_Disable(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01001 { 01002 CLEAR_BIT(DACx->CR, 01003 DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 01004 } 01005 01006 /** 01007 * @brief Get DAC enable state of the selected channel. 01008 * (0: DAC channel is disabled, 1: DAC channel is enabled) 01009 * @rmtoll CR EN1 LL_DAC_IsEnabled\n 01010 * CR EN2 LL_DAC_IsEnabled 01011 * @param DACx DAC instance 01012 * @param DAC_Channel This parameter can be one of the following values: 01013 * @arg @ref LL_DAC_CHANNEL_1 01014 * @arg @ref LL_DAC_CHANNEL_2 (1) 01015 * 01016 * (1) On this STM32 serie, parameter not available on all devices. 01017 * Refer to device datasheet for channels availability. 01018 * @retval State of bit (1 or 0). 01019 */ 01020 __STATIC_INLINE uint32_t LL_DAC_IsEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01021 { 01022 return ((READ_BIT(DACx->CR, 01023 DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 01024 == (DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL); 01025 } 01026 01027 /** 01028 * @brief Enable DAC trigger of the selected channel. 01029 * @note - If DAC trigger is disabled, DAC conversion is performed 01030 * automatically once the data holding register is updated, 01031 * using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()": 01032 * @ref LL_DAC_ConvertData12RightAligned(), ... 01033 * - If DAC trigger is enabled, DAC conversion is performed 01034 * only when a hardware of software trigger event is occurring. 01035 * Select trigger source using 01036 * function @ref LL_DAC_SetTriggerSource(). 01037 * @rmtoll CR TEN1 LL_DAC_EnableTrigger\n 01038 * CR TEN2 LL_DAC_EnableTrigger 01039 * @param DACx DAC instance 01040 * @param DAC_Channel This parameter can be one of the following values: 01041 * @arg @ref LL_DAC_CHANNEL_1 01042 * @arg @ref LL_DAC_CHANNEL_2 (1) 01043 * 01044 * (1) On this STM32 serie, parameter not available on all devices. 01045 * Refer to device datasheet for channels availability. 01046 * @retval None 01047 */ 01048 __STATIC_INLINE void LL_DAC_EnableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01049 { 01050 SET_BIT(DACx->CR, 01051 DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 01052 } 01053 01054 /** 01055 * @brief Disable DAC trigger of the selected channel. 01056 * @rmtoll CR TEN1 LL_DAC_DisableTrigger\n 01057 * CR TEN2 LL_DAC_DisableTrigger 01058 * @param DACx DAC instance 01059 * @param DAC_Channel This parameter can be one of the following values: 01060 * @arg @ref LL_DAC_CHANNEL_1 01061 * @arg @ref LL_DAC_CHANNEL_2 (1) 01062 * 01063 * (1) On this STM32 serie, parameter not available on all devices. 01064 * Refer to device datasheet for channels availability. 01065 * @retval None 01066 */ 01067 __STATIC_INLINE void LL_DAC_DisableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01068 { 01069 CLEAR_BIT(DACx->CR, 01070 DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)); 01071 } 01072 01073 /** 01074 * @brief Get DAC trigger state of the selected channel. 01075 * (0: DAC trigger is disabled, 1: DAC trigger is enabled) 01076 * @rmtoll CR TEN1 LL_DAC_IsTriggerEnabled\n 01077 * CR TEN2 LL_DAC_IsTriggerEnabled 01078 * @param DACx DAC instance 01079 * @param DAC_Channel This parameter can be one of the following values: 01080 * @arg @ref LL_DAC_CHANNEL_1 01081 * @arg @ref LL_DAC_CHANNEL_2 (1) 01082 * 01083 * (1) On this STM32 serie, parameter not available on all devices. 01084 * Refer to device datasheet for channels availability. 01085 * @retval State of bit (1 or 0). 01086 */ 01087 __STATIC_INLINE uint32_t LL_DAC_IsTriggerEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01088 { 01089 return ((READ_BIT(DACx->CR, 01090 DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)) 01091 == (DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL); 01092 } 01093 01094 /** 01095 * @brief Trig DAC conversion by software for the selected DAC channel. 01096 * @note Preliminarily, DAC trigger must be set to software trigger 01097 * using function 01098 * @ref LL_DAC_Init() 01099 * @ref LL_DAC_SetTriggerSource() 01100 * with parameter "LL_DAC_TRIGGER_SOFTWARE". 01101 * and DAC trigger must be enabled using 01102 * function @ref LL_DAC_EnableTrigger(). 01103 * @note For devices featuring DAC with 2 channels: this function 01104 * can perform a SW start of both DAC channels simultaneously. 01105 * Two channels can be selected as parameter. 01106 * Example: (LL_DAC_CHANNEL_1 | LL_DAC_CHANNEL_2) 01107 * @rmtoll SWTRIGR SWTRIG1 LL_DAC_TrigSWConversion\n 01108 * SWTRIGR SWTRIG2 LL_DAC_TrigSWConversion 01109 * @param DACx DAC instance 01110 * @param DAC_Channel This parameter can a combination of the following values: 01111 * @arg @ref LL_DAC_CHANNEL_1 01112 * @arg @ref LL_DAC_CHANNEL_2 (1) 01113 * 01114 * (1) On this STM32 serie, parameter not available on all devices. 01115 * Refer to device datasheet for channels availability. 01116 * @retval None 01117 */ 01118 __STATIC_INLINE void LL_DAC_TrigSWConversion(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01119 { 01120 SET_BIT(DACx->SWTRIGR, 01121 (DAC_Channel & DAC_SWTR_CHX_MASK)); 01122 } 01123 01124 /** 01125 * @brief Set the data to be loaded in the data holding register 01126 * in format 12 bits left alignment (LSB aligned on bit 0), 01127 * for the selected DAC channel. 01128 * @rmtoll DHR12R1 DACC1DHR LL_DAC_ConvertData12RightAligned\n 01129 * DHR12R2 DACC2DHR LL_DAC_ConvertData12RightAligned 01130 * @param DACx DAC instance 01131 * @param DAC_Channel This parameter can be one of the following values: 01132 * @arg @ref LL_DAC_CHANNEL_1 01133 * @arg @ref LL_DAC_CHANNEL_2 (1) 01134 * 01135 * (1) On this STM32 serie, parameter not available on all devices. 01136 * Refer to device datasheet for channels availability. 01137 * @param Data Value between Min_Data=0x000 and Max_Data=0xFFF 01138 * @retval None 01139 */ 01140 __STATIC_INLINE void LL_DAC_ConvertData12RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data) 01141 { 01142 __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS) 01143 & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0); 01144 01145 MODIFY_REG(*preg, DAC_DHR12R1_DACC1DHR, Data); 01146 } 01147 01148 /** 01149 * @brief Set the data to be loaded in the data holding register 01150 * in format 12 bits left alignment (MSB aligned on bit 15), 01151 * for the selected DAC channel. 01152 * @rmtoll DHR12L1 DACC1DHR LL_DAC_ConvertData12LeftAligned\n 01153 * DHR12L2 DACC2DHR LL_DAC_ConvertData12LeftAligned 01154 * @param DACx DAC instance 01155 * @param DAC_Channel This parameter can be one of the following values: 01156 * @arg @ref LL_DAC_CHANNEL_1 01157 * @arg @ref LL_DAC_CHANNEL_2 (1) 01158 * 01159 * (1) On this STM32 serie, parameter not available on all devices. 01160 * Refer to device datasheet for channels availability. 01161 * @param Data Value between Min_Data=0x000 and Max_Data=0xFFF 01162 * @retval None 01163 */ 01164 __STATIC_INLINE void LL_DAC_ConvertData12LeftAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data) 01165 { 01166 __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS) 01167 & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0); 01168 01169 MODIFY_REG(*preg, DAC_DHR12L1_DACC1DHR, Data); 01170 } 01171 01172 /** 01173 * @brief Set the data to be loaded in the data holding register 01174 * in format 8 bits left alignment (LSB aligned on bit 0), 01175 * for the selected DAC channel. 01176 * @rmtoll DHR8R1 DACC1DHR LL_DAC_ConvertData8RightAligned\n 01177 * DHR8R2 DACC2DHR LL_DAC_ConvertData8RightAligned 01178 * @param DACx DAC instance 01179 * @param DAC_Channel This parameter can be one of the following values: 01180 * @arg @ref LL_DAC_CHANNEL_1 01181 * @arg @ref LL_DAC_CHANNEL_2 (1) 01182 * 01183 * (1) On this STM32 serie, parameter not available on all devices. 01184 * Refer to device datasheet for channels availability. 01185 * @param Data Value between Min_Data=0x00 and Max_Data=0xFF 01186 * @retval None 01187 */ 01188 __STATIC_INLINE void LL_DAC_ConvertData8RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data) 01189 { 01190 __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS) 01191 & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0); 01192 01193 MODIFY_REG(*preg, DAC_DHR8R1_DACC1DHR, Data); 01194 } 01195 01196 #if defined(DAC_CHANNEL2_SUPPORT) 01197 /** 01198 * @brief Set the data to be loaded in the data holding register 01199 * in format 12 bits left alignment (LSB aligned on bit 0), 01200 * for both DAC channels. 01201 * @rmtoll DHR12RD DACC1DHR LL_DAC_ConvertDualData12RightAligned\n 01202 * DHR12RD DACC2DHR LL_DAC_ConvertDualData12RightAligned 01203 * @param DACx DAC instance 01204 * @param DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF 01205 * @param DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF 01206 * @retval None 01207 */ 01208 __STATIC_INLINE void LL_DAC_ConvertDualData12RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, 01209 uint32_t DataChannel2) 01210 { 01211 MODIFY_REG(DACx->DHR12RD, 01212 (DAC_DHR12RD_DACC2DHR | DAC_DHR12RD_DACC1DHR), 01213 ((DataChannel2 << DAC_DHR12RD_DACC2DHR_BITOFFSET_POS) | DataChannel1)); 01214 } 01215 01216 /** 01217 * @brief Set the data to be loaded in the data holding register 01218 * in format 12 bits left alignment (MSB aligned on bit 15), 01219 * for both DAC channels. 01220 * @rmtoll DHR12LD DACC1DHR LL_DAC_ConvertDualData12LeftAligned\n 01221 * DHR12LD DACC2DHR LL_DAC_ConvertDualData12LeftAligned 01222 * @param DACx DAC instance 01223 * @param DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF 01224 * @param DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF 01225 * @retval None 01226 */ 01227 __STATIC_INLINE void LL_DAC_ConvertDualData12LeftAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, 01228 uint32_t DataChannel2) 01229 { 01230 /* Note: Data of DAC channel 2 shift value subtracted of 4 because */ 01231 /* data on 16 bits and DAC channel 2 bits field is on the 12 MSB, */ 01232 /* the 4 LSB must be taken into account for the shift value. */ 01233 MODIFY_REG(DACx->DHR12LD, 01234 (DAC_DHR12LD_DACC2DHR | DAC_DHR12LD_DACC1DHR), 01235 ((DataChannel2 << (DAC_DHR12LD_DACC2DHR_BITOFFSET_POS - 4U)) | DataChannel1)); 01236 } 01237 01238 /** 01239 * @brief Set the data to be loaded in the data holding register 01240 * in format 8 bits left alignment (LSB aligned on bit 0), 01241 * for both DAC channels. 01242 * @rmtoll DHR8RD DACC1DHR LL_DAC_ConvertDualData8RightAligned\n 01243 * DHR8RD DACC2DHR LL_DAC_ConvertDualData8RightAligned 01244 * @param DACx DAC instance 01245 * @param DataChannel1 Value between Min_Data=0x00 and Max_Data=0xFF 01246 * @param DataChannel2 Value between Min_Data=0x00 and Max_Data=0xFF 01247 * @retval None 01248 */ 01249 __STATIC_INLINE void LL_DAC_ConvertDualData8RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, 01250 uint32_t DataChannel2) 01251 { 01252 MODIFY_REG(DACx->DHR8RD, 01253 (DAC_DHR8RD_DACC2DHR | DAC_DHR8RD_DACC1DHR), 01254 ((DataChannel2 << DAC_DHR8RD_DACC2DHR_BITOFFSET_POS) | DataChannel1)); 01255 } 01256 #endif /* DAC_CHANNEL2_SUPPORT */ 01257 01258 /** 01259 * @brief Retrieve output data currently generated for the selected DAC channel. 01260 * @note Whatever alignment and resolution settings 01261 * (using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()": 01262 * @ref LL_DAC_ConvertData12RightAligned(), ...), 01263 * output data format is 12 bits right aligned (LSB aligned on bit 0). 01264 * @rmtoll DOR1 DACC1DOR LL_DAC_RetrieveOutputData\n 01265 * DOR2 DACC2DOR LL_DAC_RetrieveOutputData 01266 * @param DACx DAC instance 01267 * @param DAC_Channel This parameter can be one of the following values: 01268 * @arg @ref LL_DAC_CHANNEL_1 01269 * @arg @ref LL_DAC_CHANNEL_2 (1) 01270 * 01271 * (1) On this STM32 serie, parameter not available on all devices. 01272 * Refer to device datasheet for channels availability. 01273 * @retval Value between Min_Data=0x000 and Max_Data=0xFFF 01274 */ 01275 __STATIC_INLINE uint32_t LL_DAC_RetrieveOutputData(DAC_TypeDef *DACx, uint32_t DAC_Channel) 01276 { 01277 __IO uint32_t const *preg = __DAC_PTR_REG_OFFSET(DACx->DOR1, (DAC_Channel >> DAC_REG_DORX_REGOFFSET_BITOFFSET_POS) 01278 & DAC_REG_DORX_REGOFFSET_MASK_POSBIT0); 01279 01280 return (uint16_t) READ_BIT(*preg, DAC_DOR1_DACC1DOR); 01281 } 01282 01283 /** 01284 * @} 01285 */ 01286 01287 /** @defgroup DAC_LL_EF_FLAG_Management FLAG Management 01288 * @{ 01289 */ 01290 01291 /** 01292 * @brief Get DAC underrun flag for DAC channel 1 01293 * @rmtoll SR DMAUDR1 LL_DAC_IsActiveFlag_DMAUDR1 01294 * @param DACx DAC instance 01295 * @retval State of bit (1 or 0). 01296 */ 01297 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR1(DAC_TypeDef *DACx) 01298 { 01299 return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR1) == (LL_DAC_FLAG_DMAUDR1)) ? 1UL : 0UL); 01300 } 01301 01302 #if defined(DAC_CHANNEL2_SUPPORT) 01303 /** 01304 * @brief Get DAC underrun flag for DAC channel 2 01305 * @rmtoll SR DMAUDR2 LL_DAC_IsActiveFlag_DMAUDR2 01306 * @param DACx DAC instance 01307 * @retval State of bit (1 or 0). 01308 */ 01309 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR2(DAC_TypeDef *DACx) 01310 { 01311 return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR2) == (LL_DAC_FLAG_DMAUDR2)) ? 1UL : 0UL); 01312 } 01313 #endif /* DAC_CHANNEL2_SUPPORT */ 01314 01315 /** 01316 * @brief Clear DAC underrun flag for DAC channel 1 01317 * @rmtoll SR DMAUDR1 LL_DAC_ClearFlag_DMAUDR1 01318 * @param DACx DAC instance 01319 * @retval None 01320 */ 01321 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR1(DAC_TypeDef *DACx) 01322 { 01323 WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR1); 01324 } 01325 01326 #if defined(DAC_CHANNEL2_SUPPORT) 01327 /** 01328 * @brief Clear DAC underrun flag for DAC channel 2 01329 * @rmtoll SR DMAUDR2 LL_DAC_ClearFlag_DMAUDR2 01330 * @param DACx DAC instance 01331 * @retval None 01332 */ 01333 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR2(DAC_TypeDef *DACx) 01334 { 01335 WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR2); 01336 } 01337 #endif /* DAC_CHANNEL2_SUPPORT */ 01338 01339 /** 01340 * @} 01341 */ 01342 01343 /** @defgroup DAC_LL_EF_IT_Management IT management 01344 * @{ 01345 */ 01346 01347 /** 01348 * @brief Enable DMA underrun interrupt for DAC channel 1 01349 * @rmtoll CR DMAUDRIE1 LL_DAC_EnableIT_DMAUDR1 01350 * @param DACx DAC instance 01351 * @retval None 01352 */ 01353 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR1(DAC_TypeDef *DACx) 01354 { 01355 SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1); 01356 } 01357 01358 #if defined(DAC_CHANNEL2_SUPPORT) 01359 /** 01360 * @brief Enable DMA underrun interrupt for DAC channel 2 01361 * @rmtoll CR DMAUDRIE2 LL_DAC_EnableIT_DMAUDR2 01362 * @param DACx DAC instance 01363 * @retval None 01364 */ 01365 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR2(DAC_TypeDef *DACx) 01366 { 01367 SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2); 01368 } 01369 #endif /* DAC_CHANNEL2_SUPPORT */ 01370 01371 /** 01372 * @brief Disable DMA underrun interrupt for DAC channel 1 01373 * @rmtoll CR DMAUDRIE1 LL_DAC_DisableIT_DMAUDR1 01374 * @param DACx DAC instance 01375 * @retval None 01376 */ 01377 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR1(DAC_TypeDef *DACx) 01378 { 01379 CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1); 01380 } 01381 01382 #if defined(DAC_CHANNEL2_SUPPORT) 01383 /** 01384 * @brief Disable DMA underrun interrupt for DAC channel 2 01385 * @rmtoll CR DMAUDRIE2 LL_DAC_DisableIT_DMAUDR2 01386 * @param DACx DAC instance 01387 * @retval None 01388 */ 01389 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR2(DAC_TypeDef *DACx) 01390 { 01391 CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2); 01392 } 01393 #endif /* DAC_CHANNEL2_SUPPORT */ 01394 01395 /** 01396 * @brief Get DMA underrun interrupt for DAC channel 1 01397 * @rmtoll CR DMAUDRIE1 LL_DAC_IsEnabledIT_DMAUDR1 01398 * @param DACx DAC instance 01399 * @retval State of bit (1 or 0). 01400 */ 01401 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR1(DAC_TypeDef *DACx) 01402 { 01403 return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1) == (LL_DAC_IT_DMAUDRIE1)) ? 1UL : 0UL); 01404 } 01405 01406 #if defined(DAC_CHANNEL2_SUPPORT) 01407 /** 01408 * @brief Get DMA underrun interrupt for DAC channel 2 01409 * @rmtoll CR DMAUDRIE2 LL_DAC_IsEnabledIT_DMAUDR2 01410 * @param DACx DAC instance 01411 * @retval State of bit (1 or 0). 01412 */ 01413 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR2(DAC_TypeDef *DACx) 01414 { 01415 return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2) == (LL_DAC_IT_DMAUDRIE2)) ? 1UL : 0UL); 01416 } 01417 #endif /* DAC_CHANNEL2_SUPPORT */ 01418 01419 /** 01420 * @} 01421 */ 01422 01423 #if defined(USE_FULL_LL_DRIVER) 01424 /** @defgroup DAC_LL_EF_Init Initialization and de-initialization functions 01425 * @{ 01426 */ 01427 01428 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx); 01429 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct); 01430 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct); 01431 01432 /** 01433 * @} 01434 */ 01435 #endif /* USE_FULL_LL_DRIVER */ 01436 01437 /** 01438 * @} 01439 */ 01440 01441 /** 01442 * @} 01443 */ 01444 01445 #endif /* DAC */ 01446 01447 /** 01448 * @} 01449 */ 01450 01451 #ifdef __cplusplus 01452 } 01453 #endif 01454 01455 #endif /* STM32F4xx_LL_DAC_H */ 01456 01457 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/