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.
 
 
 

1441 lines
66 KiB

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