训练营PLSR题目
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

1456 satır
68 KiB

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