stm32f3xx_ll_dac.h 78 KB

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