STM32L486xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_dac.c 00004 * @author MCD Application Team 00005 * @brief DAC LL module driver 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> 00010 * 00011 * Redistribution and use in source and binary forms, with or without modification, 00012 * are permitted provided that the following conditions are met: 00013 * 1. Redistributions of source code must retain the above copyright notice, 00014 * this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright notice, 00016 * this list of conditions and the following disclaimer in the documentation 00017 * and/or other materials provided with the distribution. 00018 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00019 * may be used to endorse or promote products derived from this software 00020 * without specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00023 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00024 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00025 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00026 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00027 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00028 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00030 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00031 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 * 00033 ****************************************************************************** 00034 */ 00035 #if defined(USE_FULL_LL_DRIVER) 00036 00037 /* Includes ------------------------------------------------------------------*/ 00038 #include "stm32l4xx_ll_dac.h" 00039 #include "stm32l4xx_ll_bus.h" 00040 00041 #ifdef USE_FULL_ASSERT 00042 #include "stm32_assert.h" 00043 #else 00044 #define assert_param(expr) ((void)0U) 00045 #endif 00046 00047 /** @addtogroup STM32L4xx_LL_Driver 00048 * @{ 00049 */ 00050 00051 #if defined (DAC1) 00052 00053 /** @addtogroup DAC_LL DAC 00054 * @{ 00055 */ 00056 00057 /* Private types -------------------------------------------------------------*/ 00058 /* Private variables ---------------------------------------------------------*/ 00059 /* Private constants ---------------------------------------------------------*/ 00060 /* Private macros ------------------------------------------------------------*/ 00061 00062 /** @addtogroup DAC_LL_Private_Macros 00063 * @{ 00064 */ 00065 00066 #if defined(DAC_CHANNEL2_SUPPORT) 00067 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__) \ 00068 ( \ 00069 ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \ 00070 || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \ 00071 ) 00072 #else 00073 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__) \ 00074 ( \ 00075 ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \ 00076 ) 00077 #endif /* DAC_CHANNEL2_SUPPORT */ 00078 00079 #if defined (DAC_CR_TSEL1_3) 00080 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00081 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ 00082 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00083 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00084 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00085 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00086 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00087 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00088 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ 00089 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT_TRGO) \ 00090 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT_TRGO) \ 00091 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00092 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00093 ) 00094 #else 00095 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00096 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00097 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00098 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00099 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00100 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00101 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00102 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00103 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00104 ) 00105 #endif /* DAC_CR_TSEL1_3 */ 00106 00107 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \ 00108 ( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \ 00109 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00110 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00111 ) 00112 00113 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_CONFIG__) \ 00114 ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \ 00115 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \ 00116 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \ 00117 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \ 00118 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \ 00119 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \ 00120 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \ 00121 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \ 00122 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \ 00123 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \ 00124 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \ 00125 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0) \ 00126 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \ 00127 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \ 00128 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \ 00129 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \ 00130 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \ 00131 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \ 00132 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \ 00133 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \ 00134 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \ 00135 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \ 00136 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \ 00137 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095) \ 00138 ) 00139 00140 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \ 00141 ( ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \ 00142 || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \ 00143 ) 00144 00145 #define IS_LL_DAC_OUTPUT_CONNECTION(__OUTPUT_CONNECTION__) \ 00146 ( ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_GPIO) \ 00147 || ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_INTERNAL) \ 00148 ) 00149 00150 #define IS_LL_DAC_OUTPUT_MODE(__OUTPUT_MODE__) \ 00151 ( ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_NORMAL) \ 00152 || ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD) \ 00153 ) 00154 00155 /** 00156 * @} 00157 */ 00158 00159 00160 /* Private function prototypes -----------------------------------------------*/ 00161 00162 /* Exported functions --------------------------------------------------------*/ 00163 /** @addtogroup DAC_LL_Exported_Functions 00164 * @{ 00165 */ 00166 00167 /** @addtogroup DAC_LL_EF_Init 00168 * @{ 00169 */ 00170 00171 /** 00172 * @brief De-initialize registers of the selected DAC instance 00173 * to their default reset values. 00174 * @param DACx DAC instance 00175 * @retval An ErrorStatus enumeration value: 00176 * - SUCCESS: DAC registers are de-initialized 00177 * - ERROR: not applicable 00178 */ 00179 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx) 00180 { 00181 /* Check the parameters */ 00182 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00183 00184 /* Force reset of DAC clock */ 00185 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1); 00186 00187 /* Release reset of DAC clock */ 00188 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1); 00189 00190 return SUCCESS; 00191 } 00192 00193 /** 00194 * @brief Initialize some features of DAC instance. 00195 * @note The setting of these parameters by function @ref LL_DAC_Init() 00196 * is conditioned to DAC state: 00197 * DAC instance must be disabled. 00198 * @param DACx DAC instance 00199 * @param DAC_Channel This parameter can be one of the following values: 00200 * @arg @ref LL_DAC_CHANNEL_1 00201 * @arg @ref LL_DAC_CHANNEL_2 (1) 00202 * 00203 * (1) On this STM32 serie, parameter not available on all devices. 00204 * Refer to device datasheet for channels availability. 00205 * @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure 00206 * @retval An ErrorStatus enumeration value: 00207 * - SUCCESS: DAC registers are initialized 00208 * - ERROR: DAC registers are not initialized 00209 */ 00210 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct) 00211 { 00212 ErrorStatus status = SUCCESS; 00213 00214 /* Check the parameters */ 00215 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00216 assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel)); 00217 assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource)); 00218 assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer)); 00219 assert_param(IS_LL_DAC_OUTPUT_CONNECTION(DAC_InitStruct->OutputConnection)); 00220 assert_param(IS_LL_DAC_OUTPUT_MODE(DAC_InitStruct->OutputMode)); 00221 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration)); 00222 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00223 { 00224 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGenerationConfig)); 00225 } 00226 00227 /* Note: Hardware constraint (refer to description of this function) */ 00228 /* DAC instance must be disabled. */ 00229 if(LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U) 00230 { 00231 /* Configuration of DAC channel: */ 00232 /* - TriggerSource */ 00233 /* - WaveAutoGeneration */ 00234 /* - OutputBuffer */ 00235 /* - OutputConnection */ 00236 /* - OutputMode */ 00237 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00238 { 00239 MODIFY_REG(DACx->CR, 00240 ( DAC_CR_TSEL1 00241 | DAC_CR_WAVE1 00242 | DAC_CR_MAMP1 00243 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00244 , 00245 ( DAC_InitStruct->TriggerSource 00246 | DAC_InitStruct->WaveAutoGeneration 00247 | DAC_InitStruct->WaveAutoGenerationConfig 00248 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00249 ); 00250 } 00251 else 00252 { 00253 MODIFY_REG(DACx->CR, 00254 ( DAC_CR_TSEL1 00255 | DAC_CR_WAVE1 00256 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00257 , 00258 ( DAC_InitStruct->TriggerSource 00259 | LL_DAC_WAVE_AUTO_GENERATION_NONE 00260 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00261 ); 00262 } 00263 00264 MODIFY_REG(DACx->MCR, 00265 ( DAC_MCR_MODE1_1 00266 | DAC_MCR_MODE1_0 00267 | DAC_MCR_MODE1_2 00268 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00269 , 00270 ( DAC_InitStruct->OutputBuffer 00271 | DAC_InitStruct->OutputConnection 00272 | DAC_InitStruct->OutputMode 00273 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00274 ); 00275 } 00276 else 00277 { 00278 /* Initialization error: DAC instance is not disabled. */ 00279 status = ERROR; 00280 } 00281 return status; 00282 } 00283 00284 /** 00285 * @brief Set each @ref LL_DAC_InitTypeDef field to default value. 00286 * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure 00287 * whose fields will be set to default values. 00288 * @retval None 00289 */ 00290 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct) 00291 { 00292 /* Set DAC_InitStruct fields to default values */ 00293 DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE; 00294 DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE; 00295 /* Note: Parameter discarded if wave auto generation is disabled, */ 00296 /* set anyway to its default value. */ 00297 DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0; 00298 DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE; 00299 DAC_InitStruct->OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO; 00300 DAC_InitStruct->OutputMode = LL_DAC_OUTPUT_MODE_NORMAL; 00301 } 00302 00303 /** 00304 * @} 00305 */ 00306 00307 /** 00308 * @} 00309 */ 00310 00311 /** 00312 * @} 00313 */ 00314 00315 #endif /* DAC1 */ 00316 00317 /** 00318 * @} 00319 */ 00320 00321 #endif /* USE_FULL_LL_DRIVER */ 00322 00323 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/