1 /**
2 ******************************************************************************
3 * @file tae32f53xx_ll_dac.c
4 * @author MCD Application Team
5 * @brief Source file for DAC Module
6 *
7 ******************************************************************************
8 * @attention
9 *
10 * <h2><center>© Copyright (c) 2020 Tai-Action.
11 * All rights reserved.</center></h2>
12 *
13 * This software is licensed by Tai-Action under BSD 3-Clause license,
14 * the "License"; You may not use this file except in compliance with the
15 * License. You may obtain a copy of the License at:
16 * opensource.org/licenses/BSD-3-Clause
17 *
18 ******************************************************************************
19 */
20
21 /* Includes ------------------------------------------------------------------*/
22 #include "tae32f53xx_ll.h"
23
24
25 #define DBG_TAG "DAC LL"
26 #define DBG_LVL DBG_ERROR
27 #include "dbg/tae32f53xx_dbg.h"
28
29
30 /** @addtogroup TAE32F53xx_LL_Driver
31 * @{
32 */
33
34 /** @defgroup DAC_LL DAC LL
35 * @brief DAC LL module driver
36 * @{
37 */
38
39 #ifdef LL_DAC_MODULE_ENABLED
40
41 /* Private define ------------------------------------------------------------*/
42 /* Private macro -------------------------------------------------------------*/
43 /* Private typedef -----------------------------------------------------------*/
44 /* Private variables ---------------------------------------------------------*/
45 /* Private function prototypes -----------------------------------------------*/
46 /* Exported functions --------------------------------------------------------*/
47 /** @defgroup DAC_LL_Exported_Functions DAC LL Exported Functions
48 * @brief DAC LL Exported Functions
49 * @{
50 */
51
52 /** @defgroup DAC_LL_Exported_Functions_Group1 Initialization and De-Initialization functions
53 * @brief Initialization and De-Initialization functions
54
55 @verbatim
56 ==============================================================================
57 ##### Initialization and De-Initialization functions #####
58 ==============================================================================
59 [..]
60 This section provides functions allowing to:
61 (+) Initialize the DAC peripheral.
62 (+) De-initialize the DAC peripheral.
63
64 @endverbatim
65 * @{
66 */
67
68 /**
69 * @brief Initialize the DAC peripheral
70 * @param Instance DAC peripheral instance
71 * @return status of the initialization
72 */
LL_DAC_Init(DAC_TypeDef * Instance)73 LL_StatusETypeDef LL_DAC_Init(DAC_TypeDef *Instance)
74 {
75 /* Check the parameters */
76 assert_param(IS_DAC_ALL_INSTANCE(Instance));
77
78 /* Init the low level hardware */
79 LL_DAC_MspInit(Instance);
80
81 /* Clear interrupt pending flags */
82 __LL_DAC_PENDING_FLAG_CLEAR(Instance, DAC_FLAG_ALLIF);
83
84 /* Return function status */
85 return LL_OK;
86 }
87
88 /**
89 * @brief Deinitialize the DAC peripheral
90 * @param Instance DAC peripheral instance
91 * @return status of the initialization
92 */
LL_DAC_DeInit(DAC_TypeDef * Instance)93 LL_StatusETypeDef LL_DAC_DeInit(DAC_TypeDef *Instance)
94 {
95 /* Check the parameters */
96 assert_param(IS_DAC_ALL_INSTANCE(Instance));
97
98 for (uint8_t chnnum = 0; chnnum < DAC_CHN_NB; ++chnnum) {
99 /* Disable DAC Channel wave */
100 CLEAR_BIT(Instance->CR[chnnum], DAC_CR_TGE_Msk | DAC_CR_STE_Msk);
101
102 /* Disable DONE/DONEB interrupts */
103 __LL_DAC_IT_DISABLE(Instance, chnnum, DAC_IT_DIE | DAC_IT_DBIE);
104
105 /* Disable DAC Channel Output */
106 __LL_DAC_OUTPUT_DISABLE(Instance, chnnum);
107
108 /* Disable DAC Channel */
109 __LL_DAC_DISABLE(Instance, chnnum);
110 }
111
112 /* DeInit the low level hardware */
113 LL_DAC_MspDeInit(Instance);
114
115 /* Return function status */
116 return LL_OK;
117 }
118
119 /**
120 * @brief Initializes the DAC MSP.
121 * @param Instance DAC peripheral
122 * @return None
123 */
LL_DAC_MspInit(DAC_TypeDef * Instance)124 __WEAK void LL_DAC_MspInit(DAC_TypeDef *Instance)
125 {
126 /* Prevent unused argument(s) compilation warning */
127 LL_UNUSED(Instance);
128
129 /* NOTE : This function should not be modified, when the callback is needed,
130 the LL_DAC_MspInit could be implemented in the user file
131 */
132 }
133
134 /**
135 * @brief DeInitializes the DAC MSP
136 * @param Instance DAC peripheral
137 * @return None
138 */
LL_DAC_MspDeInit(DAC_TypeDef * Instance)139 __WEAK void LL_DAC_MspDeInit(DAC_TypeDef *Instance)
140 {
141 /* Prevent unused argument(s) compilation warning */
142 LL_UNUSED(Instance);
143
144 /* NOTE: This function should not be modified, when the callback is needed,
145 the LL_DAC_MspDeInit could be implemented in the user file
146 */
147 }
148 /**
149 * @}
150 */
151
152
153 /** @defgroup DAC_LL_Exported_Functions_Group2 DAC Peripheral Control functions
154 * @brief DAC Peripheral Control functions
155 @verbatim
156 ===============================================================================
157 ##### Peripheral Control functions #####
158 ===============================================================================
159 [..] This section provides functions allowing to:
160 (+) Configure channels.
161 (+) Sawtooth/Tranigle wave generate configure
162
163 @endverbatim
164 * @{
165 */
166
167 /**
168 * @brief Configures the selected DAC channel.
169 * @param Instance DAC peripheral
170 * @param Channel The selected DAC channel.
171 * This parameter can be one of the following values:
172 * @arg DAC_CHANNEL_0: DAC Channel0 selected
173 * @arg DAC_CHANNEL_1: DAC Channel1 selected
174 * @arg DAC_CHANNEL_2: DAC Channel2 selected
175 * @arg DAC_CHANNEL_3: DAC Channel3 selected
176 * @param sConfig DAC configuration structure.
177 * @return LL Status
178 */
LL_DAC_ChannelConfig(DAC_TypeDef * Instance,uint32_t Channel,DAC_ChannelConfTypeDef * sConfig)179 LL_StatusETypeDef LL_DAC_ChannelConfig(DAC_TypeDef *Instance, uint32_t Channel, DAC_ChannelConfTypeDef *sConfig)
180 {
181 /* Get the channel number */
182 uint8_t chnnum = POSITION_VAL(Channel);
183
184 /* Check the DAC parameters */
185 assert_param(IS_DAC_ALL_INSTANCE(Instance));
186 assert_param(IS_DAC_CHANNEL(Channel));
187 assert_param(IS_DAC_NUMBER(chnnum));
188 assert_param(sConfig != NULL);
189 assert_param(IS_DAC_CHANNEL_OUTPUT_SEL(sConfig->Output));
190 assert_param(IS_DAC_CHANNEL_DONE_IT_PENDING_CFG(sConfig->DoneIntPending));
191 assert_param(IS_DAC_CHANNEL_DONEB_IT_PENDING_CFG(sConfig->DoneBIntPending));
192
193 /* Reset and Calculate CR register value depending on sConfig */
194 MODIFY_REG(Instance->CR[chnnum],
195 (DAC_CR_PEN_Msk | DAC_CR_OEN_Msk
196 | DAC_CR_TGE_Msk | DAC_CR_STE_Msk
197 | DAC_CR_DIE_Msk | DAC_CR_DBIE_Msk),
198 (sConfig->Output
199 | sConfig->DoneIntPending
200 | sConfig->DoneBIntPending));
201
202 /* Return function status */
203 return LL_OK;
204 }
205
206 /**
207 * @brief Enable the selected DAC channel sawtooth wave generation.
208 * @param Instance DAC peripheral
209 * @param Channel The selected DAC channel.
210 * @param sConfig DAC sawtooth configuration structure.
211 * @return LL Status
212 */
LL_DAC_SawtoothWaveGenerate(DAC_TypeDef * Instance,uint32_t Channel,DAC_SawtoothConfTypeDef * sConfig)213 LL_StatusETypeDef LL_DAC_SawtoothWaveGenerate(DAC_TypeDef *Instance, uint32_t Channel, DAC_SawtoothConfTypeDef *sConfig)
214 {
215 /* Get the channel number */
216 uint8_t chnnum = POSITION_VAL(Channel);
217
218 /* Check the DAC parameters */
219 assert_param(IS_DAC_ALL_INSTANCE(Instance));
220 assert_param(IS_DAC_CHANNEL(Channel));
221 assert_param(IS_DAC_NUMBER(chnnum));
222 assert_param(sConfig != NULL);
223 assert_param(IS_DAC_SAWTOOTH_RESET_DATA(sConfig->ResetData));
224 assert_param(IS_DAC_SAWTOOTH_STEP_DATA(sConfig->StepData));
225 assert_param(IS_DAC_SAWTOOTH_POLARITY(sConfig->Polarity));
226 assert_param(IS_DAC_SAWTOOTH_RESET_TRIGGER(sConfig->ResetTrigger));
227 assert_param(IS_DAC_SAWTOOTH_STEP_TRIGGER(sConfig->StepTrigger));
228 assert_param(sConfig->StepTrigger != sConfig->ResetTrigger);
229
230 /* Configure the sawtooth wave */
231 MODIFY_REG(Instance->CR[chnnum],
232 (DAC_CR_TGE_Msk
233 | DAC_CR_STE_Msk
234 | DAC_CR_STDIR_Msk
235 | DAC_CR_STINCTRIG_Msk
236 | DAC_CR_STRSTTRIG_Msk),
237 (sConfig->Polarity
238 | (sConfig->StepTrigger << DAC_CR_STINCTRIG_Pos)
239 | (sConfig->ResetTrigger << DAC_CR_STRSTTRIG_Pos)));
240
241 /* Configure the sawtooth wave generation data parameters */
242 WRITE_REG(Instance->SIDR[chnnum], sConfig->StepData);
243 WRITE_REG(Instance->SRDR[chnnum], sConfig->ResetData << 4);
244
245 /* Enable sawtooth wave */
246 SET_BIT(Instance->CR[chnnum], DAC_CR_STE);
247
248 /* Return function status */
249 return LL_OK;
250 }
251
252 /**
253 * @brief Enable the selected DAC channel triangle wave generation.
254 * @param Instance DAC peripheral
255 * @param Channel The selected DAC channel.
256 * @param sConfig DAC triangle configuration structure.
257 * @return LL Status
258 */
LL_DAC_TriangleWaveGenerate(DAC_TypeDef * Instance,uint32_t Channel,DAC_TriangleConfTypeDef * sConfig)259 LL_StatusETypeDef LL_DAC_TriangleWaveGenerate(DAC_TypeDef *Instance, uint32_t Channel, DAC_TriangleConfTypeDef *sConfig)
260 {
261 /* Get the channel number */
262 uint8_t chnnum = POSITION_VAL(Channel);
263
264 /* Check the DAC parameters */
265 assert_param(IS_DAC_ALL_INSTANCE(Instance));
266 assert_param(IS_DAC_CHANNEL(Channel));
267 assert_param(IS_DAC_NUMBER(chnnum));
268 assert_param(sConfig != NULL);
269 assert_param(IS_DAC_TRIANGLE_INITIALDIRECTION(sConfig->InitialDirection));
270 assert_param(IS_DAC_TRIANGLE_AMPLITUDE(sConfig->Amplitude));
271 assert_param(IS_DAC_TRIANGLE_STEP_TRIGGER(sConfig->StepTrigger));
272
273 /* Configure the triangle wave */
274 MODIFY_REG(Instance->CR[chnnum],
275 (DAC_CR_TGE_Msk
276 | DAC_CR_STE_Msk
277 | DAC_CR_TGDIR_Msk
278 | DAC_CR_TGAMP_Msk
279 | DAC_CR_TGTRIG_Msk),
280 (sConfig->InitialDirection
281 | sConfig->Amplitude
282 | (sConfig->StepTrigger << DAC_CR_TGTRIG_Pos)));
283
284 /* Enable triangle wave */
285 SET_BIT(Instance->CR[chnnum], DAC_CR_TGE);
286
287 /* Return function status */
288 return LL_OK;
289 }
290 /**
291 * @}
292 */
293
294
295 /** @defgroup DAC_LL_Exported_Functions_Group3 DAC IO operation functions
296 * @brief DAC IO operation functions
297 *
298 @verbatim
299 ==============================================================================
300 ##### IO operation functions #####
301 ==============================================================================
302 [..] This section provides functions allowing to:
303 (+) Start/Stop DAC Output.
304 (+) Simple value conversion.
305 (+) Singles conversion.
306 (+) Get result of conversion.
307
308 @endverbatim
309 * @{
310 */
311
312 /**
313 * @brief Enables DAC Channel conversion
314 * @param Instance DAC peripheral instance
315 * @param Channel The selected DAC channel.
316 * This parameter can be one of the following values:
317 * @arg DAC_CHANNEL_0: DAC Channel0 selected
318 * @arg DAC_CHANNEL_1: DAC Channel1 selected
319 * @arg DAC_CHANNEL_2: DAC Channel2 selected
320 * @arg DAC_CHANNEL_3: DAC Channel3 selected
321 * @return LL Status
322 */
LL_DAC_Start(DAC_TypeDef * Instance,uint32_t Channel)323 LL_StatusETypeDef LL_DAC_Start(DAC_TypeDef *Instance, uint32_t Channel)
324 {
325 /* Get the channel number */
326 uint8_t chnnum = POSITION_VAL(Channel);
327
328 /* Check the DAC parameters */
329 assert_param(IS_DAC_ALL_INSTANCE(Instance));
330 assert_param(IS_DAC_CHANNEL(Channel));
331 assert_param(IS_DAC_NUMBER(chnnum));
332
333 /* Enable DAC Channel */
334 __LL_DAC_ENABLE(Instance, chnnum);
335
336 /* Return function status */
337 return LL_OK;
338 }
339
340 /**
341 * @brief Disable DAC Channel conversion
342 * @param Instance DAC peripheral instance
343 * @param Channel The selected DAC channel.
344 * This parameter can be one of the following values:
345 * @arg DAC_CHANNEL_0: DAC Channel0 selected
346 * @arg DAC_CHANNEL_1: DAC Channel1 selected
347 * @arg DAC_CHANNEL_2: DAC Channel2 selected
348 * @arg DAC_CHANNEL_3: DAC Channel3 selected
349 * @return LL Status
350 */
LL_DAC_Stop(DAC_TypeDef * Instance,uint32_t Channel)351 LL_StatusETypeDef LL_DAC_Stop(DAC_TypeDef *Instance, uint32_t Channel)
352 {
353 /* Get the channel number */
354 uint8_t chnnum = POSITION_VAL(Channel);
355
356 /* Check the DAC parameters */
357 assert_param(IS_DAC_ALL_INSTANCE(Instance));
358 assert_param(IS_DAC_CHANNEL(Channel));
359 assert_param(IS_DAC_NUMBER(chnnum));
360
361 /* Enable DAC Channel */
362 __LL_DAC_DISABLE(Instance, chnnum);
363
364 /* Return function status */
365 return LL_OK;
366 }
367
368 /**
369 * @brief Set the specified data value for DAC channel.
370 * @param Instance DAC peripheral instance
371 * @param Channel The selected DAC channel.
372 * This parameter can be one of the following values:
373 * @arg DAC_CHANNEL_0: DAC Channel0 selected
374 * @arg DAC_CHANNEL_1: DAC Channel1 selected
375 * @arg DAC_CHANNEL_2: DAC Channel2 selected
376 * @arg DAC_CHANNEL_3: DAC Channel3 selected
377 * @param Data Data to be loaded.
378 * This parameter can be a number in range from 0 to DAC full range 4095(0xFFF),
379 * witch will be converse to 0 - VCC
380 * @return LL status
381 */
LL_DAC_SetValue(DAC_TypeDef * Instance,uint32_t Channel,uint16_t Data)382 LL_StatusETypeDef LL_DAC_SetValue(DAC_TypeDef *Instance, uint32_t Channel, uint16_t Data)
383 {
384 /* Get the channel number */
385 uint8_t chnnum = POSITION_VAL(Channel);
386
387 /* Check the DAC parameters */
388 assert_param(IS_DAC_ALL_INSTANCE(Instance));
389 assert_param(IS_DAC_CHANNEL(Channel));
390 assert_param(IS_DAC_NUMBER(chnnum));
391
392 /* Set the data for DAC channel conversion */
393 __LL_DAC_SET_VALUE(Instance, chnnum, Data & 0xFFFUL);
394
395 /* Return function status */
396 return LL_OK;
397 }
398
399 /**
400 * @brief Get the specified DAC channel conversion value on runtime.
401 * @param Instance DAC peripheral instance
402 * @param Channel The selected DAC channel.
403 * This parameter can be one of the following values:
404 * @arg DAC_CHANNEL_0: DAC Channel0 selected
405 * @arg DAC_CHANNEL_1: DAC Channel1 selected
406 * @arg DAC_CHANNEL_2: DAC Channel2 selected
407 * @arg DAC_CHANNEL_3: DAC Channel3 selected
408 * @return Current conversion value
409 */
LL_DAC_GetValue(DAC_TypeDef * Instance,uint32_t Channel)410 uint16_t LL_DAC_GetValue(DAC_TypeDef *Instance, uint32_t Channel)
411 {
412 /* Get the channel number */
413 uint8_t chnnum = POSITION_VAL(Channel);
414
415 /* Check the DAC parameters */
416 assert_param(IS_DAC_ALL_INSTANCE(Instance));
417 assert_param(IS_DAC_CHANNEL(Channel));
418 assert_param(IS_DAC_NUMBER(chnnum));
419
420 return __LL_DAC_GET_VALUE(Instance, chnnum) & 0xFFFUL;
421 }
422
423 /**
424 * @brief Trig sawtooth wave step
425 * @param Instance DAC peripheral instance
426 * @param Channel The selected DAC channel[s].
427 * This parameter can be any combination of the following values:
428 * @arg DAC_CHANNEL_0: DAC Channel0 selected
429 * @arg DAC_CHANNEL_1: DAC Channel1 selected
430 * @arg DAC_CHANNEL_2: DAC Channel2 selected
431 * @arg DAC_CHANNEL_3: DAC Channel3 selected
432 * @return LL status
433 */
LL_DAC_SawtoothWaveDataStep(DAC_TypeDef * Instance,uint32_t Channel)434 LL_StatusETypeDef LL_DAC_SawtoothWaveDataStep(DAC_TypeDef *Instance, uint32_t Channel)
435 {
436 /* Check the DAC parameters */
437 assert_param(IS_DAC_ALL_INSTANCE(Instance));
438 assert_param(IS_DAC_CHANNELS_MASK(Channel));
439
440 /* Trigger the selected DAC channel software conversion */
441 SET_BIT(Instance->SWTR, (Channel << DAC_SWTR_SWTB0_Pos));
442
443 /* Return function status */
444 return LL_OK;
445 }
446
447 /**
448 * @brief Trig sawtooth wave reset
449 * @param Instance DAC peripheral instance
450 * @param Channel The selected DAC channel[s].
451 * This parameter can be any combination of the following values:
452 * @arg DAC_CHANNEL_0: DAC Channel0 selected
453 * @arg DAC_CHANNEL_1: DAC Channel1 selected
454 * @arg DAC_CHANNEL_2: DAC Channel2 selected
455 * @arg DAC_CHANNEL_3: DAC Channel3 selected
456 * @return LL status
457 */
LL_DAC_SawtoothWaveDataReset(DAC_TypeDef * Instance,uint32_t Channel)458 LL_StatusETypeDef LL_DAC_SawtoothWaveDataReset(DAC_TypeDef *Instance, uint32_t Channel)
459 {
460 /* Check the DAC parameters */
461 assert_param(IS_DAC_ALL_INSTANCE(Instance));
462 assert_param(IS_DAC_CHANNELS_MASK(Channel));
463
464 /* Trigger the selected DAC channel software conversion */
465 SET_BIT(Instance->SWTR, (Channel << DAC_SWTR_SWT0_Pos));
466
467 /* Return function status */
468 return LL_OK;
469 }
470
471 /**
472 * @brief Trig triangle wave step
473 * @param Instance DAC peripheral instance
474 * @param Channel The selected DAC channel[s].
475 * This parameter can be any combination of the following values:
476 * @arg DAC_CHANNEL_0: DAC Channel0 selected
477 * @arg DAC_CHANNEL_1: DAC Channel1 selected
478 * @arg DAC_CHANNEL_2: DAC Channel2 selected
479 * @arg DAC_CHANNEL_3: DAC Channel3 selected
480 * @return LL status
481 */
LL_DAC_TriangleWaveStep(DAC_TypeDef * Instance,uint32_t Channel)482 LL_StatusETypeDef LL_DAC_TriangleWaveStep(DAC_TypeDef *Instance, uint32_t Channel)
483 {
484 /* Check the DAC parameters */
485 assert_param(IS_DAC_ALL_INSTANCE(Instance));
486 assert_param(IS_DAC_CHANNELS_MASK(Channel));
487
488 /* Trigger the selected DAC channel software conversion */
489 SET_BIT(Instance->SWTR, (Channel << DAC_SWTR_SWT0_Pos));
490
491 /* Return function status */
492 return LL_OK;
493 }
494 /**
495 * @}
496 */
497
498
499 /** @defgroup DAC_LL_Exported_Functions_Interrupt DAC Initerrupt management
500 * @brief DAC Initerrupt management
501 @verbatim
502 ===============================================================================
503 ##### Initerrupt management #####
504 ===============================================================================
505 [..]
506 This section provides DAC interrupt handler and callback functions.
507
508 @endverbatim
509 * @{
510 */
511
512 /**
513 * @brief This function handles DAC interrupts requests.
514 * @param Instance DAC peripheral
515 * @return None
516 */
LL_DAC_IRQHandler(DAC_TypeDef * Instance)517 void LL_DAC_IRQHandler(DAC_TypeDef *Instance)
518 {
519 uint32_t irqtemp = READ_REG(Instance->ISR);
520 /* Check the DAC parameters */
521 assert_param(IS_DAC_ALL_INSTANCE(Instance));
522
523 for (uint8_t chnnum = 0; chnnum < DAC_CHN_NB; ++chnnum) {
524 if ((__LL_DAC_IT_CHECK_SOURCE(Instance, chnnum, DAC_IT_DIE) != RESET) &&
525 ((irqtemp & (DAC_ISR_D0IF << chnnum)) != RESET)) {
526 /* Chear the DAC_CHx DONE pending flag */
527 __LL_DAC_PENDING_FLAG_CLEAR(Instance, (DAC_ISR_D0IF << chnnum));
528
529 /* DACx DONE interrupt callback function */
530 LL_DAC_ConvDoneCallback(Instance, 0x1UL << chnnum);
531 }
532
533 if ((__LL_DAC_IT_CHECK_SOURCE(Instance, chnnum, DAC_IT_DBIE) != RESET) &&
534 ((irqtemp & (DAC_ISR_DB0IF << chnnum)) != RESET)) {
535 /* Chear the DAC_CHx DONEB pending flag */
536 __LL_DAC_PENDING_FLAG_CLEAR(Instance, (DAC_ISR_DB0IF << chnnum));
537
538 /* DACx DONEB interrupt callback function */
539 LL_DAC_ConvDoneBCallback(Instance, 0x1UL << chnnum);
540
541 }
542 }
543 }
544
545 /**
546 * @brief DAC_CHx DONE interrupt callback function
547 * @param Instance DAC peripheral
548 * @param Channel The handling DAC channel
549 * @return None
550 */
LL_DAC_ConvDoneCallback(DAC_TypeDef * Instance,uint32_t Channel)551 __WEAK void LL_DAC_ConvDoneCallback(DAC_TypeDef *Instance, uint32_t Channel)
552 {
553 /* Prevent unused argument(s) compilation warning */
554 LL_UNUSED(Instance);
555
556 /* NOTE: This function should not be modified, when the callback is needed,
557 the LL_DAC_ConvDoneCallback could be implemented in the user file
558 */
559 }
560
561 /**
562 * @brief DAC_CHx DONE interrupt callback function
563 * @param Instance DAC peripheral
564 * @param Channel The handling DAC channel
565 * @return None
566 */
LL_DAC_ConvDoneBCallback(DAC_TypeDef * Instance,uint32_t Channel)567 __WEAK void LL_DAC_ConvDoneBCallback(DAC_TypeDef *Instance, uint32_t Channel)
568 {
569 /* Prevent unused argument(s) compilation warning */
570 LL_UNUSED(Instance);
571
572 /* NOTE: This function should not be modified, when the callback is needed,
573 the LL_DAC_ConvDoneBCallback could be implemented in the user file
574 */
575 }
576 /**
577 * @}
578 */
579
580
581 /**
582 * @}
583 */
584
585 /* Private functions ---------------------------------------------------------*/
586
587
588 #endif /* LL_DAC_MODULE_ENABLED */
589
590
591 /**
592 * @}
593 */
594
595 /**
596 * @}
597 */
598
599
600 /************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/
601
602