You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1840 lines
86 KiB

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