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.

stm32l1xx_ll_dac.h 59KB

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