stm32l1xx_ll_dac.h 60 KB

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