stm32f1xx_ll_dac.h 62 KB

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