1 /**
2   ******************************************************************************
3   * @file    stm32g4xx_ll_dac.c
4   * @author  MCD Application Team
5   * @brief   DAC LL module driver
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2019 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 #if defined(USE_FULL_LL_DRIVER)
19 
20 /* Includes ------------------------------------------------------------------*/
21 #include "stm32g4xx_ll_dac.h"
22 #include "stm32g4xx_ll_bus.h"
23 
24 #ifdef USE_FULL_ASSERT
25 #include "stm32_assert.h"
26 #else
27 #define assert_param(expr) ((void)0U)
28 #endif /* USE_FULL_ASSERT */
29 
30 /** @addtogroup STM32G4xx_LL_Driver
31   * @{
32   */
33 
34 #if defined(DAC1) || defined(DAC2) || defined(DAC3) ||defined (DAC4)
35 
36 /** @addtogroup DAC_LL DAC
37   * @{
38   */
39 
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44 
45 /** @addtogroup DAC_LL_Private_Macros
46   * @{
47   */
48 #if defined(STM32G414xx) || defined(STM32G474xx) || defined(STM32G484xx) || defined(STM32G473xx) || defined(STM32G483xx)
49 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                       \
50   (((__DACX__) == DAC2) ?                                                  \
51    ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                 \
52    :                                                                       \
53    (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                \
54     ||  ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2))                           \
55   )
56 #elif defined(STM32G411xB) || defined(STM32G411xC)
57 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                       \
58   (((__DACX__) == DAC1) ?                                                  \
59    ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                 \
60    :                                                                       \
61    (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                \
62     ||  ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2))                           \
63   )
64 #else
65 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                       \
66   (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                 \
67    ||  ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2)                             \
68   )
69 #endif /* STM32G414xx || STM32G474xx || STM32G484xx || STM32G473xx || STM32G483xx */
70 
71 #if defined(STM32G414xx) || defined(STM32G474xx) || defined(STM32G484xx)
72 #define IS_LL_DAC_TRIGGER_SOURCE(__DACX__, __TRIGGER_SOURCE__)                       \
73   (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                                    \
74    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                            \
75    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                           \
76    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                            \
77    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                            \
78    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9)                           \
79    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                            \
80    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                            \
81    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG1)                       \
82    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG2)                       \
83    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG3)                       \
84    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG4)                       \
85    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG5)                       \
86    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_RST_TRG6)                       \
87    || (((__DACX__) == DAC3) ? ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO)    \
88         : ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO))                       \
89    || (((__DACX__) == DAC1) && ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO1))\
90    || (((__DACX__) == DAC2) && ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO2))\
91    || (((__DACX__) == DAC3) && ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO3))\
92    || (((__DACX__) == DAC4) && ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO1))\
93   )
94 #else
95 #define IS_LL_DAC_TRIGGER_SOURCE(__DACX__, __TRIGGER_SOURCE__)                       \
96   (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                                    \
97    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                            \
98    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                           \
99    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                            \
100    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                            \
101    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9)                           \
102    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                            \
103    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                            \
104    || (((__DACX__) == DAC3) ? ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO)    \
105         : ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO))                       \
106   )
107 #endif /* STM32G414xx || STM32G474xx || STM32G484xx */
108 
109 #if defined(STM32G414xx) || defined(STM32G474xx) || defined(STM32G484xx)
110 #define IS_LL_DAC_TRIGGER_SOURCE2(__DACX__, __TRIGGER_SOURCE__)                      \
111   (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                                    \
112    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                            \
113    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                           \
114    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                            \
115    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                            \
116    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE10)                          \
117    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                            \
118    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                            \
119    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG1)                      \
120    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG2)                      \
121    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG3)                      \
122    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG4)                      \
123    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG5)                      \
124    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_STEP_TRG6)                      \
125    || (((__DACX__) == DAC3) ? ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO)    \
126         : ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO))                       \
127   )
128 #else
129 #define IS_LL_DAC_TRIGGER_SOURCE2(__DACX__, __TRIGGER_SOURCE__)                      \
130   (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                                    \
131    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                            \
132    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                           \
133    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                            \
134    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                            \
135    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE10)                          \
136    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                            \
137    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                            \
138    || (((__DACX__) == DAC3) ? ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO)    \
139         : ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO))                       \
140   )
141 #endif /* STM32G414xx || STM32G474xx || STM32G484xx */
142 
143 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__)           \
144   (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE)        \
145    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)    \
146    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
147    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_SAWTOOTH) \
148   )
149 
150 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__)      \
151   ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)                                   \
152      && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0)                                 \
153          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0)                           \
154          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0)                           \
155          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0)                           \
156          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0)                           \
157          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0)                           \
158          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0)                           \
159          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0)                           \
160          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0)                           \
161          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0)                           \
162          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0)                          \
163          || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0))                         \
164     )                                                                                                         \
165     ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE)                              \
166        && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1)                                 \
167            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3)                              \
168            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7)                              \
169            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15)                             \
170            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31)                             \
171            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63)                             \
172            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127)                            \
173            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255)                            \
174            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511)                            \
175            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023)                           \
176            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047)                           \
177            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095))                          \
178       )                                                                                                       \
179     ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_SAWTOOTH)                              \
180        && (((__WAVE_AUTO_GENERATION_CONFIG__) & ~(DAC_STR1_STINCDATA1|DAC_STR1_STDIR1|DAC_STR1_STRSTDATA1))   \
181            == 0UL)                                                                                            \
182       )                                                                                                       \
183   )
184 
185 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__)                             \
186   (((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE)                        \
187    || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE)                    \
188   )
189 
190 #define IS_LL_DAC_OUTPUT_CONNECTION(__OUTPUT_CONNECTION__)                     \
191   (((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_GPIO)                     \
192    || ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_INTERNAL)              \
193   )
194 
195 #define IS_LL_DAC_OUTPUT_MODE(__OUTPUT_MODE__)                                 \
196   (((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_NORMAL)                            \
197    || ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD)                \
198   )
199 
200 /**
201   * @}
202   */
203 
204 
205 /* Private function prototypes -----------------------------------------------*/
206 
207 /* Exported functions --------------------------------------------------------*/
208 /** @addtogroup DAC_LL_Exported_Functions
209   * @{
210   */
211 
212 /** @addtogroup DAC_LL_EF_Init
213   * @{
214   */
215 
216 /**
217   * @brief  De-initialize registers of the selected DAC instance
218   *         to their default reset values.
219   * @param  DACx DAC instance
220   * @retval An ErrorStatus enumeration value:
221   *          - SUCCESS: DAC registers are de-initialized
222   *          - ERROR: not applicable
223   */
LL_DAC_DeInit(const DAC_TypeDef * DACx)224 ErrorStatus LL_DAC_DeInit(const DAC_TypeDef *DACx)
225 {
226   /* Check the parameters */
227   assert_param(IS_DAC_ALL_INSTANCE(DACx));
228 
229 #ifdef DAC1
230   if (DACx == DAC1)
231   {
232     /* Force reset of DAC clock */
233     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_DAC1);
234 
235     /* Release reset of DAC clock */
236     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_DAC1);
237   }
238 #endif /* DAC1 */
239 #ifdef DAC2
240   if (DACx == DAC2)
241   {
242     /* Force reset of DAC clock */
243     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_DAC2);
244 
245     /* Release reset of DAC clock */
246     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_DAC2);
247   }
248 #endif /* DAC2 */
249 #ifdef DAC3
250   if (DACx == DAC3)
251   {
252     /* Force reset of DAC clock */
253     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_DAC3);
254 
255     /* Release reset of DAC clock */
256     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_DAC3);
257   }
258 #endif /* DAC3 */
259 #ifdef DAC4
260   if (DACx == DAC4)
261   {
262     /* Force reset of DAC clock */
263     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_DAC4);
264 
265     /* Release reset of DAC clock */
266     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_DAC4);
267   }
268 #endif /* DAC4 */
269 
270   return SUCCESS;
271 }
272 
273 /**
274   * @brief  Initialize some features of DAC channel.
275   * @note   @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel.
276   *         Leaving it ready to be enabled and output:
277   *         a level by calling one of
278   *           @ref LL_DAC_ConvertData12RightAligned
279   *           @ref LL_DAC_ConvertData12LeftAligned
280   *           @ref LL_DAC_ConvertData8RightAligned
281   *         or one of the supported autogenerated wave.
282   * @note   This function allows configuration of:
283   *          - Output mode
284   *          - Trigger
285   *          - Wave generation
286   * @note   The setting of these parameters by function @ref LL_DAC_Init()
287   *         is conditioned to DAC state:
288   *         DAC channel must be disabled.
289   * @param  DACx DAC instance
290   * @param  DAC_Channel This parameter can be one of the following values:
291   *         @arg @ref LL_DAC_CHANNEL_1
292   *         @arg @ref LL_DAC_CHANNEL_2 (1)
293   *
294   *         (1) On this STM32 series, parameter not available on all instances.
295   *             Refer to device datasheet for channels availability.
296   * @param  DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
297   * @retval An ErrorStatus enumeration value:
298   *          - SUCCESS: DAC registers are initialized
299   *          - ERROR: DAC registers are not initialized
300   */
LL_DAC_Init(DAC_TypeDef * DACx,uint32_t DAC_Channel,const LL_DAC_InitTypeDef * DAC_InitStruct)301 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, const LL_DAC_InitTypeDef *DAC_InitStruct)
302 {
303   ErrorStatus status = SUCCESS;
304 
305   /* Check the parameters */
306   assert_param(IS_DAC_ALL_INSTANCE(DACx));
307   assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel));
308   assert_param(IS_LL_DAC_TRIGGER_SOURCE(DACx, DAC_InitStruct->TriggerSource));
309   assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
310   assert_param(IS_LL_DAC_OUTPUT_CONNECTION(DAC_InitStruct->OutputConnection));
311   assert_param(IS_LL_DAC_OUTPUT_MODE(DAC_InitStruct->OutputMode));
312   assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
313   if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
314   {
315     assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration,
316                                                   DAC_InitStruct->WaveAutoGenerationConfig));
317   }
318 
319   /* Note: Hardware constraint (refer to description of this function)        */
320   /*       DAC instance must be disabled.                                     */
321   if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0UL)
322   {
323     /* Configuration of DAC channel:                                          */
324     /*  - TriggerSource                                                       */
325     /*  - WaveAutoGeneration                                                  */
326     /*  - OutputBuffer                                                        */
327     /*  - OutputConnection                                                    */
328     /*  - OutputMode                                                          */
329     if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
330     {
331       if (DAC_InitStruct->WaveAutoGeneration == LL_DAC_WAVE_AUTO_GENERATION_SAWTOOTH)
332       {
333         assert_param(IS_LL_DAC_TRIGGER_SOURCE2(DACx, DAC_InitStruct->TriggerSource2));
334 
335         MODIFY_REG(DACx->CR,
336                    DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
337                    DAC_InitStruct->WaveAutoGeneration << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
338                   );
339 
340         MODIFY_REG(DACx->STMODR,
341                    (DAC_STMODR_STINCTRIGSEL1 | DAC_STMODR_STRSTTRIGSEL1) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
342                    (
343                      ((DAC_InitStruct->TriggerSource >> DAC_CR_TSEL1_Pos) << DAC_STMODR_STRSTTRIGSEL1_Pos)
344                      | ((DAC_InitStruct->TriggerSource2 >> DAC_CR_TSEL1_Pos) << DAC_STMODR_STINCTRIGSEL1_Pos)
345                    ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
346                   );
347 
348         WRITE_REG(*(__DAC_PTR_REG_OFFSET(DACx->STR1,
349                                          (DAC_Channel >> DAC_REG_STRX_REGOFFSET_BITOFFSET_POS) &
350                                          DAC_REG_STRX_REGOFFSET_MASK_POSBIT0)),
351                   DAC_InitStruct->WaveAutoGenerationConfig);
352       }
353       else
354       {
355         MODIFY_REG(DACx->CR,
356                    (DAC_CR_TSEL1
357                     | DAC_CR_WAVE1
358                     | DAC_CR_MAMP1
359                    ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
360                    ,
361                    (DAC_InitStruct->TriggerSource
362                     | DAC_InitStruct->WaveAutoGeneration
363                     | DAC_InitStruct->WaveAutoGenerationConfig
364                    ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
365                   );
366       }
367     }
368     else
369     {
370       MODIFY_REG(DACx->CR,
371                  (DAC_CR_TSEL1
372                   | DAC_CR_WAVE1
373                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
374                  ,
375                  (DAC_InitStruct->TriggerSource
376                   | LL_DAC_WAVE_AUTO_GENERATION_NONE
377                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
378                 );
379     }
380     MODIFY_REG(DACx->MCR,
381                (DAC_MCR_MODE1_1
382                 | DAC_MCR_MODE1_0
383                 | DAC_MCR_MODE1_2
384                ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
385                ,
386                (DAC_InitStruct->OutputBuffer
387                 | DAC_InitStruct->OutputConnection
388                 | DAC_InitStruct->OutputMode
389                ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
390               );
391   }
392   else
393   {
394     /* Initialization error: DAC instance is not disabled.                    */
395     status = ERROR;
396   }
397   return status;
398 }
399 
400 /**
401   * @brief Set each @ref LL_DAC_InitTypeDef field to default value.
402   * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
403   *                       whose fields will be set to default values.
404   * @retval None
405   */
LL_DAC_StructInit(LL_DAC_InitTypeDef * DAC_InitStruct)406 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
407 {
408   /* Set DAC_InitStruct fields to default values */
409   DAC_InitStruct->TriggerSource            = LL_DAC_TRIG_SOFTWARE;
410   DAC_InitStruct->TriggerSource2           = LL_DAC_TRIG_SOFTWARE;
411   DAC_InitStruct->WaveAutoGeneration       = LL_DAC_WAVE_AUTO_GENERATION_NONE;
412   /* Note: Parameter discarded if wave auto generation is disabled,           */
413   /*       set anyway to its default value.                                   */
414   DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
415   DAC_InitStruct->OutputBuffer             = LL_DAC_OUTPUT_BUFFER_ENABLE;
416   DAC_InitStruct->OutputConnection         = LL_DAC_OUTPUT_CONNECT_GPIO;
417   DAC_InitStruct->OutputMode               = LL_DAC_OUTPUT_MODE_NORMAL;
418 }
419 
420 /**
421   * @}
422   */
423 
424 /**
425   * @}
426   */
427 
428 /**
429   * @}
430   */
431 
432 #endif /* DAC1 || DAC2 || DAC3 || DAC4 */
433 
434 /**
435   * @}
436   */
437 
438 #endif /* USE_FULL_LL_DRIVER */
439