Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

277 wiersze
12 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f4xx_ll_dac.c
  4. * @author MCD Application Team
  5. * @brief DAC LL module driver
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2016 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. #if defined(USE_FULL_LL_DRIVER)
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "stm32f4xx_ll_dac.h"
  21. #include "stm32f4xx_ll_bus.h"
  22. #ifdef USE_FULL_ASSERT
  23. #include "stm32_assert.h"
  24. #else
  25. #define assert_param(expr) ((void)0U)
  26. #endif /* USE_FULL_ASSERT */
  27. /** @addtogroup STM32F4xx_LL_Driver
  28. * @{
  29. */
  30. #if defined(DAC)
  31. /** @addtogroup DAC_LL DAC
  32. * @{
  33. */
  34. /* Private types -------------------------------------------------------------*/
  35. /* Private variables ---------------------------------------------------------*/
  36. /* Private constants ---------------------------------------------------------*/
  37. /* Private macros ------------------------------------------------------------*/
  38. /** @addtogroup DAC_LL_Private_Macros
  39. * @{
  40. */
  41. #if defined(DAC_CHANNEL2_SUPPORT)
  42. #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__) \
  43. (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \
  44. || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \
  45. )
  46. #else
  47. #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__) \
  48. (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1))
  49. #endif /* DAC_CHANNEL2_SUPPORT */
  50. #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \
  51. (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \
  52. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \
  53. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \
  54. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \
  55. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \
  56. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \
  57. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \
  58. || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \
  59. )
  60. #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \
  61. (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \
  62. || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
  63. || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
  64. )
  65. #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__) \
  66. ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
  67. && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \
  68. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \
  69. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \
  70. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \
  71. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \
  72. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \
  73. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \
  74. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \
  75. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \
  76. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \
  77. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \
  78. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0)) \
  79. ) \
  80. ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
  81. && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \
  82. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \
  83. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \
  84. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \
  85. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \
  86. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \
  87. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \
  88. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \
  89. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \
  90. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \
  91. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \
  92. || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)) \
  93. ) \
  94. )
  95. #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \
  96. (((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \
  97. || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \
  98. )
  99. /**
  100. * @}
  101. */
  102. /* Private function prototypes -----------------------------------------------*/
  103. /* Exported functions --------------------------------------------------------*/
  104. /** @addtogroup DAC_LL_Exported_Functions
  105. * @{
  106. */
  107. /** @addtogroup DAC_LL_EF_Init
  108. * @{
  109. */
  110. /**
  111. * @brief De-initialize registers of the selected DAC instance
  112. * to their default reset values.
  113. * @param DACx DAC instance
  114. * @retval An ErrorStatus enumeration value:
  115. * - SUCCESS: DAC registers are de-initialized
  116. * - ERROR: not applicable
  117. */
  118. ErrorStatus LL_DAC_DeInit(const DAC_TypeDef *DACx)
  119. {
  120. /* Check the parameters */
  121. assert_param(IS_DAC_ALL_INSTANCE(DACx));
  122. /* Force reset of DAC clock */
  123. LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1);
  124. /* Release reset of DAC clock */
  125. LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1);
  126. return SUCCESS;
  127. }
  128. /**
  129. * @brief Initialize some features of DAC channel.
  130. * @note @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel.
  131. * Leaving it ready to be enabled and output:
  132. * a level by calling one of
  133. * @ref LL_DAC_ConvertData12RightAligned
  134. * @ref LL_DAC_ConvertData12LeftAligned
  135. * @ref LL_DAC_ConvertData8RightAligned
  136. * or one of the supported autogenerated wave.
  137. * @note This function allows configuration of:
  138. * - Output mode
  139. * - Trigger
  140. * - Wave generation
  141. * @note The setting of these parameters by function @ref LL_DAC_Init()
  142. * is conditioned to DAC state:
  143. * DAC channel must be disabled.
  144. * @param DACx DAC instance
  145. * @param DAC_Channel This parameter can be one of the following values:
  146. * @arg @ref LL_DAC_CHANNEL_1
  147. * @arg @ref LL_DAC_CHANNEL_2 (1)
  148. *
  149. * (1) On this STM32 series, parameter not available on all devices.
  150. * Refer to device datasheet for channels availability.
  151. * @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
  152. * @retval An ErrorStatus enumeration value:
  153. * - SUCCESS: DAC registers are initialized
  154. * - ERROR: DAC registers are not initialized
  155. */
  156. ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, const LL_DAC_InitTypeDef *DAC_InitStruct)
  157. {
  158. ErrorStatus status = SUCCESS;
  159. /* Check the parameters */
  160. assert_param(IS_DAC_ALL_INSTANCE(DACx));
  161. assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel));
  162. assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
  163. assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
  164. assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
  165. if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  166. {
  167. assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration,
  168. DAC_InitStruct->WaveAutoGenerationConfig));
  169. }
  170. /* Note: Hardware constraint (refer to description of this function) */
  171. /* DAC instance must be disabled. */
  172. if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0UL)
  173. {
  174. /* Configuration of DAC channel: */
  175. /* - TriggerSource */
  176. /* - WaveAutoGeneration */
  177. /* - OutputBuffer */
  178. /* - OutputMode */
  179. if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  180. {
  181. MODIFY_REG(DACx->CR,
  182. (DAC_CR_TSEL1
  183. | DAC_CR_WAVE1
  184. | DAC_CR_MAMP1
  185. | DAC_CR_BOFF1
  186. ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  187. ,
  188. (DAC_InitStruct->TriggerSource
  189. | DAC_InitStruct->WaveAutoGeneration
  190. | DAC_InitStruct->WaveAutoGenerationConfig
  191. | DAC_InitStruct->OutputBuffer
  192. ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  193. );
  194. }
  195. else
  196. {
  197. MODIFY_REG(DACx->CR,
  198. (DAC_CR_TSEL1
  199. | DAC_CR_WAVE1
  200. | DAC_CR_BOFF1
  201. ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  202. ,
  203. (DAC_InitStruct->TriggerSource
  204. | LL_DAC_WAVE_AUTO_GENERATION_NONE
  205. | DAC_InitStruct->OutputBuffer
  206. ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  207. );
  208. }
  209. }
  210. else
  211. {
  212. /* Initialization error: DAC instance is not disabled. */
  213. status = ERROR;
  214. }
  215. return status;
  216. }
  217. /**
  218. * @brief Set each @ref LL_DAC_InitTypeDef field to default value.
  219. * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
  220. * whose fields will be set to default values.
  221. * @retval None
  222. */
  223. void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
  224. {
  225. /* Set DAC_InitStruct fields to default values */
  226. DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE;
  227. DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE;
  228. /* Note: Parameter discarded if wave auto generation is disabled, */
  229. /* set anyway to its default value. */
  230. DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
  231. DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
  232. }
  233. /**
  234. * @}
  235. */
  236. /**
  237. * @}
  238. */
  239. /**
  240. * @}
  241. */
  242. #endif /* DAC */
  243. /**
  244. * @}
  245. */
  246. #endif /* USE_FULL_LL_DRIVER */