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.
 
 
 

1419 lines
65 KiB

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