Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:37

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_ll_dac.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of DAC LL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_LL_DAC_H
0021 #define STM32H7xx_LL_DAC_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx.h"
0029 
0030 /** @addtogroup STM32H7xx_LL_Driver
0031   * @{
0032   */
0033 
0034 #if defined(DAC1) || defined(DAC2)
0035 
0036 /** @defgroup DAC_LL DAC
0037   * @ingroup RTEMSBSPsARMSTM32H7
0038   * @{
0039   */
0040 
0041 /* Private types -------------------------------------------------------------*/
0042 /* Private variables ---------------------------------------------------------*/
0043 
0044 /* Private constants ---------------------------------------------------------*/
0045 /** @defgroup DAC_LL_Private_Constants DAC Private Constants
0046   * @ingroup RTEMSBSPsARMSTM32H7
0047   * @{
0048   */
0049 
0050 /* Internal masks for DAC channels definition */
0051 /* To select into literal LL_DAC_CHANNEL_x the relevant bits for:             */
0052 /* - channel bits position into registers CR, MCR, CCR, SHHR, SHRR            */
0053 /* - channel bits position into register SWTRIG                               */
0054 /* - channel register offset of data holding register DHRx                    */
0055 /* - channel register offset of data output register DORx                     */
0056 /* - channel register offset of sample-and-hold sample time register SHSRx    */
0057 #define DAC_CR_CH1_BITOFFSET           0UL   /* Position of channel bits into registers
0058                                                 CR, MCR, CCR, SHHR, SHRR of channel 1 */
0059 #define DAC_CR_CH2_BITOFFSET           16UL  /* Position of channel bits into registers
0060                                                 CR, MCR, CCR, SHHR, SHRR of channel 2 */
0061 #define DAC_CR_CHX_BITOFFSET_MASK      (DAC_CR_CH1_BITOFFSET | DAC_CR_CH2_BITOFFSET)
0062 
0063 #define DAC_SWTR_CH1                   (DAC_SWTRIGR_SWTRIG1) /* Channel bit into register SWTRIGR of channel 1. */
0064 #define DAC_SWTR_CH2                   (DAC_SWTRIGR_SWTRIG2) /* Channel bit into register SWTRIGR of channel 2. */
0065 #define DAC_SWTR_CHX_MASK              (DAC_SWTR_CH1 | DAC_SWTR_CH2)
0066 
0067 #define DAC_REG_DHR12R1_REGOFFSET      0x00000000UL            /* Register DHR12Rx channel 1 taken as reference */
0068 #define DAC_REG_DHR12L1_REGOFFSET      0x00100000UL            /* Register offset of DHR12Lx channel 1 versus
0069                                                                   DHR12Rx channel 1 (shifted left of 20 bits)   */
0070 #define DAC_REG_DHR8R1_REGOFFSET       0x02000000UL            /* Register offset of DHR8Rx  channel 1 versus
0071                                                                   DHR12Rx channel 1 (shifted left of 24 bits)   */
0072 
0073 #define DAC_REG_DHR12R2_REGOFFSET      0x30000000UL            /* Register offset of DHR12Rx channel 2 versus
0074                                                                   DHR12Rx channel 1 (shifted left of 28 bits)   */
0075 #define DAC_REG_DHR12L2_REGOFFSET      0x00400000UL            /* Register offset of DHR12Lx channel 2 versus
0076                                                                   DHR12Rx channel 1 (shifted left of 20 bits)   */
0077 #define DAC_REG_DHR8R2_REGOFFSET       0x05000000UL            /* Register offset of DHR8Rx  channel 2 versus
0078                                                                   DHR12Rx channel 1 (shifted left of 24 bits)   */
0079 
0080 #define DAC_REG_DHR12RX_REGOFFSET_MASK 0xF0000000UL
0081 #define DAC_REG_DHR12LX_REGOFFSET_MASK 0x00F00000UL
0082 #define DAC_REG_DHR8RX_REGOFFSET_MASK  0x0F000000UL
0083 #define DAC_REG_DHRX_REGOFFSET_MASK    (DAC_REG_DHR12RX_REGOFFSET_MASK\
0084                                         | DAC_REG_DHR12LX_REGOFFSET_MASK | DAC_REG_DHR8RX_REGOFFSET_MASK)
0085 
0086 #define DAC_REG_DOR1_REGOFFSET         0x00000000UL            /* Register DORx channel 1 taken as reference */
0087 
0088 #define DAC_REG_DOR2_REGOFFSET         0x00000020UL            /* Register offset of DORx channel 1 versus
0089                                                                   DORx channel 2 (shifted left of 5 bits)    */
0090 #define DAC_REG_DORX_REGOFFSET_MASK    (DAC_REG_DOR1_REGOFFSET | DAC_REG_DOR2_REGOFFSET)
0091 
0092 #define DAC_REG_SHSR1_REGOFFSET        0x00000000UL            /* Register SHSRx channel 1 taken as reference */
0093 #define DAC_REG_SHSR2_REGOFFSET        0x00000040UL            /* Register offset of SHSRx channel 1 versus
0094                                                                   SHSRx channel 2 (shifted left of 6 bits)    */
0095 #define DAC_REG_SHSRX_REGOFFSET_MASK   (DAC_REG_SHSR1_REGOFFSET | DAC_REG_SHSR2_REGOFFSET)
0096 
0097 
0098 #define DAC_REG_DHR_REGOFFSET_MASK_POSBIT0         0x0000000FUL /* Mask of data hold registers offset (DHR12Rx,
0099                                                                    DHR12Lx, DHR8Rx, ...) when shifted to position 0 */
0100 #define DAC_REG_DORX_REGOFFSET_MASK_POSBIT0        0x00000001UL /* Mask of DORx registers offset when shifted
0101                                                                    to position 0                                    */
0102 #define DAC_REG_SHSRX_REGOFFSET_MASK_POSBIT0       0x00000001UL /* Mask of SHSRx registers offset when shifted
0103                                                                    to position 0                                    */
0104 
0105 #define DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS           28UL  /* Position of bits register offset of DHR12Rx
0106                                                                    channel 1 or 2 versus DHR12Rx channel 1
0107                                                                    (shifted left of 28 bits)                   */
0108 #define DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS           20UL  /* Position of bits register offset of DHR12Lx
0109                                                                    channel 1 or 2 versus DHR12Rx channel 1
0110                                                                    (shifted left of 20 bits)                   */
0111 #define DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS            24UL  /* Position of bits register offset of DHR8Rx
0112                                                                    channel 1 or 2 versus DHR12Rx channel 1
0113                                                                    (shifted left of 24 bits)                   */
0114 #define DAC_REG_DORX_REGOFFSET_BITOFFSET_POS               5UL  /* Position of bits register offset of DORx
0115                                                                    channel 1 or 2 versus DORx channel 1
0116                                                                    (shifted left of 5 bits)                    */
0117 #define DAC_REG_SHSRX_REGOFFSET_BITOFFSET_POS              6UL  /* Position of bits register offset of SHSRx
0118                                                                    channel 1 or 2 versus SHSRx channel 1
0119                                                                    (shifted left of 6 bits)                    */
0120 
0121 /* DAC registers bits positions */
0122 #define DAC_DHR12RD_DACC2DHR_BITOFFSET_POS                DAC_DHR12RD_DACC2DHR_Pos
0123 #define DAC_DHR12LD_DACC2DHR_BITOFFSET_POS                DAC_DHR12LD_DACC2DHR_Pos
0124 #define DAC_DHR8RD_DACC2DHR_BITOFFSET_POS                 DAC_DHR8RD_DACC2DHR_Pos
0125 
0126 /* Miscellaneous data */
0127 #define DAC_DIGITAL_SCALE_12BITS                  4095UL   /* Full-scale digital value with a resolution of 12
0128                                                               bits (voltage range determined by analog voltage
0129                                                               references Vref+ and Vref-, refer to reference manual) */
0130 
0131 /**
0132   * @}
0133   */
0134 
0135 
0136 /* Private macros ------------------------------------------------------------*/
0137 /** @defgroup DAC_LL_Private_Macros DAC Private Macros
0138   * @ingroup RTEMSBSPsARMSTM32H7
0139   * @{
0140   */
0141 
0142 /**
0143   * @brief  Driver macro reserved for internal use: set a pointer to
0144   *         a register from a register basis from which an offset
0145   *         is applied.
0146   * @param  __REG__ Register basis from which the offset is applied.
0147   * @param  __REG_OFFFSET__ Offset to be applied (unit: number of registers).
0148   * @retval Pointer to register address
0149   */
0150 #define __DAC_PTR_REG_OFFSET(__REG__, __REG_OFFFSET__)                         \
0151   ((uint32_t *)((uint32_t) ((uint32_t)(&(__REG__)) + ((__REG_OFFFSET__) << 2UL))))
0152 
0153 /**
0154   * @}
0155   */
0156 
0157 
0158 /* Exported types ------------------------------------------------------------*/
0159 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0160 /** @defgroup DAC_LL_ES_INIT DAC Exported Init structure
0161   * @ingroup RTEMSBSPsARMSTM32H7
0162   * @{
0163   */
0164 
0165 /**
0166   * @brief  Structure definition of some features of DAC instance.
0167   */
0168 typedef struct
0169 {
0170   uint32_t TriggerSource;               /*!< Set the conversion trigger source for the selected DAC channel:
0171                                              internal (SW start) or from external peripheral
0172                                              (timer event, external interrupt line).
0173                                              This parameter can be a value of @ref DAC_LL_EC_TRIGGER_SOURCE
0174 
0175                                              This feature can be modified afterwards using unitary
0176                                              function @ref LL_DAC_SetTriggerSource(). */
0177 
0178   uint32_t WaveAutoGeneration;          /*!< Set the waveform automatic generation mode for the selected DAC channel.
0179                                              This parameter can be a value of @ref DAC_LL_EC_WAVE_AUTO_GENERATION_MODE
0180 
0181                                              This feature can be modified afterwards using unitary
0182                                              function @ref LL_DAC_SetWaveAutoGeneration(). */
0183 
0184   uint32_t WaveAutoGenerationConfig;    /*!< Set the waveform automatic generation mode for the selected DAC channel.
0185                                              If waveform automatic generation mode is set to noise, this parameter
0186                                              can be a value of @ref DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS
0187                                              If waveform automatic generation mode is set to triangle,
0188                                              this parameter can be a value of @ref DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE
0189                                              @note If waveform automatic generation mode is disabled,
0190                                               this parameter is discarded.
0191 
0192                                              This feature can be modified afterwards using unitary
0193                                              function @ref LL_DAC_SetWaveNoiseLFSR(),
0194                                              @ref LL_DAC_SetWaveTriangleAmplitude()
0195                                              depending on the wave automatic generation selected. */
0196 
0197   uint32_t OutputBuffer;                /*!< Set the output buffer for the selected DAC channel.
0198                                              This parameter can be a value of @ref DAC_LL_EC_OUTPUT_BUFFER
0199 
0200                                              This feature can be modified afterwards using unitary
0201                                              function @ref LL_DAC_SetOutputBuffer(). */
0202 
0203   uint32_t OutputConnection;            /*!< Set the output connection for the selected DAC channel.
0204                                              This parameter can be a value of @ref DAC_LL_EC_OUTPUT_CONNECTION
0205 
0206                                              This feature can be modified afterwards using unitary
0207                                              function @ref LL_DAC_SetOutputConnection(). */
0208 
0209   uint32_t OutputMode;                  /*!< Set the output mode normal or sample-and-hold for the selected DAC
0210                                              channel. This parameter can be a value of @ref DAC_LL_EC_OUTPUT_MODE
0211 
0212                                              This feature can be modified afterwards using unitary
0213                                              function @ref LL_DAC_SetOutputMode(). */
0214 } LL_DAC_InitTypeDef;
0215 
0216 /**
0217   * @}
0218   */
0219 #endif /* USE_FULL_LL_DRIVER */
0220 
0221 /* Exported constants --------------------------------------------------------*/
0222 /** @defgroup DAC_LL_Exported_Constants DAC Exported Constants
0223   * @ingroup RTEMSBSPsARMSTM32H7
0224   * @{
0225   */
0226 
0227 /** @defgroup DAC_LL_EC_GET_FLAG DAC flags
0228   * @ingroup RTEMSBSPsARMSTM32H7
0229   * @brief    Flags defines which can be used with LL_DAC_ReadReg function
0230   * @{
0231   */
0232 /* DAC channel 1 flags */
0233 #define LL_DAC_FLAG_DMAUDR1                (DAC_SR_DMAUDR1)   /*!< DAC channel 1 flag DMA underrun */
0234 #define LL_DAC_FLAG_CAL1                   (DAC_SR_CAL_FLAG1) /*!< DAC channel 1 flag offset calibration status */
0235 #define LL_DAC_FLAG_BWST1                  (DAC_SR_BWST1)     /*!< DAC channel 1 flag busy writing sample time */
0236 
0237 /* DAC channel 2 flags */
0238 #define LL_DAC_FLAG_DMAUDR2                (DAC_SR_DMAUDR2)   /*!< DAC channel 2 flag DMA underrun */
0239 #define LL_DAC_FLAG_CAL2                   (DAC_SR_CAL_FLAG2) /*!< DAC channel 2 flag offset calibration status */
0240 #define LL_DAC_FLAG_BWST2                  (DAC_SR_BWST2)     /*!< DAC channel 2 flag busy writing sample time */
0241 
0242 /**
0243   * @}
0244   */
0245 
0246 /** @defgroup DAC_LL_EC_IT DAC interruptions
0247   * @ingroup RTEMSBSPsARMSTM32H7
0248   * @brief    IT defines which can be used with LL_DAC_ReadReg and  LL_DAC_WriteReg functions
0249   * @{
0250   */
0251 #define LL_DAC_IT_DMAUDRIE1                (DAC_CR_DMAUDRIE1) /*!< DAC channel 1 interruption DMA underrun */
0252 
0253 #define LL_DAC_IT_DMAUDRIE2                (DAC_CR_DMAUDRIE2) /*!< DAC channel 2 interruption DMA underrun */
0254 
0255 /**
0256   * @}
0257   */
0258 
0259 /** @defgroup DAC_LL_EC_CHANNEL DAC channels
0260   * @ingroup RTEMSBSPsARMSTM32H7
0261   * @{
0262   */
0263 #define LL_DAC_CHANNEL_1                   (DAC_REG_SHSR1_REGOFFSET | 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 */
0264 #define LL_DAC_CHANNEL_2                   (DAC_REG_SHSR2_REGOFFSET | 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 */
0265 /**
0266   * @}
0267   */
0268 
0269 /** @defgroup DAC_LL_EC_OPERATING_MODE DAC operating mode
0270   * @ingroup RTEMSBSPsARMSTM32H7
0271   * @{
0272   */
0273 #define LL_DAC_MODE_NORMAL_OPERATION       0x00000000UL            /*!< DAC channel in mode normal operation */
0274 #define LL_DAC_MODE_CALIBRATION            (DAC_CR_CEN1)           /*!< DAC channel in mode calibration */
0275 /**
0276   * @}
0277   */
0278 
0279 /** @defgroup DAC_LL_EC_TRIGGER_SOURCE DAC trigger source
0280   * @ingroup RTEMSBSPsARMSTM32H7
0281   * @{
0282   */
0283 #define LL_DAC_TRIG_SOFTWARE               0x00000000U                                                         /*!< DAC channel conversion trigger internal (SW start) */
0284 #define LL_DAC_TRIG_EXT_TIM1_TRGO          (                                                   DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM1 TRGO. */
0285 #define LL_DAC_TRIG_EXT_TIM2_TRGO          (                                  DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external peripheral: TIM2 TRGO. */
0286 #define LL_DAC_TRIG_EXT_TIM4_TRGO          (                                  DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM4 TRGO. */
0287 #define LL_DAC_TRIG_EXT_TIM5_TRGO          (                 DAC_CR_TSEL1_2                                  ) /*!< DAC channel conversion trigger from external peripheral: TIM5 TRGO. */
0288 #define LL_DAC_TRIG_EXT_TIM6_TRGO          (                 DAC_CR_TSEL1_2                  | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM6 TRGO. */
0289 #define LL_DAC_TRIG_EXT_TIM7_TRGO          (                 DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external peripheral: TIM7 TRGO. */
0290 #define LL_DAC_TRIG_EXT_TIM8_TRGO          (                 DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM8 TRGO. */
0291 #define LL_DAC_TRIG_EXT_TIM15_TRGO         (DAC_CR_TSEL1_3                                                   ) /*!< DAC channel conversion trigger from external peripheral: TIM15 TRGO. */
0292 #if defined (HRTIM1)
0293 #define LL_DAC_TRIG_EXT_HRTIM_TRGO1        (DAC_CR_TSEL1_3                                   | DAC_CR_TSEL1_0) /*!< HR1 TRGO1 selected as external conversion trigger for DAC channel 1 */
0294 #define LL_DAC_TRIG_EXT_HRTIM_TRGO2        (DAC_CR_TSEL1_3                  | DAC_CR_TSEL1_1                 ) /*!< HR1 TRGO2 selected as external conversion trigger for DAC channel 2 */
0295 #endif /* HRTIM1 */
0296 #define LL_DAC_TRIG_EXT_LPTIM1_OUT         (DAC_CR_TSEL1_3                  | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: LPTIM1 TRGO. */
0297 #define LL_DAC_TRIG_EXT_LPTIM2_OUT         (DAC_CR_TSEL1_3                  | DAC_CR_TSEL1_2                 ) /*!< DAC channel conversion trigger from external peripheral: LPTIM2 TRGO. */
0298 #define LL_DAC_TRIG_EXT_EXTI_LINE9         (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2                  | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: external interrupt line 9. */
0299 #if defined(TIM23)
0300 #define LL_DAC_TRIG_EXT_TIM23_TRGO         (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external peripheral: TIM23 TRGO. */
0301 #endif /* TIM23 */
0302 #if defined(TIM24)
0303 #define LL_DAC_TRIG_EXT_TIM24_TRGO         (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external peripheral: TIM24 TRGO. */
0304 #endif /* TIM24 */
0305 #if defined (DAC2)
0306 #define LL_DAC_TRIG_EXT_LPTIM3_OUT         (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1                 ) /*!< DAC channel conversion trigger from external peripheral: LPTIM3 TRGO. */
0307 #endif /* DAC2 */
0308 /**
0309   * @}
0310   */
0311 
0312 /** @defgroup DAC_LL_EC_WAVE_AUTO_GENERATION_MODE DAC waveform automatic generation mode
0313   * @ingroup RTEMSBSPsARMSTM32H7
0314   * @{
0315   */
0316 #define LL_DAC_WAVE_AUTO_GENERATION_NONE     0x00000000UL                    /*!< DAC channel wave auto generation mode disabled. */
0317 #define LL_DAC_WAVE_AUTO_GENERATION_NOISE    (               DAC_CR_WAVE1_0) /*!< DAC channel wave auto generation mode enabled, set generated noise waveform. */
0318 #define LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE (DAC_CR_WAVE1_1               ) /*!< DAC channel wave auto generation mode enabled, set generated triangle waveform. */
0319 /**
0320   * @}
0321   */
0322 
0323 /** @defgroup DAC_LL_EC_WAVE_NOISE_LFSR_UNMASK_BITS DAC wave generation - Noise LFSR unmask bits
0324   * @ingroup RTEMSBSPsARMSTM32H7
0325   * @{
0326   */
0327 #define LL_DAC_NOISE_LFSR_UNMASK_BIT0      0x00000000UL                                                        /*!< Noise wave generation, unmask LFSR bit0, for the selected DAC channel */
0328 #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 */
0329 #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 */
0330 #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 */
0331 #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 */
0332 #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 */
0333 #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 */
0334 #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 */
0335 #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 */
0336 #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 */
0337 #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 */
0338 #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 */
0339 /**
0340   * @}
0341   */
0342 
0343 /** @defgroup DAC_LL_EC_WAVE_TRIANGLE_AMPLITUDE DAC wave generation - Triangle amplitude
0344   * @ingroup RTEMSBSPsARMSTM32H7
0345   * @{
0346   */
0347 #define LL_DAC_TRIANGLE_AMPLITUDE_1        0x00000000UL                                                        /*!< Triangle wave generation, amplitude of 1 LSB of DAC output range, for the selected DAC channel */
0348 #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 */
0349 #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 */
0350 #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 */
0351 #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 */
0352 #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 */
0353 #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 */
0354 #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 */
0355 #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 */
0356 #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 */
0357 #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 */
0358 #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 */
0359 /**
0360   * @}
0361   */
0362 
0363 /** @defgroup DAC_LL_EC_OUTPUT_MODE DAC channel output mode
0364   * @ingroup RTEMSBSPsARMSTM32H7
0365   * @{
0366   */
0367 #define LL_DAC_OUTPUT_MODE_NORMAL          0x00000000UL            /*!< The selected DAC channel output is on mode normal. */
0368 #define LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD (DAC_MCR_MODE1_2)       /*!< The selected DAC channel output is on mode sample-and-hold. Mode sample-and-hold requires an external capacitor, refer to description of function @ref LL_DAC_ConfigOutput() or @ref LL_DAC_SetOutputMode(). */
0369 /**
0370   * @}
0371   */
0372 
0373 /** @defgroup DAC_LL_EC_OUTPUT_BUFFER DAC channel output buffer
0374   * @ingroup RTEMSBSPsARMSTM32H7
0375   * @{
0376   */
0377 #define LL_DAC_OUTPUT_BUFFER_ENABLE        0x00000000UL            /*!< The selected DAC channel output is buffered: higher drive current capability, but also higher current consumption */
0378 #define LL_DAC_OUTPUT_BUFFER_DISABLE       (DAC_MCR_MODE1_1)       /*!< The selected DAC channel output is not buffered: lower drive current capability, but also lower current consumption */
0379 /**
0380   * @}
0381   */
0382 
0383 /** @defgroup DAC_LL_EC_OUTPUT_CONNECTION DAC channel output connection
0384   * @ingroup RTEMSBSPsARMSTM32H7
0385   * @{
0386   */
0387 #define LL_DAC_OUTPUT_CONNECT_GPIO         0x00000000UL            /*!< The selected DAC channel output is connected to external pin */
0388 #define LL_DAC_OUTPUT_CONNECT_INTERNAL     (DAC_MCR_MODE1_0)       /*!< The selected DAC channel output is connected to on-chip peripherals via internal paths. On this STM32 series, output connection depends on output mode (normal or sample and hold) and output buffer state. Refer to comments of function @ref LL_DAC_SetOutputConnection(). */
0389 /**
0390   * @}
0391   */
0392 
0393 /** @defgroup DAC_LL_EC_LEGACY DAC literals legacy naming
0394   * @ingroup RTEMSBSPsARMSTM32H7
0395   * @{
0396   */
0397 #define LL_DAC_TRIGGER_SOFTWARE            (LL_DAC_TRIG_SOFTWARE)
0398 #define LL_DAC_TRIGGER_TIM2_TRGO           (LL_DAC_TRIG_EXT_TIM2_TRGO)
0399 #define LL_DAC_TRIGGER_TIM4_TRGO           (LL_DAC_TRIG_EXT_TIM4_TRGO)
0400 #define LL_DAC_TRIGGER_TIM6_TRGO           (LL_DAC_TRIG_EXT_TIM6_TRGO)
0401 #define LL_DAC_TRIGGER_TIM7_TRGO           (LL_DAC_TRIG_EXT_TIM7_TRGO)
0402 #define LL_DAC_TRIGGER_TIM8_TRGO           (LL_DAC_TRIG_EXT_TIM8_TRGO)
0403 #define LL_DAC_TRIGGER_EXT_IT9             (LL_DAC_TRIG_EXT_EXTI_LINE9)
0404 
0405 #define LL_DAC_WAVEGENERATION_NONE         (LL_DAC_WAVE_AUTO_GENERATION_NONE)
0406 #define LL_DAC_WAVEGENERATION_NOISE        (LL_DAC_WAVE_AUTO_GENERATION_NOISE)
0407 #define LL_DAC_WAVEGENERATION_TRIANGLE     (LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE)
0408 
0409 #define LL_DAC_CONNECT_GPIO                (LL_DAC_OUTPUT_CONNECT_GPIO)
0410 #define LL_DAC_CONNECT_INTERNAL            (LL_DAC_OUTPUT_CONNECT_INTERNAL)
0411 /**
0412   * @}
0413   */
0414 /** @defgroup DAC_LL_EC_RESOLUTION  DAC channel output resolution
0415   * @ingroup RTEMSBSPsARMSTM32H7
0416   * @{
0417   */
0418 #define LL_DAC_RESOLUTION_12B              0x00000000UL            /*!< DAC channel resolution 12 bits */
0419 #define LL_DAC_RESOLUTION_8B               0x00000002UL            /*!< DAC channel resolution 8 bits */
0420 /**
0421   * @}
0422   */
0423 
0424 /** @defgroup DAC_LL_EC_REGISTERS  DAC registers compliant with specific purpose
0425   * @ingroup RTEMSBSPsARMSTM32H7
0426   * @{
0427   */
0428 /* List of DAC registers intended to be used (most commonly) with             */
0429 /* DMA transfer.                                                              */
0430 /* Refer to function @ref LL_DAC_DMA_GetRegAddr().                            */
0431 #define LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED  DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits right aligned */
0432 #define LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED   DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS /*!< DAC channel data holding register 12 bits left aligned */
0433 #define LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED   DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS  /*!< DAC channel data holding register 8 bits right aligned */
0434 /**
0435   * @}
0436   */
0437 
0438 /** @defgroup DAC_LL_EC_HW_DELAYS  Definitions of DAC hardware constraints delays
0439   * @ingroup RTEMSBSPsARMSTM32H7
0440   * @note   Only DAC peripheral HW delays are defined in DAC LL driver driver,
0441   *         not timeout values.
0442   *         For details on delays values, refer to descriptions in source code
0443   *         above each literal definition.
0444   * @{
0445   */
0446 
0447 /* Delay for DAC channel voltage settling time from DAC channel startup       */
0448 /* (transition from disable to enable).                                       */
0449 /* Note: DAC channel startup time depends on board application environment:   */
0450 /*       impedance connected to DAC channel output.                           */
0451 /*       The delay below is specified under conditions:                       */
0452 /*        - voltage maximum transition (lowest to highest value)              */
0453 /*        - until voltage reaches final value +-1LSB                          */
0454 /*        - DAC channel output buffer enabled                                 */
0455 /*        - load impedance of 5kOhm (min), 50pF (max)                         */
0456 /* Literal set to maximum value (refer to device datasheet,                   */
0457 /* parameter "tWAKEUP").                                                      */
0458 /* Unit: us                                                                   */
0459 #define LL_DAC_DELAY_STARTUP_VOLTAGE_SETTLING_US             8UL  /*!< Delay for DAC channel voltage settling time from DAC channel startup (transition from disable to enable) */
0460 
0461 /* Delay for DAC channel voltage settling time.                               */
0462 /* Note: DAC channel startup time depends on board application environment:   */
0463 /*       impedance connected to DAC channel output.                           */
0464 /*       The delay below is specified under conditions:                       */
0465 /*        - voltage maximum transition (lowest to highest value)              */
0466 /*        - until voltage reaches final value +-1LSB                          */
0467 /*        - DAC channel output buffer enabled                                 */
0468 /*        - load impedance of 5kOhm min, 50pF max                             */
0469 /* Literal set to maximum value (refer to device datasheet,                   */
0470 /* parameter "tSETTLING").                                                    */
0471 /* Unit: us                                                                   */
0472 #define LL_DAC_DELAY_VOLTAGE_SETTLING_US                     3UL /*!< Delay for DAC channel voltage settling time */
0473 
0474 /**
0475   * @}
0476   */
0477 
0478 /**
0479   * @}
0480   */
0481 
0482 /* Exported macro ------------------------------------------------------------*/
0483 /** @defgroup DAC_LL_Exported_Macros DAC Exported Macros
0484   * @ingroup RTEMSBSPsARMSTM32H7
0485   * @{
0486   */
0487 
0488 /** @defgroup DAC_LL_EM_WRITE_READ Common write and read registers macros
0489   * @ingroup RTEMSBSPsARMSTM32H7
0490   * @{
0491   */
0492 
0493 /**
0494   * @brief  Write a value in DAC register
0495   * @param  __INSTANCE__ DAC Instance
0496   * @param  __REG__ Register to be written
0497   * @param  __VALUE__ Value to be written in the register
0498   * @retval None
0499   */
0500 #define LL_DAC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
0501 
0502 /**
0503   * @brief  Read a value in DAC register
0504   * @param  __INSTANCE__ DAC Instance
0505   * @param  __REG__ Register to be read
0506   * @retval Register value
0507   */
0508 #define LL_DAC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
0509 
0510 /**
0511   * @}
0512   */
0513 
0514 /** @defgroup DAC_LL_EM_HELPER_MACRO DAC helper macro
0515   * @ingroup RTEMSBSPsARMSTM32H7
0516   * @{
0517   */
0518 
0519 /**
0520   * @brief  Helper macro to get DAC channel number in decimal format
0521   *         from literals LL_DAC_CHANNEL_x.
0522   *         Example:
0523   *            __LL_DAC_CHANNEL_TO_DECIMAL_NB(LL_DAC_CHANNEL_1)
0524   *            will return decimal number "1".
0525   * @note   The input can be a value from functions where a channel
0526   *         number is returned.
0527   * @param  __CHANNEL__ This parameter can be one of the following values:
0528   *         @arg @ref LL_DAC_CHANNEL_1
0529   *         @arg @ref LL_DAC_CHANNEL_2
0530   * @retval 1...2
0531   */
0532 #define __LL_DAC_CHANNEL_TO_DECIMAL_NB(__CHANNEL__)                            \
0533   ((__CHANNEL__) & DAC_SWTR_CHX_MASK)
0534 
0535 /**
0536   * @brief  Helper macro to get DAC channel in literal format LL_DAC_CHANNEL_x
0537   *         from number in decimal format.
0538   *         Example:
0539   *           __LL_DAC_DECIMAL_NB_TO_CHANNEL(1)
0540   *           will return a data equivalent to "LL_DAC_CHANNEL_1".
0541   * @note  If the input parameter does not correspond to a DAC channel,
0542   *        this macro returns value '0'.
0543   * @param  __DECIMAL_NB__ 1...2
0544   * @retval Returned value can be one of the following values:
0545   *         @arg @ref LL_DAC_CHANNEL_1
0546   *         @arg @ref LL_DAC_CHANNEL_2
0547   */
0548 #define __LL_DAC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__)\
0549   (((__DECIMAL_NB__) == 1UL)? (LL_DAC_CHANNEL_1  ):(((__DECIMAL_NB__) == 2UL) ? ( LL_DAC_CHANNEL_2):(0UL)))
0550 
0551 /**
0552   * @brief  Helper macro to define the DAC conversion data full-scale digital
0553   *         value corresponding to the selected DAC resolution.
0554   * @note   DAC conversion data full-scale corresponds to voltage range
0555   *         determined by analog voltage references Vref+ and Vref-
0556   *         (refer to reference manual).
0557   * @param  __DAC_RESOLUTION__ This parameter can be one of the following values:
0558   *         @arg @ref LL_DAC_RESOLUTION_12B
0559   *         @arg @ref LL_DAC_RESOLUTION_8B
0560   * @retval ADC conversion data equivalent voltage value (unit: mVolt)
0561   */
0562 #define __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__)                             \
0563   ((0x00000FFFUL) >> ((__DAC_RESOLUTION__) << 1UL))
0564 
0565 /**
0566   * @brief  Helper macro to calculate the DAC conversion data (unit: digital
0567   *         value) corresponding to a voltage (unit: mVolt).
0568   * @note   This helper macro is intended to provide input data in voltage
0569   *         rather than digital value,
0570   *         to be used with LL DAC functions such as
0571   *         @ref LL_DAC_ConvertData12RightAligned().
0572   * @note   Analog reference voltage (Vref+) must be either known from
0573   *         user board environment or can be calculated using ADC measurement
0574   *         and ADC helper macro __LL_ADC_CALC_VREFANALOG_VOLTAGE().
0575   * @param  __VREFANALOG_VOLTAGE__ Analog reference voltage (unit: mV)
0576   * @param  __DAC_VOLTAGE__ Voltage to be generated by DAC channel
0577   *                         (unit: mVolt).
0578   * @param  __DAC_RESOLUTION__ This parameter can be one of the following values:
0579   *         @arg @ref LL_DAC_RESOLUTION_12B
0580   *         @arg @ref LL_DAC_RESOLUTION_8B
0581   * @retval DAC conversion data (unit: digital value)
0582   */
0583 #define __LL_DAC_CALC_VOLTAGE_TO_DATA(__VREFANALOG_VOLTAGE__, __DAC_VOLTAGE__, __DAC_RESOLUTION__)     \
0584   ((__DAC_VOLTAGE__) * __LL_DAC_DIGITAL_SCALE(__DAC_RESOLUTION__)                                      \
0585    / (__VREFANALOG_VOLTAGE__)                                                                          \
0586   )
0587 
0588 /**
0589   * @}
0590   */
0591 
0592 /**
0593   * @}
0594   */
0595 
0596 
0597 /* Exported functions --------------------------------------------------------*/
0598 /** @defgroup DAC_LL_Exported_Functions DAC Exported Functions
0599   * @ingroup RTEMSBSPsARMSTM32H7
0600   * @{
0601   */
0602 
0603 /** @defgroup DAC_LL_EF_Configuration Configuration of DAC channels
0604   * @ingroup RTEMSBSPsARMSTM32H7
0605   * @{
0606   */
0607 
0608 /**
0609   * @brief  Set the operating mode for the selected DAC channel:
0610   *         calibration or normal operating mode.
0611   * @rmtoll CR       CEN1           LL_DAC_SetMode\n
0612   *         CR       CEN2           LL_DAC_SetMode
0613   * @param  DACx DAC instance
0614   * @param  DAC_Channel This parameter can be one of the following values:
0615   *         @arg @ref LL_DAC_CHANNEL_1
0616   *         @arg @ref LL_DAC_CHANNEL_2
0617   * @param  ChannelMode This parameter can be one of the following values:
0618   *         @arg @ref LL_DAC_MODE_NORMAL_OPERATION
0619   *         @arg @ref LL_DAC_MODE_CALIBRATION
0620   * @retval None
0621   */
0622 __STATIC_INLINE void LL_DAC_SetMode(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t ChannelMode)
0623 {
0624   MODIFY_REG(DACx->CR,
0625              DAC_CR_CEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0626              ChannelMode << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0627 }
0628 
0629 /**
0630   * @brief  Get the operating mode for the selected DAC channel:
0631   *         calibration or normal operating mode.
0632   * @rmtoll CR       CEN1           LL_DAC_GetMode\n
0633   *         CR       CEN2           LL_DAC_GetMode
0634   * @param  DACx DAC instance
0635   * @param  DAC_Channel This parameter can be one of the following values:
0636   *         @arg @ref LL_DAC_CHANNEL_1
0637   *         @arg @ref LL_DAC_CHANNEL_2
0638   * @retval Returned value can be one of the following values:
0639   *         @arg @ref LL_DAC_MODE_NORMAL_OPERATION
0640   *         @arg @ref LL_DAC_MODE_CALIBRATION
0641   */
0642 __STATIC_INLINE uint32_t LL_DAC_GetMode(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0643 {
0644   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_CEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0645                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0646                    );
0647 }
0648 
0649 /**
0650   * @brief  Set the offset trimming value for the selected DAC channel.
0651   *         Trimming has an impact when output buffer is enabled
0652   *         and is intended to replace factory calibration default values.
0653   * @rmtoll CCR      OTRIM1         LL_DAC_SetTrimmingValue\n
0654   *         CCR      OTRIM2         LL_DAC_SetTrimmingValue
0655   * @param  DACx DAC instance
0656   * @param  DAC_Channel This parameter can be one of the following values:
0657   *         @arg @ref LL_DAC_CHANNEL_1
0658   *         @arg @ref LL_DAC_CHANNEL_2
0659   * @param  TrimmingValue Value between Min_Data=0x00 and Max_Data=0x1F
0660   * @retval None
0661   */
0662 __STATIC_INLINE void LL_DAC_SetTrimmingValue(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TrimmingValue)
0663 {
0664   MODIFY_REG(DACx->CCR,
0665              DAC_CCR_OTRIM1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0666              TrimmingValue << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0667 }
0668 
0669 /**
0670   * @brief  Get the offset trimming value for the selected DAC channel.
0671   *         Trimming has an impact when output buffer is enabled
0672   *         and is intended to replace factory calibration default values.
0673   * @rmtoll CCR      OTRIM1         LL_DAC_GetTrimmingValue\n
0674   *         CCR      OTRIM2         LL_DAC_GetTrimmingValue
0675   * @param  DACx DAC instance
0676   * @param  DAC_Channel This parameter can be one of the following values:
0677   *         @arg @ref LL_DAC_CHANNEL_1
0678   *         @arg @ref LL_DAC_CHANNEL_2
0679   * @retval TrimmingValue Value between Min_Data=0x00 and Max_Data=0x1F
0680   */
0681 __STATIC_INLINE uint32_t LL_DAC_GetTrimmingValue(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0682 {
0683   return (uint32_t)(READ_BIT(DACx->CCR, DAC_CCR_OTRIM1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0684                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0685                    );
0686 }
0687 
0688 /**
0689   * @brief  Set the conversion trigger source for the selected DAC channel.
0690   * @note   For conversion trigger source to be effective, DAC trigger
0691   *         must be enabled using function @ref LL_DAC_EnableTrigger().
0692   * @note   To set conversion trigger source, DAC channel must be disabled.
0693   *         Otherwise, the setting is discarded.
0694   * @note   Availability of parameters of trigger sources from timer
0695   *         depends on timers availability on the selected device.
0696   * @rmtoll CR       TSEL1          LL_DAC_SetTriggerSource\n
0697   *         CR       TSEL2          LL_DAC_SetTriggerSource
0698   * @param  DACx DAC instance
0699   * @param  DAC_Channel This parameter can be one of the following values:
0700   *         @arg @ref LL_DAC_CHANNEL_1
0701   *         @arg @ref LL_DAC_CHANNEL_2
0702   * @param  TriggerSource This parameter can be one of the following values:
0703   *         @arg @ref LL_DAC_TRIG_SOFTWARE
0704   *         @arg @ref LL_DAC_TRIG_EXT_TIM1_TRGO
0705   *         @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
0706   *         @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
0707   *         @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
0708   *         @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
0709   *         @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
0710   *         @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
0711   *         @arg @ref LL_DAC_TRIG_EXT_TIM15_TRGO
0712   *         @arg @ref LL_DAC_TRIG_EXT_HRTIM_TRGO1    (1)
0713   *         @arg @ref LL_DAC_TRIG_EXT_HRTIM_TRGO2    (1)
0714   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM1_OUT
0715   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM2_OUT
0716   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM3_OUT     (2)
0717   *         @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
0718   *         @arg @ref LL_DAC_TRIG_EXT_TIM23_TRGO     (3)
0719   *         @arg @ref LL_DAC_TRIG_EXT_TIM24_TRGO     (4)
0720   *
0721   *         (1) On this STM32 series, parameter not available on all devices.
0722   *          Only available if HRTIM feature is supported (refer to device datasheet for supported features list)
0723   *         (2) On this STM32 series, parameter only available on DAC2.
0724   *         (3) On this STM32 series, parameter not available on all devices.
0725   *          Only available if TIM23 feature is supported (refer to device datasheet for supported features list)
0726   *         (4) On this STM32 series, parameter not available on all devices.
0727   *          Only available if TIM24 feature is supported (refer to device datasheet for supported features list)
0728   * @retval None
0729   */
0730 __STATIC_INLINE void LL_DAC_SetTriggerSource(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t TriggerSource)
0731 {
0732   MODIFY_REG(DACx->CR,
0733              DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0734              TriggerSource << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0735 }
0736 
0737 /**
0738   * @brief  Get the conversion trigger source for the selected DAC channel.
0739   * @note   For conversion trigger source to be effective, DAC trigger
0740   *         must be enabled using function @ref LL_DAC_EnableTrigger().
0741   * @note   Availability of parameters of trigger sources from timer
0742   *         depends on timers availability on the selected device.
0743   * @rmtoll CR       TSEL1          LL_DAC_GetTriggerSource\n
0744   *         CR       TSEL2          LL_DAC_GetTriggerSource
0745   * @param  DACx DAC instance
0746   * @param  DAC_Channel This parameter can be one of the following values:
0747   *         @arg @ref LL_DAC_CHANNEL_1
0748   *         @arg @ref LL_DAC_CHANNEL_2
0749   * @retval Returned value can be one of the following values:
0750   *         @arg @ref LL_DAC_TRIG_SOFTWARE
0751   *         @arg @ref LL_DAC_TRIG_EXT_TIM1_TRGO
0752   *         @arg @ref LL_DAC_TRIG_EXT_TIM2_TRGO
0753   *         @arg @ref LL_DAC_TRIG_EXT_TIM4_TRGO
0754   *         @arg @ref LL_DAC_TRIG_EXT_TIM5_TRGO
0755   *         @arg @ref LL_DAC_TRIG_EXT_TIM6_TRGO
0756   *         @arg @ref LL_DAC_TRIG_EXT_TIM7_TRGO
0757   *         @arg @ref LL_DAC_TRIG_EXT_TIM8_TRGO
0758   *         @arg @ref LL_DAC_TRIG_EXT_TIM15_TRGO
0759   *         @arg @ref LL_DAC_TRIG_EXT_HRTIM_TRGO1    (1)
0760   *         @arg @ref LL_DAC_TRIG_EXT_HRTIM_TRGO2    (1)
0761   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM1_OUT
0762   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM2_OUT
0763   *         @arg @ref LL_DAC_TRIG_EXT_LPTIM3_OUT     (2)
0764   *         @arg @ref LL_DAC_TRIG_EXT_EXTI_LINE9
0765   *         @arg @ref LL_DAC_TRIG_EXT_TIM23_TRGO     (3)
0766   *         @arg @ref LL_DAC_TRIG_EXT_TIM24_TRGO     (4)
0767   *
0768   *         (1) On this STM32 series, parameter not available on all devices.
0769   *          Only available if HRTIM feature is supported (refer to device datasheet for supported features list)
0770   *         (2) On this STM32 series, parameter only available on DAC2.
0771   *         (3) On this STM32 series, parameter not available on all devices.
0772   *          Only available if TIM23 feature is supported (refer to device datasheet for supported features list)
0773   *         (4) On this STM32 series, parameter not available on all devices.
0774   *          Only available if TIM24 feature is supported (refer to device datasheet for supported features list)
0775   */
0776 __STATIC_INLINE uint32_t LL_DAC_GetTriggerSource(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0777 {
0778   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_TSEL1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0779                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0780                    );
0781 }
0782 
0783 /**
0784   * @brief  Set the waveform automatic generation mode
0785   *         for the selected DAC channel.
0786   * @rmtoll CR       WAVE1          LL_DAC_SetWaveAutoGeneration\n
0787   *         CR       WAVE2          LL_DAC_SetWaveAutoGeneration
0788   * @param  DACx DAC instance
0789   * @param  DAC_Channel This parameter can be one of the following values:
0790   *         @arg @ref LL_DAC_CHANNEL_1
0791   *         @arg @ref LL_DAC_CHANNEL_2
0792   * @param  WaveAutoGeneration This parameter can be one of the following values:
0793   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
0794   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
0795   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
0796   * @retval None
0797   */
0798 __STATIC_INLINE void LL_DAC_SetWaveAutoGeneration(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t WaveAutoGeneration)
0799 {
0800   MODIFY_REG(DACx->CR,
0801              DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0802              WaveAutoGeneration << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0803 }
0804 
0805 /**
0806   * @brief  Get the waveform automatic generation mode
0807   *         for the selected DAC channel.
0808   * @rmtoll CR       WAVE1          LL_DAC_GetWaveAutoGeneration\n
0809   *         CR       WAVE2          LL_DAC_GetWaveAutoGeneration
0810   * @param  DACx DAC instance
0811   * @param  DAC_Channel This parameter can be one of the following values:
0812   *         @arg @ref LL_DAC_CHANNEL_1
0813   *         @arg @ref LL_DAC_CHANNEL_2
0814   * @retval Returned value can be one of the following values:
0815   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NONE
0816   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_NOISE
0817   *         @arg @ref LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE
0818   */
0819 __STATIC_INLINE uint32_t LL_DAC_GetWaveAutoGeneration(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0820 {
0821   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_WAVE1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0822                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0823                    );
0824 }
0825 
0826 /**
0827   * @brief  Set the noise waveform generation for the selected DAC channel:
0828   *         Noise mode and parameters LFSR (linear feedback shift register).
0829   * @note   For wave generation to be effective, DAC channel
0830   *         wave generation mode must be enabled using
0831   *         function @ref LL_DAC_SetWaveAutoGeneration().
0832   * @note   This setting can be set when the selected DAC channel is disabled
0833   *         (otherwise, the setting operation is ignored).
0834   * @rmtoll CR       MAMP1          LL_DAC_SetWaveNoiseLFSR\n
0835   *         CR       MAMP2          LL_DAC_SetWaveNoiseLFSR
0836   * @param  DACx DAC instance
0837   * @param  DAC_Channel This parameter can be one of the following values:
0838   *         @arg @ref LL_DAC_CHANNEL_1
0839   *         @arg @ref LL_DAC_CHANNEL_2
0840   * @param  NoiseLFSRMask This parameter can be one of the following values:
0841   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
0842   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
0843   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
0844   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
0845   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
0846   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
0847   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
0848   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
0849   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
0850   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
0851   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
0852   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
0853   * @retval None
0854   */
0855 __STATIC_INLINE void LL_DAC_SetWaveNoiseLFSR(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t NoiseLFSRMask)
0856 {
0857   MODIFY_REG(DACx->CR,
0858              DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0859              NoiseLFSRMask << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0860 }
0861 
0862 /**
0863   * @brief  Get the noise waveform generation for the selected DAC channel:
0864   *         Noise mode and parameters LFSR (linear feedback shift register).
0865   * @rmtoll CR       MAMP1          LL_DAC_GetWaveNoiseLFSR\n
0866   *         CR       MAMP2          LL_DAC_GetWaveNoiseLFSR
0867   * @param  DACx DAC instance
0868   * @param  DAC_Channel This parameter can be one of the following values:
0869   *         @arg @ref LL_DAC_CHANNEL_1
0870   *         @arg @ref LL_DAC_CHANNEL_2
0871   * @retval Returned value can be one of the following values:
0872   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BIT0
0873   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS1_0
0874   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS2_0
0875   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS3_0
0876   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS4_0
0877   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS5_0
0878   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS6_0
0879   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS7_0
0880   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS8_0
0881   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS9_0
0882   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS10_0
0883   *         @arg @ref LL_DAC_NOISE_LFSR_UNMASK_BITS11_0
0884   */
0885 __STATIC_INLINE uint32_t LL_DAC_GetWaveNoiseLFSR(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0886 {
0887   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0888                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0889                    );
0890 }
0891 
0892 /**
0893   * @brief  Set the triangle waveform generation for the selected DAC channel:
0894   *         triangle mode and amplitude.
0895   * @note   For wave generation to be effective, DAC channel
0896   *         wave generation mode must be enabled using
0897   *         function @ref LL_DAC_SetWaveAutoGeneration().
0898   * @note   This setting can be set when the selected DAC channel is disabled
0899   *         (otherwise, the setting operation is ignored).
0900   * @rmtoll CR       MAMP1          LL_DAC_SetWaveTriangleAmplitude\n
0901   *         CR       MAMP2          LL_DAC_SetWaveTriangleAmplitude
0902   * @param  DACx DAC instance
0903   * @param  DAC_Channel This parameter can be one of the following values:
0904   *         @arg @ref LL_DAC_CHANNEL_1
0905   *         @arg @ref LL_DAC_CHANNEL_2
0906   * @param  TriangleAmplitude This parameter can be one of the following values:
0907   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
0908   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
0909   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
0910   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
0911   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
0912   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
0913   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
0914   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
0915   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
0916   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
0917   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
0918   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
0919   * @retval None
0920   */
0921 __STATIC_INLINE void LL_DAC_SetWaveTriangleAmplitude(DAC_TypeDef *DACx, uint32_t DAC_Channel,
0922                                                      uint32_t TriangleAmplitude)
0923 {
0924   MODIFY_REG(DACx->CR,
0925              DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
0926              TriangleAmplitude << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
0927 }
0928 
0929 /**
0930   * @brief  Get the triangle waveform generation for the selected DAC channel:
0931   *         triangle mode and amplitude.
0932   * @rmtoll CR       MAMP1          LL_DAC_GetWaveTriangleAmplitude\n
0933   *         CR       MAMP2          LL_DAC_GetWaveTriangleAmplitude
0934   * @param  DACx DAC instance
0935   * @param  DAC_Channel This parameter can be one of the following values:
0936   *         @arg @ref LL_DAC_CHANNEL_1
0937   *         @arg @ref LL_DAC_CHANNEL_2
0938   * @retval Returned value can be one of the following values:
0939   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1
0940   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_3
0941   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_7
0942   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_15
0943   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_31
0944   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_63
0945   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_127
0946   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_255
0947   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_511
0948   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_1023
0949   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_2047
0950   *         @arg @ref LL_DAC_TRIANGLE_AMPLITUDE_4095
0951   */
0952 __STATIC_INLINE uint32_t LL_DAC_GetWaveTriangleAmplitude(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
0953 {
0954   return (uint32_t)(READ_BIT(DACx->CR, DAC_CR_MAMP1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
0955                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0956                    );
0957 }
0958 
0959 /**
0960   * @brief  Set the output for the selected DAC channel.
0961   * @note   This function set several features:
0962   *         - mode normal or sample-and-hold
0963   *         - buffer
0964   *         - connection to GPIO or internal path.
0965   *         These features can also be set individually using
0966   *         dedicated functions:
0967   *         - @ref LL_DAC_SetOutputBuffer()
0968   *         - @ref LL_DAC_SetOutputMode()
0969   *         - @ref LL_DAC_SetOutputConnection()
0970   * @note   On this STM32 series, output connection depends on output mode
0971   *         (normal or sample and hold) and output buffer state.
0972   *         - if output connection is set to internal path and output buffer
0973   *           is enabled (whatever output mode):
0974   *           output connection is also connected to GPIO pin
0975   *           (both connections to GPIO pin and internal path).
0976   *         - if output connection is set to GPIO pin, output buffer
0977   *           is disabled, output mode set to sample and hold:
0978   *           output connection is also connected to internal path
0979   *           (both connections to GPIO pin and internal path).
0980   * @note   Mode sample-and-hold requires an external capacitor
0981   *         to be connected between DAC channel output and ground.
0982   *         Capacitor value depends on load on DAC channel output and
0983   *         sample-and-hold timings configured.
0984   *         As indication, capacitor typical value is 100nF
0985   *         (refer to device datasheet, parameter "CSH").
0986   * @rmtoll CR       MODE1          LL_DAC_ConfigOutput\n
0987   *         CR       MODE2          LL_DAC_ConfigOutput
0988   * @param  DACx DAC instance
0989   * @param  DAC_Channel This parameter can be one of the following values:
0990   *         @arg @ref LL_DAC_CHANNEL_1
0991   *         @arg @ref LL_DAC_CHANNEL_2
0992   * @param  OutputMode This parameter can be one of the following values:
0993   *         @arg @ref LL_DAC_OUTPUT_MODE_NORMAL
0994   *         @arg @ref LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD
0995   * @param  OutputBuffer This parameter can be one of the following values:
0996   *         @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
0997   *         @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
0998   * @param  OutputConnection This parameter can be one of the following values:
0999   *         @arg @ref LL_DAC_OUTPUT_CONNECT_GPIO
1000   *         @arg @ref LL_DAC_OUTPUT_CONNECT_INTERNAL
1001   * @retval None
1002   */
1003 __STATIC_INLINE void LL_DAC_ConfigOutput(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputMode,
1004                                          uint32_t OutputBuffer, uint32_t OutputConnection)
1005 {
1006   MODIFY_REG(DACx->MCR,
1007              (DAC_MCR_MODE1_2 | DAC_MCR_MODE1_1 | DAC_MCR_MODE1_0) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1008              (OutputMode | OutputBuffer | OutputConnection) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1009 }
1010 
1011 /**
1012   * @brief  Set the output mode normal or sample-and-hold
1013   *         for the selected DAC channel.
1014   * @note   Mode sample-and-hold requires an external capacitor
1015   *         to be connected between DAC channel output and ground.
1016   *         Capacitor value depends on load on DAC channel output and
1017   *         sample-and-hold timings configured.
1018   *         As indication, capacitor typical value is 100nF
1019   *         (refer to device datasheet, parameter "CSH").
1020   * @rmtoll CR       MODE1          LL_DAC_SetOutputMode\n
1021   *         CR       MODE2          LL_DAC_SetOutputMode
1022   * @param  DACx DAC instance
1023   * @param  DAC_Channel This parameter can be one of the following values:
1024   *         @arg @ref LL_DAC_CHANNEL_1
1025   *         @arg @ref LL_DAC_CHANNEL_2
1026   * @param  OutputMode This parameter can be one of the following values:
1027   *         @arg @ref LL_DAC_OUTPUT_MODE_NORMAL
1028   *         @arg @ref LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD
1029   * @retval None
1030   */
1031 __STATIC_INLINE void LL_DAC_SetOutputMode(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputMode)
1032 {
1033   MODIFY_REG(DACx->MCR,
1034              (uint32_t)DAC_MCR_MODE1_2 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1035              OutputMode << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1036 }
1037 
1038 /**
1039   * @brief  Get the output mode normal or sample-and-hold for the selected DAC channel.
1040   * @rmtoll CR       MODE1          LL_DAC_GetOutputMode\n
1041   *         CR       MODE2          LL_DAC_GetOutputMode
1042   * @param  DACx DAC instance
1043   * @param  DAC_Channel This parameter can be one of the following values:
1044   *         @arg @ref LL_DAC_CHANNEL_1
1045   *         @arg @ref LL_DAC_CHANNEL_2
1046   * @retval Returned value can be one of the following values:
1047   *         @arg @ref LL_DAC_OUTPUT_MODE_NORMAL
1048   *         @arg @ref LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD
1049   */
1050 __STATIC_INLINE uint32_t LL_DAC_GetOutputMode(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1051 {
1052   return (uint32_t)(READ_BIT(DACx->MCR, (uint32_t)DAC_MCR_MODE1_2 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1053                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
1054                    );
1055 }
1056 
1057 /**
1058   * @brief  Set the output buffer for the selected DAC channel.
1059   * @note   On this STM32 series, when buffer is enabled, its offset can be
1060   *         trimmed: factory calibration default values can be
1061   *         replaced by user trimming values, using function
1062   *         @ref LL_DAC_SetTrimmingValue().
1063   * @rmtoll CR       MODE1          LL_DAC_SetOutputBuffer\n
1064   *         CR       MODE2          LL_DAC_SetOutputBuffer
1065   * @param  DACx DAC instance
1066   * @param  DAC_Channel This parameter can be one of the following values:
1067   *         @arg @ref LL_DAC_CHANNEL_1
1068   *         @arg @ref LL_DAC_CHANNEL_2
1069   * @param  OutputBuffer This parameter can be one of the following values:
1070   *         @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
1071   *         @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
1072   * @retval None
1073   */
1074 __STATIC_INLINE void LL_DAC_SetOutputBuffer(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputBuffer)
1075 {
1076   MODIFY_REG(DACx->MCR,
1077              (uint32_t)DAC_MCR_MODE1_1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1078              OutputBuffer << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1079 }
1080 
1081 /**
1082   * @brief  Get the output buffer state for the selected DAC channel.
1083   * @rmtoll CR       MODE1          LL_DAC_GetOutputBuffer\n
1084   *         CR       MODE2          LL_DAC_GetOutputBuffer
1085   * @param  DACx DAC instance
1086   * @param  DAC_Channel This parameter can be one of the following values:
1087   *         @arg @ref LL_DAC_CHANNEL_1
1088   *         @arg @ref LL_DAC_CHANNEL_2
1089   * @retval Returned value can be one of the following values:
1090   *         @arg @ref LL_DAC_OUTPUT_BUFFER_ENABLE
1091   *         @arg @ref LL_DAC_OUTPUT_BUFFER_DISABLE
1092   */
1093 __STATIC_INLINE uint32_t LL_DAC_GetOutputBuffer(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1094 {
1095   return (uint32_t)(READ_BIT(DACx->MCR, (uint32_t)DAC_MCR_MODE1_1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1096                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
1097                    );
1098 }
1099 
1100 /**
1101   * @brief  Set the output connection for the selected DAC channel.
1102   * @note   On this STM32 series, output connection depends on output mode (normal or
1103   *         sample and hold) and output buffer state.
1104   *         - if output connection is set to internal path and output buffer
1105   *           is enabled (whatever output mode):
1106   *           output connection is also connected to GPIO pin
1107   *           (both connections to GPIO pin and internal path).
1108   *         - if output connection is set to GPIO pin, output buffer
1109   *           is disabled, output mode set to sample and hold:
1110   *           output connection is also connected to internal path
1111   *           (both connections to GPIO pin and internal path).
1112   * @rmtoll CR       MODE1          LL_DAC_SetOutputConnection\n
1113   *         CR       MODE2          LL_DAC_SetOutputConnection
1114   * @param  DACx DAC instance
1115   * @param  DAC_Channel This parameter can be one of the following values:
1116   *         @arg @ref LL_DAC_CHANNEL_1
1117   *         @arg @ref LL_DAC_CHANNEL_2
1118   * @param  OutputConnection This parameter can be one of the following values:
1119   *         @arg @ref LL_DAC_OUTPUT_CONNECT_GPIO
1120   *         @arg @ref LL_DAC_OUTPUT_CONNECT_INTERNAL
1121   * @retval None
1122   */
1123 __STATIC_INLINE void LL_DAC_SetOutputConnection(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t OutputConnection)
1124 {
1125   MODIFY_REG(DACx->MCR,
1126              (uint32_t)DAC_MCR_MODE1_0 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1127              OutputConnection << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1128 }
1129 
1130 /**
1131   * @brief  Get the output connection for the selected DAC channel.
1132   * @note   On this STM32 series, output connection depends on output mode (normal or
1133   *         sample and hold) and output buffer state.
1134   *         - if output connection is set to internal path and output buffer
1135   *           is enabled (whatever output mode):
1136   *           output connection is also connected to GPIO pin
1137   *           (both connections to GPIO pin and internal path).
1138   *         - if output connection is set to GPIO pin, output buffer
1139   *           is disabled, output mode set to sample and hold:
1140   *           output connection is also connected to internal path
1141   *           (both connections to GPIO pin and internal path).
1142   * @rmtoll CR       MODE1          LL_DAC_GetOutputConnection\n
1143   *         CR       MODE2          LL_DAC_GetOutputConnection
1144   * @param  DACx DAC instance
1145   * @param  DAC_Channel This parameter can be one of the following values:
1146   *         @arg @ref LL_DAC_CHANNEL_1
1147   *         @arg @ref LL_DAC_CHANNEL_2
1148   * @retval Returned value can be one of the following values:
1149   *         @arg @ref LL_DAC_OUTPUT_CONNECT_GPIO
1150   *         @arg @ref LL_DAC_OUTPUT_CONNECT_INTERNAL
1151   */
1152 __STATIC_INLINE uint32_t LL_DAC_GetOutputConnection(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1153 {
1154   return (uint32_t)(READ_BIT(DACx->MCR, (uint32_t)DAC_MCR_MODE1_0 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1155                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
1156                    );
1157 }
1158 
1159 /**
1160   * @brief  Set the sample-and-hold timing for the selected DAC channel:
1161   *         sample time
1162   * @note   Sample time must be set when DAC channel is disabled
1163   *         or during DAC operation when DAC channel flag BWSTx is reset,
1164   *         otherwise the setting is ignored.
1165   *         Check BWSTx flag state using function "LL_DAC_IsActiveFlag_BWSTx()".
1166   * @rmtoll SHSR1    TSAMPLE1       LL_DAC_SetSampleAndHoldSampleTime\n
1167   *         SHSR2    TSAMPLE2       LL_DAC_SetSampleAndHoldSampleTime
1168   * @param  DACx DAC instance
1169   * @param  DAC_Channel This parameter can be one of the following values:
1170   *         @arg @ref LL_DAC_CHANNEL_1
1171   *         @arg @ref LL_DAC_CHANNEL_2
1172   * @param  SampleTime Value between Min_Data=0x000 and Max_Data=0x3FF
1173   * @retval None
1174   */
1175 __STATIC_INLINE void LL_DAC_SetSampleAndHoldSampleTime(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t SampleTime)
1176 {
1177   __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->SHSR1, (DAC_Channel >> DAC_REG_SHSRX_REGOFFSET_BITOFFSET_POS)
1178                                              & DAC_REG_SHSRX_REGOFFSET_MASK_POSBIT0);
1179 
1180   MODIFY_REG(*preg, DAC_SHSR1_TSAMPLE1, SampleTime);
1181 }
1182 
1183 /**
1184   * @brief  Get the sample-and-hold timing for the selected DAC channel:
1185   *         sample time
1186   * @rmtoll SHSR1    TSAMPLE1       LL_DAC_GetSampleAndHoldSampleTime\n
1187   *         SHSR2    TSAMPLE2       LL_DAC_GetSampleAndHoldSampleTime
1188   * @param  DACx DAC instance
1189   * @param  DAC_Channel This parameter can be one of the following values:
1190   *         @arg @ref LL_DAC_CHANNEL_1
1191   *         @arg @ref LL_DAC_CHANNEL_2
1192   * @retval Value between Min_Data=0x000 and Max_Data=0x3FF
1193   */
1194 __STATIC_INLINE uint32_t LL_DAC_GetSampleAndHoldSampleTime(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1195 {
1196   __IO uint32_t const *preg = __DAC_PTR_REG_OFFSET(DACx->SHSR1, (DAC_Channel >> DAC_REG_SHSRX_REGOFFSET_BITOFFSET_POS)
1197                                                    & DAC_REG_SHSRX_REGOFFSET_MASK_POSBIT0);
1198 
1199   return (uint32_t) READ_BIT(*preg, DAC_SHSR1_TSAMPLE1);
1200 }
1201 
1202 /**
1203   * @brief  Set the sample-and-hold timing for the selected DAC channel:
1204   *         hold time
1205   * @rmtoll SHHR     THOLD1         LL_DAC_SetSampleAndHoldHoldTime\n
1206   *         SHHR     THOLD2         LL_DAC_SetSampleAndHoldHoldTime
1207   * @param  DACx DAC instance
1208   * @param  DAC_Channel This parameter can be one of the following values:
1209   *         @arg @ref LL_DAC_CHANNEL_1
1210   *         @arg @ref LL_DAC_CHANNEL_2
1211   * @param  HoldTime Value between Min_Data=0x000 and Max_Data=0x3FF
1212   * @retval None
1213   */
1214 __STATIC_INLINE void LL_DAC_SetSampleAndHoldHoldTime(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t HoldTime)
1215 {
1216   MODIFY_REG(DACx->SHHR,
1217              DAC_SHHR_THOLD1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1218              HoldTime << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1219 }
1220 
1221 /**
1222   * @brief  Get the sample-and-hold timing for the selected DAC channel:
1223   *         hold time
1224   * @rmtoll SHHR     THOLD1         LL_DAC_GetSampleAndHoldHoldTime\n
1225   *         SHHR     THOLD2         LL_DAC_GetSampleAndHoldHoldTime
1226   * @param  DACx DAC instance
1227   * @param  DAC_Channel This parameter can be one of the following values:
1228   *         @arg @ref LL_DAC_CHANNEL_1
1229   *         @arg @ref LL_DAC_CHANNEL_2
1230   * @retval Value between Min_Data=0x000 and Max_Data=0x3FF
1231   */
1232 __STATIC_INLINE uint32_t LL_DAC_GetSampleAndHoldHoldTime(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1233 {
1234   return (uint32_t)(READ_BIT(DACx->SHHR, DAC_SHHR_THOLD1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1235                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
1236                    );
1237 }
1238 
1239 /**
1240   * @brief  Set the sample-and-hold timing for the selected DAC channel:
1241   *         refresh time
1242   * @rmtoll SHRR     TREFRESH1      LL_DAC_SetSampleAndHoldRefreshTime\n
1243   *         SHRR     TREFRESH2      LL_DAC_SetSampleAndHoldRefreshTime
1244   * @param  DACx DAC instance
1245   * @param  DAC_Channel This parameter can be one of the following values:
1246   *         @arg @ref LL_DAC_CHANNEL_1
1247   *         @arg @ref LL_DAC_CHANNEL_2
1248   * @param  RefreshTime Value between Min_Data=0x00 and Max_Data=0xFF
1249   * @retval None
1250   */
1251 __STATIC_INLINE void LL_DAC_SetSampleAndHoldRefreshTime(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t RefreshTime)
1252 {
1253   MODIFY_REG(DACx->SHRR,
1254              DAC_SHRR_TREFRESH1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK),
1255              RefreshTime << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1256 }
1257 
1258 /**
1259   * @brief  Get the sample-and-hold timing for the selected DAC channel:
1260   *         refresh time
1261   * @rmtoll SHRR     TREFRESH1      LL_DAC_GetSampleAndHoldRefreshTime\n
1262   *         SHRR     TREFRESH2      LL_DAC_GetSampleAndHoldRefreshTime
1263   * @param  DACx DAC instance
1264   * @param  DAC_Channel This parameter can be one of the following values:
1265   *         @arg @ref LL_DAC_CHANNEL_1
1266   *         @arg @ref LL_DAC_CHANNEL_2
1267   * @retval Value between Min_Data=0x00 and Max_Data=0xFF
1268   */
1269 __STATIC_INLINE uint32_t LL_DAC_GetSampleAndHoldRefreshTime(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1270 {
1271   return (uint32_t)(READ_BIT(DACx->SHRR, DAC_SHRR_TREFRESH1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1272                     >> (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
1273                    );
1274 }
1275 
1276 /**
1277   * @}
1278   */
1279 
1280 /** @defgroup DAC_LL_EF_DMA_Management DMA Management
1281   * @ingroup RTEMSBSPsARMSTM32H7
1282   * @{
1283   */
1284 
1285 /**
1286   * @brief  Enable DAC DMA transfer request of the selected channel.
1287   * @note   To configure DMA source address (peripheral address),
1288   *         use function @ref LL_DAC_DMA_GetRegAddr().
1289   * @rmtoll CR       DMAEN1         LL_DAC_EnableDMAReq\n
1290   *         CR       DMAEN2         LL_DAC_EnableDMAReq
1291   * @param  DACx DAC instance
1292   * @param  DAC_Channel This parameter can be one of the following values:
1293   *         @arg @ref LL_DAC_CHANNEL_1
1294   *         @arg @ref LL_DAC_CHANNEL_2
1295   * @retval None
1296   */
1297 __STATIC_INLINE void LL_DAC_EnableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1298 {
1299   SET_BIT(DACx->CR,
1300           DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1301 }
1302 
1303 /**
1304   * @brief  Disable DAC DMA transfer request of the selected channel.
1305   * @note   To configure DMA source address (peripheral address),
1306   *         use function @ref LL_DAC_DMA_GetRegAddr().
1307   * @rmtoll CR       DMAEN1         LL_DAC_DisableDMAReq\n
1308   *         CR       DMAEN2         LL_DAC_DisableDMAReq
1309   * @param  DACx DAC instance
1310   * @param  DAC_Channel This parameter can be one of the following values:
1311   *         @arg @ref LL_DAC_CHANNEL_1
1312   *         @arg @ref LL_DAC_CHANNEL_2
1313   * @retval None
1314   */
1315 __STATIC_INLINE void LL_DAC_DisableDMAReq(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1316 {
1317   CLEAR_BIT(DACx->CR,
1318             DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1319 }
1320 
1321 /**
1322   * @brief  Get DAC DMA transfer request state of the selected channel.
1323   *         (0: DAC DMA transfer request is disabled, 1: DAC DMA transfer request is enabled)
1324   * @rmtoll CR       DMAEN1         LL_DAC_IsDMAReqEnabled\n
1325   *         CR       DMAEN2         LL_DAC_IsDMAReqEnabled
1326   * @param  DACx DAC instance
1327   * @param  DAC_Channel This parameter can be one of the following values:
1328   *         @arg @ref LL_DAC_CHANNEL_1
1329   *         @arg @ref LL_DAC_CHANNEL_2
1330   * @retval State of bit (1 or 0).
1331   */
1332 __STATIC_INLINE uint32_t LL_DAC_IsDMAReqEnabled(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1333 {
1334   return ((READ_BIT(DACx->CR,
1335                     DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1336            == (DAC_CR_DMAEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
1337 }
1338 
1339 /**
1340   * @brief  Function to help to configure DMA transfer to DAC: retrieve the
1341   *         DAC register address from DAC instance and a list of DAC registers
1342   *         intended to be used (most commonly) with DMA transfer.
1343   * @note   These DAC registers are data holding registers:
1344   *         when DAC conversion is requested, DAC generates a DMA transfer
1345   *         request to have data available in DAC data holding registers.
1346   * @note   This macro is intended to be used with LL DMA driver, refer to
1347   *         function "LL_DMA_ConfigAddresses()".
1348   *         Example:
1349   *           LL_DMA_ConfigAddresses(DMA1,
1350   *                                  LL_DMA_CHANNEL_1,
1351   *                                  (uint32_t)&< array or variable >,
1352   *                                  LL_DAC_DMA_GetRegAddr(DAC1, LL_DAC_CHANNEL_1,
1353   *                                  LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED),
1354   *                                  LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
1355   * @rmtoll DHR12R1  DACC1DHR       LL_DAC_DMA_GetRegAddr\n
1356   *         DHR12L1  DACC1DHR       LL_DAC_DMA_GetRegAddr\n
1357   *         DHR8R1   DACC1DHR       LL_DAC_DMA_GetRegAddr\n
1358   *         DHR12R2  DACC2DHR       LL_DAC_DMA_GetRegAddr\n
1359   *         DHR12L2  DACC2DHR       LL_DAC_DMA_GetRegAddr\n
1360   *         DHR8R2   DACC2DHR       LL_DAC_DMA_GetRegAddr
1361   * @param  DACx DAC instance
1362   * @param  DAC_Channel This parameter can be one of the following values:
1363   *         @arg @ref LL_DAC_CHANNEL_1
1364   *         @arg @ref LL_DAC_CHANNEL_2
1365   * @param  Register This parameter can be one of the following values:
1366   *         @arg @ref LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED
1367   *         @arg @ref LL_DAC_DMA_REG_DATA_12BITS_LEFT_ALIGNED
1368   *         @arg @ref LL_DAC_DMA_REG_DATA_8BITS_RIGHT_ALIGNED
1369   * @retval DAC register address
1370   */
1371 __STATIC_INLINE uint32_t LL_DAC_DMA_GetRegAddr(const DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Register)
1372 {
1373   /* Retrieve address of register DHR12Rx, DHR12Lx or DHR8Rx depending on     */
1374   /* DAC channel selected.                                                    */
1375   return ((uint32_t)(__DAC_PTR_REG_OFFSET((DACx)->DHR12R1, ((DAC_Channel >> (Register & 0x1FUL))
1376                                                             & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0))));
1377 }
1378 /**
1379   * @}
1380   */
1381 
1382 /** @defgroup DAC_LL_EF_Operation Operation on DAC channels
1383   * @ingroup RTEMSBSPsARMSTM32H7
1384   * @{
1385   */
1386 
1387 /**
1388   * @brief  Enable DAC selected channel.
1389   * @rmtoll CR       EN1            LL_DAC_Enable\n
1390   *         CR       EN2            LL_DAC_Enable
1391   * @note   After enable from off state, DAC channel requires a delay
1392   *         for output voltage to reach accuracy +/- 1 LSB.
1393   *         Refer to device datasheet, parameter "tWAKEUP".
1394   * @param  DACx DAC instance
1395   * @param  DAC_Channel This parameter can be one of the following values:
1396   *         @arg @ref LL_DAC_CHANNEL_1
1397   *         @arg @ref LL_DAC_CHANNEL_2
1398   * @retval None
1399   */
1400 __STATIC_INLINE void LL_DAC_Enable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1401 {
1402   SET_BIT(DACx->CR,
1403           DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1404 }
1405 
1406 /**
1407   * @brief  Disable DAC selected channel.
1408   * @rmtoll CR       EN1            LL_DAC_Disable\n
1409   *         CR       EN2            LL_DAC_Disable
1410   * @param  DACx DAC instance
1411   * @param  DAC_Channel This parameter can be one of the following values:
1412   *         @arg @ref LL_DAC_CHANNEL_1
1413   *         @arg @ref LL_DAC_CHANNEL_2
1414   * @retval None
1415   */
1416 __STATIC_INLINE void LL_DAC_Disable(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1417 {
1418   CLEAR_BIT(DACx->CR,
1419             DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1420 }
1421 
1422 /**
1423   * @brief  Get DAC enable state of the selected channel.
1424   *         (0: DAC channel is disabled, 1: DAC channel is enabled)
1425   * @rmtoll CR       EN1            LL_DAC_IsEnabled\n
1426   *         CR       EN2            LL_DAC_IsEnabled
1427   * @param  DACx DAC instance
1428   * @param  DAC_Channel This parameter can be one of the following values:
1429   *         @arg @ref LL_DAC_CHANNEL_1
1430   *         @arg @ref LL_DAC_CHANNEL_2
1431   * @retval State of bit (1 or 0).
1432   */
1433 __STATIC_INLINE uint32_t LL_DAC_IsEnabled(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1434 {
1435   return ((READ_BIT(DACx->CR,
1436                     DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1437            == (DAC_CR_EN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
1438 }
1439 
1440 /**
1441   * @brief  Enable DAC trigger of the selected channel.
1442   * @note   - If DAC trigger is disabled, DAC conversion is performed
1443   *           automatically once the data holding register is updated,
1444   *           using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
1445   *           @ref LL_DAC_ConvertData12RightAligned(), ...
1446   *         - If DAC trigger is enabled, DAC conversion is performed
1447   *           only when a hardware of software trigger event is occurring.
1448   *           Select trigger source using
1449   *           function @ref LL_DAC_SetTriggerSource().
1450   * @rmtoll CR       TEN1           LL_DAC_EnableTrigger\n
1451   *         CR       TEN2           LL_DAC_EnableTrigger
1452   * @param  DACx DAC instance
1453   * @param  DAC_Channel This parameter can be one of the following values:
1454   *         @arg @ref LL_DAC_CHANNEL_1
1455   *         @arg @ref LL_DAC_CHANNEL_2
1456   * @retval None
1457   */
1458 __STATIC_INLINE void LL_DAC_EnableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1459 {
1460   SET_BIT(DACx->CR,
1461           DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1462 }
1463 
1464 /**
1465   * @brief  Disable DAC trigger of the selected channel.
1466   * @rmtoll CR       TEN1           LL_DAC_DisableTrigger\n
1467   *         CR       TEN2           LL_DAC_DisableTrigger
1468   * @param  DACx DAC instance
1469   * @param  DAC_Channel This parameter can be one of the following values:
1470   *         @arg @ref LL_DAC_CHANNEL_1
1471   *         @arg @ref LL_DAC_CHANNEL_2
1472   * @retval None
1473   */
1474 __STATIC_INLINE void LL_DAC_DisableTrigger(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1475 {
1476   CLEAR_BIT(DACx->CR,
1477             DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK));
1478 }
1479 
1480 /**
1481   * @brief  Get DAC trigger state of the selected channel.
1482   *         (0: DAC trigger is disabled, 1: DAC trigger is enabled)
1483   * @rmtoll CR       TEN1           LL_DAC_IsTriggerEnabled\n
1484   *         CR       TEN2           LL_DAC_IsTriggerEnabled
1485   * @param  DACx DAC instance
1486   * @param  DAC_Channel This parameter can be one of the following values:
1487   *         @arg @ref LL_DAC_CHANNEL_1
1488   *         @arg @ref LL_DAC_CHANNEL_2
1489   * @retval State of bit (1 or 0).
1490   */
1491 __STATIC_INLINE uint32_t LL_DAC_IsTriggerEnabled(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1492 {
1493   return ((READ_BIT(DACx->CR,
1494                     DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))
1495            == (DAC_CR_TEN1 << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK))) ? 1UL : 0UL);
1496 }
1497 
1498 /**
1499   * @brief  Trig DAC conversion by software for the selected DAC channel.
1500   * @note   Preliminarily, DAC trigger must be set to software trigger
1501   *         using function
1502   *           @ref LL_DAC_Init()
1503   *           @ref LL_DAC_SetTriggerSource()
1504   *         with parameter "LL_DAC_TRIGGER_SOFTWARE".
1505   *         and DAC trigger must be enabled using
1506   *         function @ref LL_DAC_EnableTrigger().
1507   * @note   For devices featuring DAC with 2 channels: this function
1508   *         can perform a SW start of both DAC channels simultaneously.
1509   *         Two channels can be selected as parameter.
1510   *         Example: (LL_DAC_CHANNEL_1 | LL_DAC_CHANNEL_2)
1511   * @rmtoll SWTRIGR  SWTRIG1        LL_DAC_TrigSWConversion\n
1512   *         SWTRIGR  SWTRIG2        LL_DAC_TrigSWConversion
1513   * @param  DACx DAC instance
1514   * @param  DAC_Channel  This parameter can a combination of the following values:
1515   *         @arg @ref LL_DAC_CHANNEL_1
1516   *         @arg @ref LL_DAC_CHANNEL_2
1517   * @retval None
1518   */
1519 __STATIC_INLINE void LL_DAC_TrigSWConversion(DAC_TypeDef *DACx, uint32_t DAC_Channel)
1520 {
1521   SET_BIT(DACx->SWTRIGR,
1522           (DAC_Channel & DAC_SWTR_CHX_MASK));
1523 }
1524 
1525 /**
1526   * @brief  Set the data to be loaded in the data holding register
1527   *         in format 12 bits left alignment (LSB aligned on bit 0),
1528   *         for the selected DAC channel.
1529   * @rmtoll DHR12R1  DACC1DHR       LL_DAC_ConvertData12RightAligned\n
1530   *         DHR12R2  DACC2DHR       LL_DAC_ConvertData12RightAligned
1531   * @param  DACx DAC instance
1532   * @param  DAC_Channel This parameter can be one of the following values:
1533   *         @arg @ref LL_DAC_CHANNEL_1
1534   *         @arg @ref LL_DAC_CHANNEL_2
1535   * @param  Data Value between Min_Data=0x000 and Max_Data=0xFFF
1536   * @retval None
1537   */
1538 __STATIC_INLINE void LL_DAC_ConvertData12RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1539 {
1540   __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12RX_REGOFFSET_BITOFFSET_POS)
1541                                              & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
1542 
1543   MODIFY_REG(*preg, DAC_DHR12R1_DACC1DHR, Data);
1544 }
1545 
1546 /**
1547   * @brief  Set the data to be loaded in the data holding register
1548   *         in format 12 bits left alignment (MSB aligned on bit 15),
1549   *         for the selected DAC channel.
1550   * @rmtoll DHR12L1  DACC1DHR       LL_DAC_ConvertData12LeftAligned\n
1551   *         DHR12L2  DACC2DHR       LL_DAC_ConvertData12LeftAligned
1552   * @param  DACx DAC instance
1553   * @param  DAC_Channel This parameter can be one of the following values:
1554   *         @arg @ref LL_DAC_CHANNEL_1
1555   *         @arg @ref LL_DAC_CHANNEL_2
1556   * @param  Data Value between Min_Data=0x000 and Max_Data=0xFFF
1557   * @retval None
1558   */
1559 __STATIC_INLINE void LL_DAC_ConvertData12LeftAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1560 {
1561   __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR12LX_REGOFFSET_BITOFFSET_POS)
1562                                              & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
1563 
1564   MODIFY_REG(*preg, DAC_DHR12L1_DACC1DHR, Data);
1565 }
1566 
1567 /**
1568   * @brief  Set the data to be loaded in the data holding register
1569   *         in format 8 bits left alignment (LSB aligned on bit 0),
1570   *         for the selected DAC channel.
1571   * @rmtoll DHR8R1   DACC1DHR       LL_DAC_ConvertData8RightAligned\n
1572   *         DHR8R2   DACC2DHR       LL_DAC_ConvertData8RightAligned
1573   * @param  DACx DAC instance
1574   * @param  DAC_Channel This parameter can be one of the following values:
1575   *         @arg @ref LL_DAC_CHANNEL_1
1576   *         @arg @ref LL_DAC_CHANNEL_2
1577   * @param  Data Value between Min_Data=0x00 and Max_Data=0xFF
1578   * @retval None
1579   */
1580 __STATIC_INLINE void LL_DAC_ConvertData8RightAligned(DAC_TypeDef *DACx, uint32_t DAC_Channel, uint32_t Data)
1581 {
1582   __IO uint32_t *preg = __DAC_PTR_REG_OFFSET(DACx->DHR12R1, (DAC_Channel >> DAC_REG_DHR8RX_REGOFFSET_BITOFFSET_POS)
1583                                              & DAC_REG_DHR_REGOFFSET_MASK_POSBIT0);
1584 
1585   MODIFY_REG(*preg, DAC_DHR8R1_DACC1DHR, Data);
1586 }
1587 
1588 
1589 /**
1590   * @brief  Set the data to be loaded in the data holding register
1591   *         in format 12 bits left alignment (LSB aligned on bit 0),
1592   *         for both DAC channels.
1593   * @rmtoll DHR12RD  DACC1DHR       LL_DAC_ConvertDualData12RightAligned\n
1594   *         DHR12RD  DACC2DHR       LL_DAC_ConvertDualData12RightAligned
1595   * @param  DACx DAC instance
1596   * @param  DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
1597   * @param  DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
1598   * @retval None
1599   */
1600 __STATIC_INLINE void LL_DAC_ConvertDualData12RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
1601                                                           uint32_t DataChannel2)
1602 {
1603   MODIFY_REG(DACx->DHR12RD,
1604              (DAC_DHR12RD_DACC2DHR | DAC_DHR12RD_DACC1DHR),
1605              ((DataChannel2 << DAC_DHR12RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
1606 }
1607 
1608 /**
1609   * @brief  Set the data to be loaded in the data holding register
1610   *         in format 12 bits left alignment (MSB aligned on bit 15),
1611   *         for both DAC channels.
1612   * @rmtoll DHR12LD  DACC1DHR       LL_DAC_ConvertDualData12LeftAligned\n
1613   *         DHR12LD  DACC2DHR       LL_DAC_ConvertDualData12LeftAligned
1614   * @param  DACx DAC instance
1615   * @param  DataChannel1 Value between Min_Data=0x000 and Max_Data=0xFFF
1616   * @param  DataChannel2 Value between Min_Data=0x000 and Max_Data=0xFFF
1617   * @retval None
1618   */
1619 __STATIC_INLINE void LL_DAC_ConvertDualData12LeftAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
1620                                                          uint32_t DataChannel2)
1621 {
1622   /* Note: Data of DAC channel 2 shift value subtracted of 4 because          */
1623   /*       data on 16 bits and DAC channel 2 bits field is on the 12 MSB,     */
1624   /*       the 4 LSB must be taken into account for the shift value.          */
1625   MODIFY_REG(DACx->DHR12LD,
1626              (DAC_DHR12LD_DACC2DHR | DAC_DHR12LD_DACC1DHR),
1627              ((DataChannel2 << (DAC_DHR12LD_DACC2DHR_BITOFFSET_POS - 4U)) | DataChannel1));
1628 }
1629 
1630 /**
1631   * @brief  Set the data to be loaded in the data holding register
1632   *         in format 8 bits left alignment (LSB aligned on bit 0),
1633   *         for both DAC channels.
1634   * @rmtoll DHR8RD  DACC1DHR       LL_DAC_ConvertDualData8RightAligned\n
1635   *         DHR8RD  DACC2DHR       LL_DAC_ConvertDualData8RightAligned
1636   * @param  DACx DAC instance
1637   * @param  DataChannel1 Value between Min_Data=0x00 and Max_Data=0xFF
1638   * @param  DataChannel2 Value between Min_Data=0x00 and Max_Data=0xFF
1639   * @retval None
1640   */
1641 __STATIC_INLINE void LL_DAC_ConvertDualData8RightAligned(DAC_TypeDef *DACx, uint32_t DataChannel1,
1642                                                          uint32_t DataChannel2)
1643 {
1644   MODIFY_REG(DACx->DHR8RD,
1645              (DAC_DHR8RD_DACC2DHR | DAC_DHR8RD_DACC1DHR),
1646              ((DataChannel2 << DAC_DHR8RD_DACC2DHR_BITOFFSET_POS) | DataChannel1));
1647 }
1648 
1649 
1650 /**
1651   * @brief  Retrieve output data currently generated for the selected DAC channel.
1652   * @note   Whatever alignment and resolution settings
1653   *         (using functions "LL_DAC_ConvertData{8; 12}{Right; Left} Aligned()":
1654   *         @ref LL_DAC_ConvertData12RightAligned(), ...),
1655   *         output data format is 12 bits right aligned (LSB aligned on bit 0).
1656   * @rmtoll DOR1     DACC1DOR       LL_DAC_RetrieveOutputData\n
1657   *         DOR2     DACC2DOR       LL_DAC_RetrieveOutputData
1658   * @param  DACx DAC instance
1659   * @param  DAC_Channel This parameter can be one of the following values:
1660   *         @arg @ref LL_DAC_CHANNEL_1
1661   *         @arg @ref LL_DAC_CHANNEL_2
1662   * @retval Value between Min_Data=0x000 and Max_Data=0xFFF
1663   */
1664 __STATIC_INLINE uint32_t LL_DAC_RetrieveOutputData(const DAC_TypeDef *DACx, uint32_t DAC_Channel)
1665 {
1666   __IO uint32_t const *preg = __DAC_PTR_REG_OFFSET(DACx->DOR1, (DAC_Channel >> DAC_REG_DORX_REGOFFSET_BITOFFSET_POS)
1667                                                    & DAC_REG_DORX_REGOFFSET_MASK_POSBIT0);
1668 
1669   return (uint16_t) READ_BIT(*preg, DAC_DOR1_DACC1DOR);
1670 }
1671 
1672 /**
1673   * @}
1674   */
1675 
1676 /** @defgroup DAC_LL_EF_FLAG_Management FLAG Management
1677   * @ingroup RTEMSBSPsARMSTM32H7
1678   * @{
1679   */
1680 
1681 /**
1682   * @brief  Get DAC calibration offset flag for DAC channel 1
1683   * @rmtoll SR       CAL_FLAG1      LL_DAC_IsActiveFlag_CAL1
1684   * @param  DACx DAC instance
1685   * @retval State of bit (1 or 0).
1686   */
1687 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_CAL1(const DAC_TypeDef *DACx)
1688 {
1689   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_CAL1) == (LL_DAC_FLAG_CAL1)) ? 1UL : 0UL);
1690 }
1691 
1692 
1693 /**
1694   * @brief  Get DAC calibration offset flag for DAC channel 2
1695   * @rmtoll SR       CAL_FLAG2      LL_DAC_IsActiveFlag_CAL2
1696   * @param  DACx DAC instance
1697   * @retval State of bit (1 or 0).
1698   */
1699 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_CAL2(const DAC_TypeDef *DACx)
1700 {
1701   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_CAL2) == (LL_DAC_FLAG_CAL2)) ? 1UL : 0UL);
1702 }
1703 
1704 
1705 /**
1706   * @brief  Get DAC busy writing sample time flag for DAC channel 1
1707   * @rmtoll SR       BWST1          LL_DAC_IsActiveFlag_BWST1
1708   * @param  DACx DAC instance
1709   * @retval State of bit (1 or 0).
1710   */
1711 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_BWST1(const DAC_TypeDef *DACx)
1712 {
1713   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_BWST1) == (LL_DAC_FLAG_BWST1)) ? 1UL : 0UL);
1714 }
1715 
1716 /**
1717   * @brief  Get DAC busy writing sample time flag for DAC channel 2
1718   * @rmtoll SR       BWST2          LL_DAC_IsActiveFlag_BWST2
1719   * @param  DACx DAC instance
1720   * @retval State of bit (1 or 0).
1721   */
1722 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_BWST2(const DAC_TypeDef *DACx)
1723 {
1724   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_BWST2) == (LL_DAC_FLAG_BWST2)) ? 1UL : 0UL);
1725 }
1726 
1727 
1728 /**
1729   * @brief  Get DAC underrun flag for DAC channel 1
1730   * @rmtoll SR       DMAUDR1        LL_DAC_IsActiveFlag_DMAUDR1
1731   * @param  DACx DAC instance
1732   * @retval State of bit (1 or 0).
1733   */
1734 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR1(const DAC_TypeDef *DACx)
1735 {
1736   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR1) == (LL_DAC_FLAG_DMAUDR1)) ? 1UL : 0UL);
1737 }
1738 
1739 
1740 /**
1741   * @brief  Get DAC underrun flag for DAC channel 2
1742   * @rmtoll SR       DMAUDR2        LL_DAC_IsActiveFlag_DMAUDR2
1743   * @param  DACx DAC instance
1744   * @retval State of bit (1 or 0).
1745   */
1746 __STATIC_INLINE uint32_t LL_DAC_IsActiveFlag_DMAUDR2(const DAC_TypeDef *DACx)
1747 {
1748   return ((READ_BIT(DACx->SR, LL_DAC_FLAG_DMAUDR2) == (LL_DAC_FLAG_DMAUDR2)) ? 1UL : 0UL);
1749 }
1750 
1751 
1752 /**
1753   * @brief  Clear DAC underrun flag for DAC channel 1
1754   * @rmtoll SR       DMAUDR1        LL_DAC_ClearFlag_DMAUDR1
1755   * @param  DACx DAC instance
1756   * @retval None
1757   */
1758 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR1(DAC_TypeDef *DACx)
1759 {
1760   WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR1);
1761 }
1762 
1763 
1764 /**
1765   * @brief  Clear DAC underrun flag for DAC channel 2
1766   * @rmtoll SR       DMAUDR2        LL_DAC_ClearFlag_DMAUDR2
1767   * @param  DACx DAC instance
1768   * @retval None
1769   */
1770 __STATIC_INLINE void LL_DAC_ClearFlag_DMAUDR2(DAC_TypeDef *DACx)
1771 {
1772   WRITE_REG(DACx->SR, LL_DAC_FLAG_DMAUDR2);
1773 }
1774 
1775 
1776 /**
1777   * @}
1778   */
1779 
1780 /** @defgroup DAC_LL_EF_IT_Management IT management
1781   * @ingroup RTEMSBSPsARMSTM32H7
1782   * @{
1783   */
1784 
1785 /**
1786   * @brief  Enable DMA underrun interrupt for DAC channel 1
1787   * @rmtoll CR       DMAUDRIE1      LL_DAC_EnableIT_DMAUDR1
1788   * @param  DACx DAC instance
1789   * @retval None
1790   */
1791 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR1(DAC_TypeDef *DACx)
1792 {
1793   SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
1794 }
1795 
1796 
1797 /**
1798   * @brief  Enable DMA underrun interrupt for DAC channel 2
1799   * @rmtoll CR       DMAUDRIE2      LL_DAC_EnableIT_DMAUDR2
1800   * @param  DACx DAC instance
1801   * @retval None
1802   */
1803 __STATIC_INLINE void LL_DAC_EnableIT_DMAUDR2(DAC_TypeDef *DACx)
1804 {
1805   SET_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
1806 }
1807 
1808 
1809 /**
1810   * @brief  Disable DMA underrun interrupt for DAC channel 1
1811   * @rmtoll CR       DMAUDRIE1      LL_DAC_DisableIT_DMAUDR1
1812   * @param  DACx DAC instance
1813   * @retval None
1814   */
1815 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR1(DAC_TypeDef *DACx)
1816 {
1817   CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1);
1818 }
1819 
1820 
1821 /**
1822   * @brief  Disable DMA underrun interrupt for DAC channel 2
1823   * @rmtoll CR       DMAUDRIE2      LL_DAC_DisableIT_DMAUDR2
1824   * @param  DACx DAC instance
1825   * @retval None
1826   */
1827 __STATIC_INLINE void LL_DAC_DisableIT_DMAUDR2(DAC_TypeDef *DACx)
1828 {
1829   CLEAR_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2);
1830 }
1831 
1832 
1833 /**
1834   * @brief  Get DMA underrun interrupt for DAC channel 1
1835   * @rmtoll CR       DMAUDRIE1      LL_DAC_IsEnabledIT_DMAUDR1
1836   * @param  DACx DAC instance
1837   * @retval State of bit (1 or 0).
1838   */
1839 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR1(const DAC_TypeDef *DACx)
1840 {
1841   return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE1) == (LL_DAC_IT_DMAUDRIE1)) ? 1UL : 0UL);
1842 }
1843 
1844 
1845 /**
1846   * @brief  Get DMA underrun interrupt for DAC channel 2
1847   * @rmtoll CR       DMAUDRIE2      LL_DAC_IsEnabledIT_DMAUDR2
1848   * @param  DACx DAC instance
1849   * @retval State of bit (1 or 0).
1850   */
1851 __STATIC_INLINE uint32_t LL_DAC_IsEnabledIT_DMAUDR2(const DAC_TypeDef *DACx)
1852 {
1853   return ((READ_BIT(DACx->CR, LL_DAC_IT_DMAUDRIE2) == (LL_DAC_IT_DMAUDRIE2)) ? 1UL : 0UL);
1854 }
1855 
1856 
1857 /**
1858   * @}
1859   */
1860 
1861 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
1862 /** @defgroup DAC_LL_EF_Init Initialization and de-initialization functions
1863   * @ingroup RTEMSBSPsARMSTM32H7
1864   * @{
1865   */
1866 
1867 ErrorStatus LL_DAC_DeInit(const DAC_TypeDef *DACx);
1868 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, const LL_DAC_InitTypeDef *DAC_InitStruct);
1869 void        LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct);
1870 
1871 /**
1872   * @}
1873   */
1874 #endif /* USE_FULL_LL_DRIVER */
1875 
1876 /**
1877   * @}
1878   */
1879 
1880 /**
1881   * @}
1882   */
1883 
1884 #endif /* DAC1 || DAC2 */
1885 
1886 /**
1887   * @}
1888   */
1889 
1890 #ifdef __cplusplus
1891 }
1892 #endif
1893 
1894 #endif /* STM32H7xx_LL_DAC_H */