xref: /btstack/port/stm32-f4discovery-usb/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dac.h (revision a8f7f3fcbcd51f8d2e92aca076b6a9f812db358c)
1 /**
2   ******************************************************************************
3   * @file    stm32f4xx_ll_dac.h
4   * @author  MCD Application Team
5   * @brief   Header file of DAC LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef __STM32F4xx_LL_DAC_H
22 #define __STM32F4xx_LL_DAC_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f4xx.h"
30 
31 /** @addtogroup STM32F4xx_LL_Driver
32   * @{
33   */
34 
35 #if defined(DAC)
36 
37 /** @defgroup DAC_LL DAC
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 
44 /* Private constants ---------------------------------------------------------*/
45 /** @defgroup DAC_LL_Private_Constants DAC Private Constants
46   * @{
47   */
48 
49 /* Internal masks for DAC channels definition */
50 /* To select into literal LL_DAC_CHANNEL_x the relevant bits for:             */
51 /* - channel bits position into register CR                                   */
52 /* - channel bits position into register SWTRIG                               */
53 /* - channel register offset of data holding register DHRx                    */
54 /* - channel register offset of data output register DORx                     */
55 #define DAC_CR_CH1_BITOFFSET           0U    /* Position of channel bits into registers CR, MCR, CCR, SHHR, SHRR of channel 1 */
56 #define DAC_CR_CH2_BITOFFSET           16U   /* Position of channel bits into registers CR, MCR, CCR, SHHR, SHRR of channel 2 */
57 #define DAC_CR_CHX_BITOFFSET_MASK      (DAC_CR_CH1_BITOFFSET | DAC_CR_CH2_BITOFFSET)
58 
59 #define DAC_SWTR_CH1                   (DAC_SWTRIGR_SWTRIG1) /* Channel bit into register SWTRIGR of channel 1. This bit is into area of LL_DAC_CR_CHx_BITOFFSET but excluded by mask DAC_CR_CHX_BITOFFSET_MASK (done to be enable to trig SW start of both DAC channels simultaneously). */
60 #if defined(DAC_CHANNEL2_SUPPORT)
61 #define DAC_SWTR_CH2                   (DAC_SWTRIGR_SWTRIG2) /* Channel bit into register SWTRIGR of channel 2. This bit is into area of LL_DAC_CR_CHx_BITOFFSET but excluded by mask DAC_CR_CHX_BITOFFSET_MASK (done to be enable to trig SW start of both DAC channels simultaneously). */
62 #define DAC_SWTR_CHX_MASK              (DAC_SWTR_CH1 | DAC_SWTR_CH2)
63 #else
64 #define DAC_SWTR_CHX_MASK              (DAC_SWTR_CH1)
65 #endif /* DAC_CHANNEL2_SUPPORT */
66 
67 #define DAC_REG_DHR12R1_REGOFFSET      0x00000000U             /* Register DHR12Rx channel 1 taken as reference */
68 #define DAC_REG_DHR12L1_REGOFFSET      0x00100000U             /* Register offset of DHR12Lx channel 1 versus DHR12Rx channel 1 (shifted left of 20 bits) */
69 #define DAC_REG_DHR8R1_REGOFFSET       0x02000000U             /* Register offset of DHR8Rx  channel 1 versus DHR12Rx channel 1 (shifted left of 24 bits) */
70 #if defined(DAC_CHANNEL2_SUPPORT)
71 #define DAC_REG_DHR12R2_REGOFFSET      0x00030000U             /* Register offset of DHR12Rx channel 2 versus DHR12Rx channel 1 (shifted left of 16 bits) */
72 #define DAC_REG_DHR12L2_REGOFFSET      0x00400000U             /* Register offset of DHR12Lx channel 2 versus DHR12Rx channel 1 (shifted left of 20 bits) */
73 #define DAC_REG_DHR8R2_REGOFFSET       0x05000000U             /* Register offset of DHR8Rx  channel 2 versus DHR12Rx channel 1 (shifted left of 24 bits) */
74 #endif /* DAC_CHANNEL2_SUPPORT */
75 #define DAC_REG_DHR12RX_REGOFFSET_MASK 0x000F0000U
76 #define DAC_REG_DHR12LX_REGOFFSET_MASK 0x00F00000U
77 #define DAC_REG_DHR8RX_REGOFFSET_MASK  0x0F000000U
78 #define DAC_REG_DHRX_REGOFFSET_MASK    (DAC_REG_DHR12RX_REGOFFSET_MASK | DAC_REG_DHR12LX_REGOFFSET_MASK | DAC_REG_DHR8RX_REGOFFSET_MASK)
79 
80 #define DAC_REG_DOR1_REGOFFSET         0x00000000U             /* Register DORx channel 1 taken as reference */
81 #if defined(DAC_CHANNEL2_SUPPORT)
82 #define DAC_REG_DOR2_REGOFFSET         0x10000000U             /* Register offset of DORx channel 1 versus DORx channel 2 (shifted left of 28 bits) */
83 #define DAC_REG_DORX_REGOFFSET_MASK    (DAC_REG_DOR1_REGOFFSET | DAC_REG_DOR2_REGOFFSET)
84 #else
85 #define DAC_REG_DORX_REGOFFSET_MASK    (DAC_REG_DOR1_REGOFFSET)
86 #endif /* DAC_CHANNEL2_SUPPORT */
87 
88 /* DAC registers bits positions */
89 #if defined(DAC_CHANNEL2_SUPPORT)
90 #define DAC_DHR12RD_DACC2DHR_BITOFFSET_POS                16U  /* Value equivalent to POSITION_VAL(DAC_DHR12RD_DACC2DHR) */
91 #define DAC_DHR12LD_DACC2DHR_BITOFFSET_POS                20U  /* Value equivalent to POSITION_VAL(DAC_DHR12LD_DACC2DHR) */
92 #define DAC_DHR8RD_DACC2DHR_BITOFFSET_POS                  8U  /* Value equivalent to POSITION_VAL(DAC_DHR8RD_DACC2DHR) */
93 #endif /* DAC_CHANNEL2_SUPPORT */
94 
95 /* Miscellaneous data */
96 #define DAC_DIGITAL_SCALE_12BITS                        4095U  /* Full-scale digital value with a resolution of 12 bits (voltage range determined by analog voltage references Vref+ and Vref-, refer to reference manual) */
97 
98 /**
99   * @}
100   */
101 
102 
103 /* Private macros ------------------------------------------------------------*/
104 /** @defgroup DAC_LL_Private_Macros DAC Private Macros
105   * @{
106   */
107 
108 /**
109   * @brief  Driver macro reserved for internal use: isolate bits with the
110   *         selected mask and shift them to the register LSB
111   *         (shift mask on register position bit 0).
112   * @param  __BITS__ Bits in register 32 bits
113   * @param  __MASK__ Mask in register 32 bits
114   * @retval Bits in register 32 bits
115 */
116 #define __DAC_MASK_SHIFT(__BITS__, __MASK__)                                   \
117   (((__BITS__) & (__MASK__)) >> POSITION_VAL((__MASK__)))
118 
119 /**
120   * @brief  Driver macro reserved for internal use: set a pointer to
121   *         a register from a register basis from which an offset
122   *         is applied.
123   * @param  __REG__ Register basis from which the offset is applied.
124   * @param  __REG_OFFFSET__ Offset to be applied (unit number of registers).
125   * @retval Pointer to register address
126 */
127 #define __DAC_PTR_REG_OFFSET(__REG__, __REG_OFFFSET__)                         \
128  ((__IO uint32_t *)((uint32_t) ((uint32_t)(&(__REG__)) + ((__REG_OFFFSET__) << 2U))))
129 
130 /**
131   * @}
132   */
133 
134 
135 /* Exported types ------------------------------------------------------------*/
136 #if defined(USE_FULL_LL_DRIVER)
137 /** @defgroup DAC_LL_ES_INIT DAC Exported Init structure
138   * @{
139   */
140 
141 /**
142   * @brief  Structure definition of some features of DAC instance.
143   */
144 typedef struct
145 {
146   uint32_t TriggerSource;               /*!< Set the conversion trigger source for the selected DAC channel: internal (SW start) or from external IP (timer event, external interrupt line).
147                                              This parameter can be a value of @ref DAC_LL_EC_TRIGGER_SOURCE
148 
149                                              This feature can be modified afterwards using unitary function @ref LL_DAC_SetTriggerSource(). */
150 
151   uint32_t WaveAutoGeneration;          /*!< Set the waveform automatic generation mode for the selected DAC channel.
152                                              This parameter can be a value of @ref DAC_LL_EC_WAVE_AUTO_GENERATION_MODE
153 
154                                              This feature can be modified afterwards using unitary function @ref LL_DAC_SetWaveAutoGeneration(). */
155 
156   uint32_t WaveAutoGenerationConfig;    /*!< Set the waveform automatic generation mode for the selected DAC channel.
157                                              If waveform automatic generation mode is set to noise, this parameter can be a value of @ref DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS
158                                              If waveform automatic generation mode is set to triangle, this parameter can be a value of @ref DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE
159                                              @note If waveform automatic generation mode is disabled, this parameter is discarded.
160 
161                                              This feature can be modified afterwards using unitary function @ref LL_DAC_SetWaveNoiseLFSR() or @ref LL_DAC_SetWaveTriangleAmplitude(), depending on the wave automatic generation selected. */
162 
163   uint32_t OutputBuffer;                /*!< Set the output buffer for the selected DAC channel.
164                                              This parameter can be a value of @ref DAC_LL_EC_OUTPUT_BUFFER
165 
166                                              This feature can be modified afterwards using unitary function @ref LL_DAC_SetOutputBuffer(). */
167 
168 } LL_DAC_InitTypeDef;
169 
170 /**
171   * @}
172   */
173 #endif /* USE_FULL_LL_DRIVER */
174 
175 /* Exported constants --------------------------------------------------------*/
176 /** @defgroup DAC_LL_Exported_Constants DAC Exported Constants
177   * @{
178   */
179 
180 /** @defgroup DAC_LL_EC_GET_FLAG DAC flags
181   * @brief    Flags defines which can be used with LL_DAC_ReadReg function
182   * @{
183   */
184 /* DAC channel 1 flags */
185 #define LL_DAC_FLAG_DMAUDR1                (DAC_SR_DMAUDR1)   /*!< DAC channel 1 flag DMA underrun */
186 
187 #if defined(DAC_CHANNEL2_SUPPORT)
188 /* DAC channel 2 flags */
189 #define LL_DAC_FLAG_DMAUDR2                (DAC_SR_DMAUDR2)   /*!< DAC channel 2 flag DMA underrun */
190 #endif /* DAC_CHANNEL2_SUPPORT */
191 /**
192   * @}
193   */
194 
195 /** @defgroup DAC_LL_EC_IT DAC interruptions
196   * @brief    IT defines which can be used with LL_DAC_ReadReg and  LL_DAC_WriteReg functions
197   * @{
198   */
199 #define LL_DAC_IT_DMAUDRIE1                (DAC_CR_DMAUDRIE1) /*!< DAC channel 1 interruption DMA underrun */
200 #if defined(DAC_CHANNEL2_SUPPORT)
201 #define LL_DAC_IT_DMAUDRIE2                (DAC_CR_DMAUDRIE2) /*!< DAC channel 2 interruption DMA underrun */
202 #endif /* DAC_CHANNEL2_SUPPORT */
203 /**
204   * @}
205   */
206 
207 /** @defgroup DAC_LL_EC_CHANNEL DAC channels
208   * @{
209   */
210 #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 */
211 #if defined(DAC_CHANNEL2_SUPPORT)
212 #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 */
213 #endif /* DAC_CHANNEL2_SUPPORT */
214 /**
215   * @}
216   */
217 
218 /** @defgroup DAC_LL_EC_TRIGGER_SOURCE DAC trigger source
219   * @{
220   */
221 #define LL_DAC_TRIG_SOFTWARE               (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger internal (SW start) */
222 #define LL_DAC_TRIG_EXT_TIM2_TRGO          (DAC_CR_TSEL1_2                                  ) /*!< DAC channel conversion trigger from external IP: TIM2 TRGO. */
223 #define LL_DAC_TRIG_EXT_TIM8_TRGO          (                                  DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM8 TRGO. */
224 #define LL_DAC_TRIG_EXT_TIM4_TRGO          (DAC_CR_TSEL1_2                  | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM4 TRGO. */
225 #define LL_DAC_TRIG_EXT_TIM6_TRGO          0x00000000U                                        /*!< DAC channel conversion trigger from external IP: TIM6 TRGO. */
226 #define LL_DAC_TRIG_EXT_TIM7_TRGO          (                 DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external IP: TIM7 TRGO. */
227 #define LL_DAC_TRIG_EXT_TIM5_TRGO          (                 DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM5 TRGO. */
228 #define LL_DAC_TRIG_EXT_EXTI_LINE9         (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external IP: external interrupt line 9. */
229 /**
230   * @}
231   */
232 
233 /** @defgroup DAC_LL_EC_WAVE_AUTO_GENERATION_MODE DAC waveform automatic generation mode
234   * @{
235   */
236 #define LL_DAC_WAVE_AUTO_GENERATION_NONE     0x00000000U             /*!< DAC channel wave auto generation mode disabled. */
237 #define LL_DAC_WAVE_AUTO_GENERATION_NOISE    (DAC_CR_WAVE1_0)        /*!< DAC channel wave auto generation mode enabled, set generated noise waveform. */
238 #define LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE (DAC_CR_WAVE1_1)        /*!< DAC channel wave auto generation mode enabled, set generated triangle waveform. */
239 /**
240   * @}
241   */
242 
243 /** @defgroup DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS DAC wave generation - Noise LFSR unmask bits
244   * @{
245   */
246 #define LL_DAC_NOISE_LFSR_UNMASK_BIT0      0x00000000U                                                         /*!< Noise wave generation, unmask LFSR bit0, for the selected DAC channel */
247 #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 */
248 #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 */
249 #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 */
250 #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 */
251 #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 */
252 #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 */
253 #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 */
254 #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 */
255 #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 */
256 #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 */
257 #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 */
258 /**
259   * @}
260   */
261 
262 /** @defgroup DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE DAC wave generation - Triangle amplitude
263   * @{
264   */
265 #define LL_DAC_TRIANGLE_AMPLITUDE_1        0x00000000U                                                         /*!< Triangle wave generation, amplitude of 1 LSB of DAC output range, for the selected DAC channel */
266 #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 */
267 #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 */
268 #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 */
269 #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 */
270 #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 */
271 #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 */
272 #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 */
273 #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 */
274 #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 */
275 #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 */
276 #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 */
277 /**
278   * @}
279   */
280 
281 /** @defgroup DAC_LL_EC_OUTPUT_BUFFER DAC channel output buffer
282   * @{
283   */
284 #define LL_DAC_OUTPUT_BUFFER_ENABLE        0x00000000U             /*!< The selected DAC channel output is buffered: higher drive current capability, but also higher current consumption */
285 #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 */
286 /**
287   * @}
288   */
289 
290 
291 /** @defgroup DAC_LL_EC_RESOLUTION  DAC channel output resolution
292   * @{
293   */
294 #define LL_DAC_RESOLUTION_12B              0x00000000U             /*!< DAC channel resolution 12 bits */
295 #define LL_DAC_RESOLUTION_8B               0x00000002U             /*!< DAC channel resolution 8 bits */
296 /**
297   * @}
298   */
299 
300 /** @defgroup DAC_LL_EC_REGISTERS  DAC registers compliant with specific purpose
301   * @{
302   */
303 /* List of DAC registers intended to be used (most commonly) with             */
304 /* DMA transfer.                                                              */
305 /* Refer to function @ref LL_DAC_DMA_GetRegAddr().                            */
306 #define LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED  DAC_REG_DHR12RX_REGOFFSET_MASK /*!< DAC channel data holding register 12 bits right aligned */
307 #define LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED   DAC_REG_DHR12LX_REGOFFSET_MASK /*!< DAC channel data holding register 12 bits left aligned */
308 #define LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED   DAC_REG_DHR8RX_REGOFFSET_MASK  /*!< DAC channel data holding register 8 bits right aligned */
309 /**
310   * @}
311   */
312 
313 /** @defgroup DAC_LL_EC_HW_DELAYS  Definitions of DAC hardware constraints delays
314   * @note   Only DAC IP HW delays are defined in DAC LL driver driver,
315   *         not timeout values.
316   *         For details on delays values, refer to descriptions in source code
317   *         above each literal definition.
318   * @{
319   */
320 
321 /* Delay for DAC channel voltage settling time from DAC channel startup       */
322 /* (transition from disable to enable).                                       */
323 /* Note: DAC channel startup time depends on board application environment:   */
324 /*       impedance connected to DAC channel output.                           */
325 /*       The delay below is specified under conditions:                       */
326 /*        - voltage maximum transition (lowest to highest value)              */
327 /*        - until voltage reaches final value +-1LSB                          */
328 /*        - DAC channel output buffer enabled                                 */
329 /*        - load impedance of 5kOhm (min), 50pF (max)                         */
330 /* Literal set to maximum value (refer to device datasheet,                   */
331 /* parameter "tWAKEUP").                                                      */
332 /* Unit: us                                                                   */
333 #define LL_DAC_DELAY_STARTUP_VOLTAGE_SETTLING_US             15U  /*!< Delay for DAC channel voltage settling time from DAC channel startup (transition from disable to enable) */
334 
335 /* Delay for DAC channel voltage settling time.                               */
336 /* Note: DAC channel startup time depends on board application environment:   */
337 /*       impedance connected to DAC channel output.                           */
338 /*       The delay below is specified under conditions:                       */
339 /*        - voltage maximum transition (lowest to highest value)              */
340 /*        - until voltage reaches final value +-1LSB                          */
341 /*        - DAC channel output buffer enabled                                 */
342 /*        - load impedance of 5kOhm min, 50pF max                             */
343 /* Literal set to maximum value (refer to device datasheet,                   */
344 /* parameter "tSETTLING").                                                    */
345 /* Unit: us                                                                   */
346 #define LL_DAC_DELAY_VOLTAGE_SETTLING_US                    12U  /*!< Delay for DAC channel voltage settling time */
347 /**
348   * @}
349   */
350 
351 /**
352   * @}
353   */
354 
355 /* Exported macro ------------------------------------------------------------*/
356 /** @defgroup DAC_LL_Exported_Macros DAC Exported Macros
357   * @{
358   */
359 
360 /** @defgroup DAC_LL_EM_WRITE_READ Common write and read registers macros
361   * @{
362   */
363 
364 /**
365   * @brief  Write a value in DAC register
366   * @param  __INSTANCE__ DAC Instance
367   * @param  __REG__ Register to be written
368   * @param  __VALUE__ Value to be written in the register
369   * @retval None
370   */
371 #define LL_DAC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
372 
373 /**
374   * @brief  Read a value in DAC register
375   * @param  __INSTANCE__ DAC Instance
376   * @param  __REG__ Register to be read
377   * @retval Register value
378   */
379 #define LL_DAC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
380 
381 /**
382   * @}
383   */
384 
385 /** @defgroup DAC_LL_EM_HELPER_MACRO DAC helper macro
386   * @{
387   */
388 
389 /**
390   * @brief  Helper macro to get DAC channel number in decimal format
391   *         from literals LL_DAC_CHANNEL_x.
392   *         Example:
393   *            __LL_DAC_CHANNEL_TO_DECIMAL_NB(LL_DAC_CHANNEL_1)
394   *            will return decimal number "1".
395   * @note   The input can be a value from functions where a channel
396   *         number is returned.
397   * @param  __CHANNEL__ This parameter can be one of the following values:
398   *         @arg @ref LL_DAC_CHANNEL_1
399   *         @arg @ref LL_DAC_CHANNEL_2 (1)
400   *
401   *         (1) On this STM32 serie, parameter not available on all devices.
402   *             Refer to device datasheet for channels availability.
403   * @retval 1...2 (value "2" depending on DAC channel 2 availability)
404   */
405 #define __LL_DAC_CHANNEL_TO_DECIMAL_NB(__CHANNEL__)                            \
406   ((__CHANNEL__) & DAC_SWTR_CHX_MASK)
407 
408 /**
409   * @brief  Helper macro to get DAC channel in literal format LL_DAC_CHANNEL_x
410   *         from number in decimal format.
411   *         Example:
412   *           __LL_DAC_DECIMAL_NB_TO_CHANNEL(1)
413   *           will return a data equivalent to "LL_DAC_CHANNEL_1".
414   * @note  If the input parameter does not correspond to a DAC channel,
415   *        this macro returns value '0'.
416   * @param  __DECIMAL_NB__ 1...2 (value "2" depending on DAC channel 2 availability)
417   * @retval Returned value can be one of the following values:
418   *         @arg @ref LL_DAC_CHANNEL_1
419   *         @arg @ref LL_DAC_CHANNEL_2 (1)
420   *
421   *         (1) On this STM32 serie, parameter not available on all devices.
422   *             Refer to device datasheet for channels availability.
423   */
424 #if defined(DAC_CHANNEL2_SUPPORT)
425 #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__)                         \
426   (((__DECIMAL_NB__) == 1U)                                                     \
427     ? (                                                                        \
428        LL_DAC_CHANNEL_1                                                        \
429       )                                                                        \
430       :                                                                        \
431       (((__DECIMAL_NB__) == 2U)                                                 \
432         ? (                                                                    \
433            LL_DAC_CHANNEL_2                                                    \
434           )                                                                    \
435           :                                                                    \
436           (                                                                    \
437            0                                                                   \
438           )                                                                    \
439       )                                                                        \
440   )
441 #else
442 #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__)                         \
443   (((__DECIMAL_NB__) == 1U)                                                     \
444     ? (                                                                        \
445        LL_DAC_CHANNEL_1                                                        \
446       )                                                                        \
447       :                                                                        \
448       (                                                                        \
449        0                                                                       \
450       )                                                                        \
451   )
452 #endif  /* DAC_CHANNEL2_SUPPORT */
453 
454 /**
455   * @brief  Helper macro to define the DAC conversion data full-scale digital
456   *         value corresponding to the selected DAC resolution.
457   * @note   DAC conversion data full-scale corresponds to voltage range
458   *         determined by analog voltage references Vref+ and Vref-
459   *         (refer to reference manual).
460   * @param  __DAC_RESOLUTION__ This parameter can be one of the following values:
461   *         @arg @ref LL_DAC_RESOLUTION_12B
462   *         @arg @ref LL_DAC_RESOLUTION_8B
463   * @retval ADC conversion data equivalent voltage value (unit: mVolt)
464   */
465 #define __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__)                             \
466   ((0x00000FFFU) >> ((__DAC_RESOLUTION__) << 1U))
467 
468 /**
469   * @brief  Helper macro to calculate the DAC conversion data (unit: digital
470   *         value) corresponding to a voltage (unit: mVolt).
471   * @note   This helper macro is intended to provide input data in voltage
472   *         rather than digital value,
473   *         to be used with LL DAC functions such as
474   *         @ref LL_DAC_ConvertData12RightAligned().
475   * @note   Analog reference voltage (Vref+) must be either known from
476   *         user board environment or can be calculated using ADC measurement
477   *         and ADC helper macro @ref __LL_ADC_CALC_VREFANALOG_VOLTAGE().
478   * @param  __VREFANALOG_VOLTAGE__ Analog reference voltage (unit mV)
479   * @param  __DAC_VOLTAGE__ Voltage to be generated by DAC channel
480   *                         (unit: mVolt).
481   * @param  __DAC_RESOLUTION__ This parameter can be one of the following values:
482   *         @arg @ref LL_DAC_RESOLUTION_12B
483   *         @arg @ref LL_DAC_RESOLUTION_8B
484   * @retval DAC conversion data (unit: digital value)
485   */
486 #define __LL_DAC_CALC_VOLTAGE_TO_DATA(__VREFANALOG_VOLTAGE__,\
487                                       __DAC_VOLTAGE__,\
488                                       __DAC_RESOLUTION__)                      \
489   ((__DAC_VOLTAGE__) * __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__)              \
490    / (__VREFANALOG_VOLTAGE__)                                                  \
491   )
492 
493 /**
494   * @}
495   */
496 
497 /**
498   * @}
499   */
500 
501 
502 /* Exported functions --------------------------------------------------------*/
503 /** @defgroup DAC_LL_Exported_Functions DAC Exported Functions
504   * @{
505   */
506 /** @defgroup DAC_LL_EF_Configuration Configuration of DAC channels
507   * @{
508   */
509 
510 /**
511   * @brief  Set the conversion trigger source for the selected DAC channel.
512   * @note   For conversion trigger source to be effective, DAC trigger
513   *         must be enabled using function @ref LL_DAC_EnableTrigger().
514   * @note   To set conversion trigger source, DAC channel must be disabled.
515   *         Otherwise, the setting is discarded.
516   * @note   Availability of parameters of trigger sources from timer
517   *         depends on timers availability on the selected device.
518   * @rmtoll CR       TSEL1          LL_DAC_SetTriggerSource\n
519   *         CR       TSEL2          LL_DAC_SetTriggerSource
520   * @param  DACx DAC instance
521   * @param  DAC_Channel This parameter can be one of the following values:
522   *         @arg @ref LL_DAC_CHANNEL_1
523   *         @arg @ref LL_DAC_CHANNEL_2 (1)
524   *
525   *         (1) On this STM32 serie, parameter not available on all devices.
526   *             Refer to device datasheet for channels availability.
527   * @param  TriggerSource This parameter can be one of the following values:
528   *         @arg @ref LL_DAC_TRIG_SOFTWARE
529   *         @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
530   *         @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
531   *         @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
532   *         @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
533   *         @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
534   *         @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
535   *         @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
536   * @retval None
537   */
LL_DAC_SetTriggerSource(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t TriggerSource)538 __STATIC_INLINE void LL_DAC_SetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TriggerSource)
539 {
540   MODIFY_REG(DACx->CR,
541              DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
542              TriggerSource << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
543 }
544 
545 /**
546   * @brief  Get the conversion trigger source for the selected DAC channel.
547   * @note   For conversion trigger source to be effective, DAC trigger
548   *         must be enabled using function @ref LL_DAC_EnableTrigger().
549   * @note   Availability of parameters of trigger sources from timer
550   *         depends on timers availability on the selected device.
551   * @rmtoll CR       TSEL1          LL_DAC_GetTriggerSource\n
552   *         CR       TSEL2          LL_DAC_GetTriggerSource
553   * @param  DACx DAC instance
554   * @param  DAC_Channel This parameter can be one of the following values:
555   *         @arg @ref LL_DAC_CHANNEL_1
556   *         @arg @ref LL_DAC_CHANNEL_2 (1)
557   *
558   *         (1) On this STM32 serie, parameter not available on all devices.
559   *             Refer to device datasheet for channels availability.
560   * @retval Returned value can be one of the following values:
561   *         @arg @ref LL_DAC_TRIG_SOFTWARE
562   *         @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
563   *         @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
564   *         @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
565   *         @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
566   *         @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
567   *         @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
568   *         @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
569   */
LL_DAC_GetTriggerSource(DAC_TypeDef * DACx,uint32_t DAC_Channel)570 __STATIC_INLINE uint32_t LL_DAC_GetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel)
571 {
572   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
573                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
574                    );
575 }
576 
577 /**
578   * @brief  Set the waveform automatic generation mode
579   *         for the selected DAC channel.
580   * @rmtoll CR       WAVE1          LL_DAC_SetWaveAutoGeneration\n
581   *         CR       WAVE2          LL_DAC_SetWaveAutoGeneration
582   * @param  DACx DAC instance
583   * @param  DAC_Channel This parameter can be one of the following values:
584   *         @arg @ref LL_DAC_CHANNEL_1
585   *         @arg @ref LL_DAC_CHANNEL_2 (1)
586   *
587   *         (1) On this STM32 serie, parameter not available on all devices.
588   *             Refer to device datasheet for channels availability.
589   * @param  WaveAutoGeneration This parameter can be one of the following values:
590   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
591   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
592   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
593   * @retval None
594   */
LL_DAC_SetWaveAutoGeneration(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t WaveAutoGeneration)595 __STATIC_INLINE void LL_DAC_SetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t WaveAutoGeneration)
596 {
597   MODIFY_REG(DACx->CR,
598              DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
599              WaveAutoGeneration << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
600 }
601 
602 /**
603   * @brief  Get the waveform automatic generation mode
604   *         for the selected DAC channel.
605   * @rmtoll CR       WAVE1          LL_DAC_GetWaveAutoGeneration\n
606   *         CR       WAVE2          LL_DAC_GetWaveAutoGeneration
607   * @param  DACx DAC instance
608   * @param  DAC_Channel This parameter can be one of the following values:
609   *         @arg @ref LL_DAC_CHANNEL_1
610   *         @arg @ref LL_DAC_CHANNEL_2 (1)
611   *
612   *         (1) On this STM32 serie, parameter not available on all devices.
613   *             Refer to device datasheet for channels availability.
614   * @retval Returned value can be one of the following values:
615   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
616   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
617   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
618   */
LL_DAC_GetWaveAutoGeneration(DAC_TypeDef * DACx,uint32_t DAC_Channel)619 __STATIC_INLINE uint32_t LL_DAC_GetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel)
620 {
621   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
622                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
623                    );
624 }
625 
626 /**
627   * @brief  Set the noise waveform generation for the selected DAC channel:
628   *         Noise mode and parameters LFSR (linear feedback shift register).
629   * @note   For wave generation to be effective, DAC channel
630   *         wave generation mode must be enabled using
631   *         function @ref LL_DAC_SetWaveAutoGeneration().
632   * @note   This setting can be set when the selected DAC channel is disabled
633   *         (otherwise, the setting operation is ignored).
634   * @rmtoll CR       MAMP1          LL_DAC_SetWaveNoiseLFSR\n
635   *         CR       MAMP2          LL_DAC_SetWaveNoiseLFSR
636   * @param  DACx DAC instance
637   * @param  DAC_Channel This parameter can be one of the following values:
638   *         @arg @ref LL_DAC_CHANNEL_1
639   *         @arg @ref LL_DAC_CHANNEL_2 (1)
640   *
641   *         (1) On this STM32 serie, parameter not available on all devices.
642   *             Refer to device datasheet for channels availability.
643   * @param  NoiseLFSRMask This parameter can be one of the following values:
644   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
645   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
646   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
647   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
648   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
649   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
650   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
651   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
652   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
653   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
654   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
655   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
656   * @retval None
657   */
LL_DAC_SetWaveNoiseLFSR(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t NoiseLFSRMask)658 __STATIC_INLINE void LL_DAC_SetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t NoiseLFSRMask)
659 {
660   MODIFY_REG(DACx->CR,
661              DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
662              NoiseLFSRMask << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
663 }
664 
665 /**
666   * @brief  Set the noise waveform generation for the selected DAC channel:
667   *         Noise mode and parameters LFSR (linear feedback shift register).
668   * @rmtoll CR       MAMP1          LL_DAC_GetWaveNoiseLFSR\n
669   *         CR       MAMP2          LL_DAC_GetWaveNoiseLFSR
670   * @param  DACx DAC instance
671   * @param  DAC_Channel This parameter can be one of the following values:
672   *         @arg @ref LL_DAC_CHANNEL_1
673   *         @arg @ref LL_DAC_CHANNEL_2 (1)
674   *
675   *         (1) On this STM32 serie, parameter not available on all devices.
676   *             Refer to device datasheet for channels availability.
677   * @retval Returned value can be one of the following values:
678   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
679   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
680   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
681   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
682   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
683   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
684   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
685   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
686   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
687   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
688   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
689   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
690   */
LL_DAC_GetWaveNoiseLFSR(DAC_TypeDef * DACx,uint32_t DAC_Channel)691 __STATIC_INLINE uint32_t LL_DAC_GetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel)
692 {
693   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
694                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
695                    );
696 }
697 
698 /**
699   * @brief  Set the triangle waveform generation for the selected DAC channel:
700   *         triangle mode and amplitude.
701   * @note   For wave generation to be effective, DAC channel
702   *         wave generation mode must be enabled using
703   *         function @ref LL_DAC_SetWaveAutoGeneration().
704   * @note   This setting can be set when the selected DAC channel is disabled
705   *         (otherwise, the setting operation is ignored).
706   * @rmtoll CR       MAMP1          LL_DAC_SetWaveTriangleAmplitude\n
707   *         CR       MAMP2          LL_DAC_SetWaveTriangleAmplitude
708   * @param  DACx DAC instance
709   * @param  DAC_Channel This parameter can be one of the following values:
710   *         @arg @ref LL_DAC_CHANNEL_1
711   *         @arg @ref LL_DAC_CHANNEL_2 (1)
712   *
713   *         (1) On this STM32 serie, parameter not available on all devices.
714   *             Refer to device datasheet for channels availability.
715   * @param  TriangleAmplitude This parameter can be one of the following values:
716   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
717   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
718   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
719   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
720   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
721   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
722   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
723   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
724   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
725   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
726   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
727   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
728   * @retval None
729   */
LL_DAC_SetWaveTriangleAmplitude(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t TriangleAmplitude)730 __STATIC_INLINE void LL_DAC_SetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TriangleAmplitude)
731 {
732   MODIFY_REG(DACx->CR,
733              DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
734              TriangleAmplitude << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
735 }
736 
737 /**
738   * @brief  Set the triangle waveform generation for the selected DAC channel:
739   *         triangle mode and amplitude.
740   * @rmtoll CR       MAMP1          LL_DAC_GetWaveTriangleAmplitude\n
741   *         CR       MAMP2          LL_DAC_GetWaveTriangleAmplitude
742   * @param  DACx DAC instance
743   * @param  DAC_Channel This parameter can be one of the following values:
744   *         @arg @ref LL_DAC_CHANNEL_1
745   *         @arg @ref LL_DAC_CHANNEL_2 (1)
746   *
747   *         (1) On this STM32 serie, parameter not available on all devices.
748   *             Refer to device datasheet for channels availability.
749   * @retval Returned value can be one of the following values:
750   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
751   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
752   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
753   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
754   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
755   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
756   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
757   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
758   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
759   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
760   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
761   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
762   */
LL_DAC_GetWaveTriangleAmplitude(DAC_TypeDef * DACx,uint32_t DAC_Channel)763 __STATIC_INLINE uint32_t LL_DAC_GetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel)
764 {
765   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
766                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
767                    );
768 }
769 
770 /**
771   * @brief  Set the output buffer for the selected DAC channel.
772   * @rmtoll CR       BOFF1          LL_DAC_SetOutputBuffer\n
773   *         CR       BOFF2          LL_DAC_SetOutputBuffer
774   * @param  DACx DAC instance
775   * @param  DAC_Channel This parameter can be one of the following values:
776   *         @arg @ref LL_DAC_CHANNEL_1
777   *         @arg @ref LL_DAC_CHANNEL_2 (1)
778   *
779   *         (1) On this STM32 serie, parameter not available on all devices.
780   *             Refer to device datasheet for channels availability.
781   * @param  OutputBuffer This parameter can be one of the following values:
782   *         @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
783   *         @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
784   * @retval None
785   */
LL_DAC_SetOutputBuffer(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t OutputBuffer)786 __STATIC_INLINE void LL_DAC_SetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputBuffer)
787 {
788   MODIFY_REG(DACx->CR,
789              DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
790              OutputBuffer << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
791 }
792 
793 /**
794   * @brief  Get the output buffer state for the selected DAC channel.
795   * @rmtoll CR       BOFF1          LL_DAC_GetOutputBuffer\n
796   *         CR       BOFF2          LL_DAC_GetOutputBuffer
797   * @param  DACx DAC instance
798   * @param  DAC_Channel This parameter can be one of the following values:
799   *         @arg @ref LL_DAC_CHANNEL_1
800   *         @arg @ref LL_DAC_CHANNEL_2 (1)
801   *
802   *         (1) On this STM32 serie, parameter not available on all devices.
803   *             Refer to device datasheet for channels availability.
804   * @retval Returned value can be one of the following values:
805   *         @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
806   *         @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
807   */
LL_DAC_GetOutputBuffer(DAC_TypeDef * DACx,uint32_t DAC_Channel)808 __STATIC_INLINE uint32_t LL_DAC_GetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel)
809 {
810   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_BOFF1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
811                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
812                    );
813 }
814 
815 /**
816   * @}
817   */
818 
819 /** @defgroup DAC_LL_EF_DMA_Management DMA Management
820   * @{
821   */
822 
823 /**
824   * @brief  Enable DAC DMA transfer request of the selected channel.
825   * @note   To configure DMA source address (peripheral address),
826   *         use function @ref LL_DAC_DMA_GetRegAddr().
827   * @rmtoll CR       DMAEN1         LL_DAC_EnableDMAReq\n
828   *         CR       DMAEN2         LL_DAC_EnableDMAReq
829   * @param  DACx DAC instance
830   * @param  DAC_Channel This parameter can be one of the following values:
831   *         @arg @ref LL_DAC_CHANNEL_1
832   *         @arg @ref LL_DAC_CHANNEL_2 (1)
833   *
834   *         (1) On this STM32 serie, parameter not available on all devices.
835   *             Refer to device datasheet for channels availability.
836   * @retval None
837   */
LL_DAC_EnableDMAReq(DAC_TypeDef * DACx,uint32_t DAC_Channel)838 __STATIC_INLINE void LL_DAC_EnableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
839 {
840   SET_BIT(DACx->CR,
841           DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
842 }
843 
844 /**
845   * @brief  Disable DAC DMA transfer request of the selected channel.
846   * @note   To configure DMA source address (peripheral address),
847   *         use function @ref LL_DAC_DMA_GetRegAddr().
848   * @rmtoll CR       DMAEN1         LL_DAC_DisableDMAReq\n
849   *         CR       DMAEN2         LL_DAC_DisableDMAReq
850   * @param  DACx DAC instance
851   * @param  DAC_Channel This parameter can be one of the following values:
852   *         @arg @ref LL_DAC_CHANNEL_1
853   *         @arg @ref LL_DAC_CHANNEL_2 (1)
854   *
855   *         (1) On this STM32 serie, parameter not available on all devices.
856   *             Refer to device datasheet for channels availability.
857   * @retval None
858   */
LL_DAC_DisableDMAReq(DAC_TypeDef * DACx,uint32_t DAC_Channel)859 __STATIC_INLINE void LL_DAC_DisableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
860 {
861   CLEAR_BIT(DACx->CR,
862             DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
863 }
864 
865 /**
866   * @brief  Get DAC DMA transfer request state of the selected channel.
867   *         (0: DAC DMA transfer request is disabled, 1: DAC DMA transfer request is enabled)
868   * @rmtoll CR       DMAEN1         LL_DAC_IsDMAReqEnabled\n
869   *         CR       DMAEN2         LL_DAC_IsDMAReqEnabled
870   * @param  DACx DAC instance
871   * @param  DAC_Channel This parameter can be one of the following values:
872   *         @arg @ref LL_DAC_CHANNEL_1
873   *         @arg @ref LL_DAC_CHANNEL_2 (1)
874   *
875   *         (1) On this STM32 serie, parameter not available on all devices.
876   *             Refer to device datasheet for channels availability.
877   * @retval State of bit (1 or 0).
878   */
LL_DAC_IsDMAReqEnabled(DAC_TypeDef * DACx,uint32_t DAC_Channel)879 __STATIC_INLINE uint32_t LL_DAC_IsDMAReqEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
880 {
881   return (READ_BIT(DACx->CR,
882                    DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
883           == (DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)));
884 }
885 
886 /**
887   * @brief  Function to help to configure DMA transfer to DAC: retrieve the
888   *         DAC register address from DAC instance and a list of DAC registers
889   *         intended to be used (most commonly) with DMA transfer.
890   * @note   These DAC registers are data holding registers:
891   *         when DAC conversion is requested, DAC generates a DMA transfer
892   *         request to have data available in DAC data holding registers.
893   * @note   This macro is intended to be used with LL DMA driver, refer to
894   *         function "LL_DMA_ConfigAddresses()".
895   *         Example:
896   *           LL_DMA_ConfigAddresses(DMA1,
897   *                                  LL_DMA_CHANNEL_1,
898   *                                  (uint32_t)&< array or variable >,
899   *                                  LL_DAC_DMA_GetRegAddr(DAC1, LL_DAC_CHANNEL_1, LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED),
900   *                                  LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
901   * @rmtoll DHR12R1  DACC1DHR       LL_DAC_DMA_GetRegAddr\n
902   *         DHR12L1  DACC1DHR       LL_DAC_DMA_GetRegAddr\n
903   *         DHR8R1   DACC1DHR       LL_DAC_DMA_GetRegAddr\n
904   *         DHR12R2  DACC2DHR       LL_DAC_DMA_GetRegAddr\n
905   *         DHR12L2  DACC2DHR       LL_DAC_DMA_GetRegAddr\n
906   *         DHR8R2   DACC2DHR       LL_DAC_DMA_GetRegAddr
907   * @param  DACx DAC instance
908   * @param  DAC_Channel This parameter can be one of the following values:
909   *         @arg @ref LL_DAC_CHANNEL_1
910   *         @arg @ref LL_DAC_CHANNEL_2 (1)
911   *
912   *         (1) On this STM32 serie, parameter not available on all devices.
913   *             Refer to device datasheet for channels availability.
914   * @param  Register This parameter can be one of the following values:
915   *         @arg @ref LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED
916   *         @arg @ref LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED
917   *         @arg @ref LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED
918   * @retval DAC register address
919   */
LL_DAC_DMA_GetRegAddr(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t Register)920 __STATIC_INLINE uint32_t LL_DAC_DMA_GetRegAddr(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Register)
921 {
922   /* Retrieve address of register DHR12Rx, DHR12Lx or DHR8Rx depending on     */
923   /* DAC channel selected.                                                    */
924   return ((uint32_t)(__DAC_PTR_REG_OFFSET((DACx)->DHR12R1, __DAC_MASK_SHIFT(DAC_Channel, Register))));
925 }
926 /**
927   * @}
928   */
929 
930 /** @defgroup DAC_LL_EF_Operation Operation on DAC channels
931   * @{
932   */
933 
934 /**
935   * @brief  Enable DAC selected channel.
936   * @rmtoll CR       EN1            LL_DAC_Enable\n
937   *         CR       EN2            LL_DAC_Enable
938   * @note   After enable from off state, DAC channel requires a delay
939   *         for output voltage to reach accuracy +/- 1 LSB.
940   *         Refer to device datasheet, parameter "tWAKEUP".
941   * @param  DACx DAC instance
942   * @param  DAC_Channel This parameter can be one of the following values:
943   *         @arg @ref LL_DAC_CHANNEL_1
944   *         @arg @ref LL_DAC_CHANNEL_2 (1)
945   *
946   *         (1) On this STM32 serie, parameter not available on all devices.
947   *             Refer to device datasheet for channels availability.
948   * @retval None
949   */
LL_DAC_Enable(DAC_TypeDef * DACx,uint32_t DAC_Channel)950 __STATIC_INLINE void LL_DAC_Enable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
951 {
952   SET_BIT(DACx->CR,
953           DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
954 }
955 
956 /**
957   * @brief  Disable DAC selected channel.
958   * @rmtoll CR       EN1            LL_DAC_Disable\n
959   *         CR       EN2            LL_DAC_Disable
960   * @param  DACx DAC instance
961   * @param  DAC_Channel This parameter can be one of the following values:
962   *         @arg @ref LL_DAC_CHANNEL_1
963   *         @arg @ref LL_DAC_CHANNEL_2 (1)
964   *
965   *         (1) On this STM32 serie, parameter not available on all devices.
966   *             Refer to device datasheet for channels availability.
967   * @retval None
968   */
LL_DAC_Disable(DAC_TypeDef * DACx,uint32_t DAC_Channel)969 __STATIC_INLINE void LL_DAC_Disable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
970 {
971   CLEAR_BIT(DACx->CR,
972             DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
973 }
974 
975 /**
976   * @brief  Get DAC enable state of the selected channel.
977   *         (0: DAC channel is disabled, 1: DAC channel is enabled)
978   * @rmtoll CR       EN1            LL_DAC_IsEnabled\n
979   *         CR       EN2            LL_DAC_IsEnabled
980   * @param  DACx DAC instance
981   * @param  DAC_Channel This parameter can be one of the following values:
982   *         @arg @ref LL_DAC_CHANNEL_1
983   *         @arg @ref LL_DAC_CHANNEL_2 (1)
984   *
985   *         (1) On this STM32 serie, parameter not available on all devices.
986   *             Refer to device datasheet for channels availability.
987   * @retval State of bit (1 or 0).
988   */
LL_DAC_IsEnabled(DAC_TypeDef * DACx,uint32_t DAC_Channel)989 __STATIC_INLINE uint32_t LL_DAC_IsEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
990 {
991   return (READ_BIT(DACx->CR,
992                    DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
993           == (DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)));
994 }
995 
996 /**
997   * @brief  Enable DAC trigger of the selected channel.
998   * @note   - If DAC trigger is disabled, DAC conversion is performed
999   *           automatically once the data holding register is updated,
1000   *           using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
1001   *           @ref LL_DAC_ConvertData12RightAligned(), ...
1002   *         - If DAC trigger is enabled, DAC conversion is performed
1003   *           only when a hardware of software trigger event is occurring.
1004   *           Select trigger source using
1005   *           function @ref LL_DAC_SetTriggerSource().
1006   * @rmtoll CR       TEN1           LL_DAC_EnableTrigger\n
1007   *         CR       TEN2           LL_DAC_EnableTrigger
1008   * @param  DACx DAC instance
1009   * @param  DAC_Channel This parameter can be one of the following values:
1010   *         @arg @ref LL_DAC_CHANNEL_1
1011   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1012   *
1013   *         (1) On this STM32 serie, parameter not available on all devices.
1014   *             Refer to device datasheet for channels availability.
1015   * @retval None
1016   */
LL_DAC_EnableTrigger(DAC_TypeDef * DACx,uint32_t DAC_Channel)1017 __STATIC_INLINE void LL_DAC_EnableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1018 {
1019   SET_BIT(DACx->CR,
1020           DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1021 }
1022 
1023 /**
1024   * @brief  Disable DAC trigger of the selected channel.
1025   * @rmtoll CR       TEN1           LL_DAC_DisableTrigger\n
1026   *         CR       TEN2           LL_DAC_DisableTrigger
1027   * @param  DACx DAC instance
1028   * @param  DAC_Channel This parameter can be one of the following values:
1029   *         @arg @ref LL_DAC_CHANNEL_1
1030   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1031   *
1032   *         (1) On this STM32 serie, parameter not available on all devices.
1033   *             Refer to device datasheet for channels availability.
1034   * @retval None
1035   */
LL_DAC_DisableTrigger(DAC_TypeDef * DACx,uint32_t DAC_Channel)1036 __STATIC_INLINE void LL_DAC_DisableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1037 {
1038   CLEAR_BIT(DACx->CR,
1039             DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1040 }
1041 
1042 /**
1043   * @brief  Get DAC trigger state of the selected channel.
1044   *         (0: DAC trigger is disabled, 1: DAC trigger is enabled)
1045   * @rmtoll CR       TEN1           LL_DAC_IsTriggerEnabled\n
1046   *         CR       TEN2           LL_DAC_IsTriggerEnabled
1047   * @param  DACx DAC instance
1048   * @param  DAC_Channel This parameter can be one of the following values:
1049   *         @arg @ref LL_DAC_CHANNEL_1
1050   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1051   *
1052   *         (1) On this STM32 serie, parameter not available on all devices.
1053   *             Refer to device datasheet for channels availability.
1054   * @retval State of bit (1 or 0).
1055   */
LL_DAC_IsTriggerEnabled(DAC_TypeDef * DACx,uint32_t DAC_Channel)1056 __STATIC_INLINE uint32_t LL_DAC_IsTriggerEnabled(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1057 {
1058   return (READ_BIT(DACx->CR,
1059                    DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1060           == (DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)));
1061 }
1062 
1063 /**
1064   * @brief  Trig DAC conversion by software for the selected DAC channel.
1065   * @note   Preliminarily, DAC trigger must be set to software trigger
1066   *         using function @ref LL_DAC_SetTriggerSource()
1067   *         with parameter "LL_DAC_TRIGGER_SOFTWARE".
1068   *         and DAC trigger must be enabled using
1069   *         function @ref LL_DAC_EnableTrigger().
1070   * @note   For devices featuring DAC with 2 channels: this function
1071   *         can perform a SW start of both DAC channels simultaneously.
1072   *         Two channels can be selected as parameter.
1073   *         Example: (LL_DAC_CHANNEL_1 | LL_DAC_CHANNEL_2)
1074   * @rmtoll SWTRIGR  SWTRIG1        LL_DAC_TrigSWConversion\n
1075   *         SWTRIGR  SWTRIG2        LL_DAC_TrigSWConversion
1076   * @param  DACx DAC instance
1077   * @param  DAC_Channel  This parameter can a combination of the following values:
1078   *         @arg @ref LL_DAC_CHANNEL_1
1079   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1080   *
1081   *         (1) On this STM32 serie, parameter not available on all devices.
1082   *             Refer to device datasheet for channels availability.
1083   * @retval None
1084   */
LL_DAC_TrigSWConversion(DAC_TypeDef * DACx,uint32_t DAC_Channel)1085 __STATIC_INLINE void LL_DAC_TrigSWConversion(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1086 {
1087   SET_BIT(DACx->SWTRIGR,
1088           (DAC_Channel & DAC_SWTR_CHX_MASK));
1089 }
1090 
1091 /**
1092   * @brief  Set the data to be loaded in the data holding register
1093   *         in format 12 bits left alignment (LSB aligned on bit 0),
1094   *         for the selected DAC channel.
1095   * @rmtoll DHR12R1  DACC1DHR       LL_DAC_ConvertData12RightAligned\n
1096   *         DHR12R2  DACC2DHR       LL_DAC_ConvertData12RightAligned
1097   * @param  DACx DAC instance
1098   * @param  DAC_Channel This parameter can be one of the following values:
1099   *         @arg @ref LL_DAC_CHANNEL_1
1100   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1101   *
1102   *         (1) On this STM32 serie, parameter not available on all devices.
1103   *             Refer to device datasheet for channels availability.
1104   * @param  Data Value between Min_Data=0x000 and Max_Data=0xFFF
1105   * @retval None
1106   */
LL_DAC_ConvertData12RightAligned(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t Data)1107 __STATIC_INLINE void LL_DAC_ConvertData12RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1108 {
1109   register __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, __DAC_MASK_SHIFT(DAC_Channel, DAC_REG_DHR12RX_REGOFFSET_MASK));
1110 
1111   MODIFY_REG(*preg,
1112              DAC_DHR12R1_DACC1DHR,
1113              Data);
1114 }
1115 
1116 /**
1117   * @brief  Set the data to be loaded in the data holding register
1118   *         in format 12 bits left alignment (MSB aligned on bit 15),
1119   *         for the selected DAC channel.
1120   * @rmtoll DHR12L1  DACC1DHR       LL_DAC_ConvertData12LeftAligned\n
1121   *         DHR12L2  DACC2DHR       LL_DAC_ConvertData12LeftAligned
1122   * @param  DACx DAC instance
1123   * @param  DAC_Channel This parameter can be one of the following values:
1124   *         @arg @ref LL_DAC_CHANNEL_1
1125   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1126   *
1127   *         (1) On this STM32 serie, parameter not available on all devices.
1128   *             Refer to device datasheet for channels availability.
1129   * @param  Data Value between Min_Data=0x000 and Max_Data=0xFFF
1130   * @retval None
1131   */
LL_DAC_ConvertData12LeftAligned(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t Data)1132 __STATIC_INLINE void LL_DAC_ConvertData12LeftAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1133 {
1134   register __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, __DAC_MASK_SHIFT(DAC_Channel, DAC_REG_DHR12LX_REGOFFSET_MASK));
1135 
1136   MODIFY_REG(*preg,
1137              DAC_DHR12L1_DACC1DHR,
1138              Data);
1139 }
1140 
1141 /**
1142   * @brief  Set the data to be loaded in the data holding register
1143   *         in format 8 bits left alignment (LSB aligned on bit 0),
1144   *         for the selected DAC channel.
1145   * @rmtoll DHR8R1   DACC1DHR       LL_DAC_ConvertData8RightAligned\n
1146   *         DHR8R2   DACC2DHR       LL_DAC_ConvertData8RightAligned
1147   * @param  DACx DAC instance
1148   * @param  DAC_Channel This parameter can be one of the following values:
1149   *         @arg @ref LL_DAC_CHANNEL_1
1150   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1151   *
1152   *         (1) On this STM32 serie, parameter not available on all devices.
1153   *             Refer to device datasheet for channels availability.
1154   * @param  Data Value between Min_Data=0x00 and Max_Data=0xFF
1155   * @retval None
1156   */
LL_DAC_ConvertData8RightAligned(DAC_TypeDef * DACx,uint32_t DAC_Channel,uint32_t Data)1157 __STATIC_INLINE void LL_DAC_ConvertData8RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1158 {
1159   register __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, __DAC_MASK_SHIFT(DAC_Channel, DAC_REG_DHR8RX_REGOFFSET_MASK));
1160 
1161   MODIFY_REG(*preg,
1162              DAC_DHR8R1_DACC1DHR,
1163              Data);
1164 }
1165 
1166 #if defined(DAC_CHANNEL2_SUPPORT)
1167 /**
1168   * @brief  Set the data to be loaded in the data holding register
1169   *         in format 12 bits left alignment (LSB aligned on bit 0),
1170   *         for both DAC channels.
1171   * @rmtoll DHR12RD  DACC1DHR       LL_DAC_ConvertDualData12RightAligned\n
1172   *         DHR12RD  DACC2DHR       LL_DAC_ConvertDualData12RightAligned
1173   * @param  DACx DAC instance
1174   * @param  DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
1175   * @param  DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
1176   * @retval None
1177   */
LL_DAC_ConvertDualData12RightAligned(DAC_TypeDef * DACx,uint32_t DataChannel1,uint32_t DataChannel2)1178 __STATIC_INLINE void LL_DAC_ConvertDualData12RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, uint32_t DataChannel2)
1179 {
1180   MODIFY_REG(DACx->DHR12RD,
1181              (DAC_DHR12RD_DACC2DHR | DAC_DHR12RD_DACC1DHR),
1182              ((DataChannel2 << DAC_DHR12RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
1183 }
1184 
1185 /**
1186   * @brief  Set the data to be loaded in the data holding register
1187   *         in format 12 bits left alignment (MSB aligned on bit 15),
1188   *         for both DAC channels.
1189   * @rmtoll DHR12LD  DACC1DHR       LL_DAC_ConvertDualData12LeftAligned\n
1190   *         DHR12LD  DACC2DHR       LL_DAC_ConvertDualData12LeftAligned
1191   * @param  DACx DAC instance
1192   * @param  DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
1193   * @param  DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
1194   * @retval None
1195   */
LL_DAC_ConvertDualData12LeftAligned(DAC_TypeDef * DACx,uint32_t DataChannel1,uint32_t DataChannel2)1196 __STATIC_INLINE void LL_DAC_ConvertDualData12LeftAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, uint32_t DataChannel2)
1197 {
1198   /* Note: Data of DAC channel 2 shift value subtracted of 4 because          */
1199   /*       data on 16 bits and DAC channel 2 bits field is on the 12 MSB,     */
1200   /*       the 4 LSB must be taken into account for the shift value.          */
1201   MODIFY_REG(DACx->DHR12LD,
1202              (DAC_DHR12LD_DACC2DHR | DAC_DHR12LD_DACC1DHR),
1203              ((DataChannel2 << (DAC_DHR12LD_DACC2DHR_BITOFFSET_POS - 4U)) | DataChannel1));
1204 }
1205 
1206 /**
1207   * @brief  Set the data to be loaded in the data holding register
1208   *         in format 8 bits left alignment (LSB aligned on bit 0),
1209   *         for both DAC channels.
1210   * @rmtoll DHR8RD  DACC1DHR       LL_DAC_ConvertDualData8RightAligned\n
1211   *         DHR8RD  DACC2DHR       LL_DAC_ConvertDualData8RightAligned
1212   * @param  DACx DAC instance
1213   * @param  DataChannel1 Value between Min_Data=0x00 and Max_Data=0xFF
1214   * @param  DataChannel2 Value between Min_Data=0x00 and Max_Data=0xFF
1215   * @retval None
1216   */
LL_DAC_ConvertDualData8RightAligned(DAC_TypeDef * DACx,uint32_t DataChannel1,uint32_t DataChannel2)1217 __STATIC_INLINE void LL_DAC_ConvertDualData8RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1, uint32_t DataChannel2)
1218 {
1219   MODIFY_REG(DACx->DHR8RD,
1220              (DAC_DHR8RD_DACC2DHR | DAC_DHR8RD_DACC1DHR),
1221              ((DataChannel2 << DAC_DHR8RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
1222 }
1223 
1224 #endif /* DAC_CHANNEL2_SUPPORT */
1225 /**
1226   * @brief  Retrieve output data currently generated for the selected DAC channel.
1227   * @note   Whatever alignment and resolution settings
1228   *         (using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
1229   *         @ref LL_DAC_ConvertData12RightAligned(), ...),
1230   *         output data format is 12 bits right aligned (LSB aligned on bit 0).
1231   * @rmtoll DOR1     DACC1DOR       LL_DAC_RetrieveOutputData\n
1232   *         DOR2     DACC2DOR       LL_DAC_RetrieveOutputData
1233   * @param  DACx DAC instance
1234   * @param  DAC_Channel This parameter can be one of the following values:
1235   *         @arg @ref LL_DAC_CHANNEL_1
1236   *         @arg @ref LL_DAC_CHANNEL_2 (1)
1237   *
1238   *         (1) On this STM32 serie, parameter not available on all devices.
1239   *             Refer to device datasheet for channels availability.
1240   * @retval Value between Min_Data=0x000 and Max_Data=0xFFF
1241   */
LL_DAC_RetrieveOutputData(DAC_TypeDef * DACx,uint32_t DAC_Channel)1242 __STATIC_INLINE uint32_t LL_DAC_RetrieveOutputData(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1243 {
1244   register __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DOR1, __DAC_MASK_SHIFT(DAC_Channel, DAC_REG_DORX_REGOFFSET_MASK));
1245 
1246   return (uint16_t) READ_BIT(*preg, DAC_DOR1_DACC1DOR);
1247 }
1248 
1249 /**
1250   * @}
1251   */
1252 
1253 /** @defgroup DAC_LL_EF_FLAG_Management FLAG Management
1254   * @{
1255   */
1256 /**
1257   * @brief  Get DAC underrun flag for DAC channel 1
1258   * @rmtoll SR       DMAUDR1        LL_DAC_IsActiveFlag_DMAUDR1
1259   * @param  DACx DAC instance
1260   * @retval State of bit (1 or 0).
1261   */
LL_DAC_IsActiveFlag_DMAUDR1(DAC_TypeDef * DACx)1262 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR1(DAC_TypeDef *DACx)
1263 {
1264   return (READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR1) == (LL_DAC_FLAG_DMAUDR1));
1265 }
1266 
1267 #if defined(DAC_CHANNEL2_SUPPORT)
1268 /**
1269   * @brief  Get DAC underrun flag for DAC channel 2
1270   * @rmtoll SR       DMAUDR2        LL_DAC_IsActiveFlag_DMAUDR2
1271   * @param  DACx DAC instance
1272   * @retval State of bit (1 or 0).
1273   */
LL_DAC_IsActiveFlag_DMAUDR2(DAC_TypeDef * DACx)1274 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR2(DAC_TypeDef *DACx)
1275 {
1276   return (READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR2) == (LL_DAC_FLAG_DMAUDR2));
1277 }
1278 #endif /* DAC_CHANNEL2_SUPPORT */
1279 
1280 /**
1281   * @brief  Clear DAC underrun flag for DAC channel 1
1282   * @rmtoll SR       DMAUDR1        LL_DAC_ClearFlag_DMAUDR1
1283   * @param  DACx DAC instance
1284   * @retval None
1285   */
LL_DAC_ClearFlag_DMAUDR1(DAC_TypeDef * DACx)1286 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR1(DAC_TypeDef *DACx)
1287 {
1288   WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR1);
1289 }
1290 
1291 #if defined(DAC_CHANNEL2_SUPPORT)
1292 /**
1293   * @brief  Clear DAC underrun flag for DAC channel 2
1294   * @rmtoll SR       DMAUDR2        LL_DAC_ClearFlag_DMAUDR2
1295   * @param  DACx DAC instance
1296   * @retval None
1297   */
LL_DAC_ClearFlag_DMAUDR2(DAC_TypeDef * DACx)1298 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR2(DAC_TypeDef *DACx)
1299 {
1300   WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR2);
1301 }
1302 #endif /* DAC_CHANNEL2_SUPPORT */
1303 
1304 /**
1305   * @}
1306   */
1307 
1308 /** @defgroup DAC_LL_EF_IT_Management IT management
1309   * @{
1310   */
1311 
1312 /**
1313   * @brief  Enable DMA underrun interrupt for DAC channel 1
1314   * @rmtoll CR       DMAUDRIE1      LL_DAC_EnableIT_DMAUDR1
1315   * @param  DACx DAC instance
1316   * @retval None
1317   */
LL_DAC_EnableIT_DMAUDR1(DAC_TypeDef * DACx)1318 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR1(DAC_TypeDef *DACx)
1319 {
1320   SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
1321 }
1322 
1323 #if defined(DAC_CHANNEL2_SUPPORT)
1324 /**
1325   * @brief  Enable DMA underrun interrupt for DAC channel 2
1326   * @rmtoll CR       DMAUDRIE2      LL_DAC_EnableIT_DMAUDR2
1327   * @param  DACx DAC instance
1328   * @retval None
1329   */
LL_DAC_EnableIT_DMAUDR2(DAC_TypeDef * DACx)1330 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR2(DAC_TypeDef *DACx)
1331 {
1332   SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
1333 }
1334 #endif /* DAC_CHANNEL2_SUPPORT */
1335 
1336 /**
1337   * @brief  Disable DMA underrun interrupt for DAC channel 1
1338   * @rmtoll CR       DMAUDRIE1      LL_DAC_DisableIT_DMAUDR1
1339   * @param  DACx DAC instance
1340   * @retval None
1341   */
LL_DAC_DisableIT_DMAUDR1(DAC_TypeDef * DACx)1342 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR1(DAC_TypeDef *DACx)
1343 {
1344   CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
1345 }
1346 
1347 #if defined(DAC_CHANNEL2_SUPPORT)
1348 /**
1349   * @brief  Disable DMA underrun interrupt for DAC channel 2
1350   * @rmtoll CR       DMAUDRIE2      LL_DAC_DisableIT_DMAUDR2
1351   * @param  DACx DAC instance
1352   * @retval None
1353   */
LL_DAC_DisableIT_DMAUDR2(DAC_TypeDef * DACx)1354 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR2(DAC_TypeDef *DACx)
1355 {
1356   CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
1357 }
1358 #endif /* DAC_CHANNEL2_SUPPORT */
1359 
1360 /**
1361   * @brief  Get DMA underrun interrupt for DAC channel 1
1362   * @rmtoll CR       DMAUDRIE1      LL_DAC_IsEnabledIT_DMAUDR1
1363   * @param  DACx DAC instance
1364   * @retval State of bit (1 or 0).
1365   */
LL_DAC_IsEnabledIT_DMAUDR1(DAC_TypeDef * DACx)1366 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR1(DAC_TypeDef *DACx)
1367 {
1368   return (READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1) == (LL_DAC_IT_DMAUDRIE1));
1369 }
1370 
1371 #if defined(DAC_CHANNEL2_SUPPORT)
1372 /**
1373   * @brief  Get DMA underrun interrupt for DAC channel 2
1374   * @rmtoll CR       DMAUDRIE2      LL_DAC_IsEnabledIT_DMAUDR2
1375   * @param  DACx DAC instance
1376   * @retval State of bit (1 or 0).
1377   */
LL_DAC_IsEnabledIT_DMAUDR2(DAC_TypeDef * DACx)1378 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR2(DAC_TypeDef *DACx)
1379 {
1380   return (READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2) == (LL_DAC_IT_DMAUDRIE2));
1381 }
1382 #endif /* DAC_CHANNEL2_SUPPORT */
1383 
1384 /**
1385   * @}
1386   */
1387 
1388 #if defined(USE_FULL_LL_DRIVER)
1389 /** @defgroup DAC_LL_EF_Init Initialization and de-initialization functions
1390   * @{
1391   */
1392 
1393 ErrorStatus LL_DAC_DeInit(DAC_TypeDef* DACx);
1394 ErrorStatus LL_DAC_Init(DAC_TypeDef* DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef* DAC_InitStruct);
1395 void        LL_DAC_StructInit(LL_DAC_InitTypeDef* DAC_InitStruct);
1396 
1397 /**
1398   * @}
1399   */
1400 #endif /* USE_FULL_LL_DRIVER */
1401 
1402 /**
1403   * @}
1404   */
1405 
1406 /**
1407   * @}
1408   */
1409 
1410 #endif /* DAC */
1411 
1412 /**
1413   * @}
1414   */
1415 
1416 #ifdef __cplusplus
1417 }
1418 #endif
1419 
1420 #endif /* __STM32F4xx_LL_DAC_H */
1421 
1422 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1423