stm32f4xx_ll_dac.h 68 KB

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