STM32F439xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32f4xx_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 "stm32f4xx_ll_dac.h" 00039 #include "stm32f4xx_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 STM32F4xx_LL_Driver 00048 * @{ 00049 */ 00050 00051 #if defined(DAC) 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 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ 00080 ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ 00081 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ 00082 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ 00083 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ 00084 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ 00085 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ 00086 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ 00087 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ 00088 ) 00089 00090 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \ 00091 ( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \ 00092 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \ 00093 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \ 00094 ) 00095 00096 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_CONFIG__) \ 00097 ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \ 00098 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \ 00099 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \ 00100 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \ 00101 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \ 00102 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \ 00103 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \ 00104 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \ 00105 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \ 00106 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \ 00107 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \ 00108 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0) \ 00109 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \ 00110 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \ 00111 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \ 00112 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \ 00113 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \ 00114 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \ 00115 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \ 00116 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \ 00117 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \ 00118 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \ 00119 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \ 00120 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095) \ 00121 ) 00122 00123 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \ 00124 ( ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \ 00125 || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \ 00126 ) 00127 00128 /** 00129 * @} 00130 */ 00131 00132 00133 /* Private function prototypes -----------------------------------------------*/ 00134 00135 /* Exported functions --------------------------------------------------------*/ 00136 /** @addtogroup DAC_LL_Exported_Functions 00137 * @{ 00138 */ 00139 00140 /** @addtogroup DAC_LL_EF_Init 00141 * @{ 00142 */ 00143 00144 /** 00145 * @brief De-initialize registers of the selected DAC instance 00146 * to their default reset values. 00147 * @param DACx DAC instance 00148 * @retval An ErrorStatus enumeration value: 00149 * - SUCCESS: DAC registers are de-initialized 00150 * - ERROR: not applicable 00151 */ 00152 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx) 00153 { 00154 /* Check the parameters */ 00155 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00156 00157 /* Force reset of DAC1 clock */ 00158 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1); 00159 00160 /* Release reset of DAC1 clock */ 00161 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1); 00162 return SUCCESS; 00163 } 00164 00165 /** 00166 * @brief Initialize some features of DAC instance. 00167 * @note The setting of these parameters by function @ref LL_DAC_Init() 00168 * is conditioned to DAC state: 00169 * DAC instance must be disabled. 00170 * @param DACx DAC instance 00171 * @param DAC_Channel This parameter can be one of the following values: 00172 * @arg @ref LL_DAC_CHANNEL_1 00173 * @arg @ref LL_DAC_CHANNEL_2 (1) 00174 * 00175 * (1) On this STM32 serie, parameter not available on all devices. 00176 * Refer to device datasheet for channels availability. 00177 * @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure 00178 * @retval An ErrorStatus enumeration value: 00179 * - SUCCESS: DAC registers are initialized 00180 * - ERROR: DAC registers are not initialized 00181 */ 00182 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct) 00183 { 00184 ErrorStatus status = SUCCESS; 00185 00186 /* Check the parameters */ 00187 assert_param(IS_DAC_ALL_INSTANCE(DACx)); 00188 assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel)); 00189 assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource)); 00190 assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer)); 00191 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration)); 00192 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00193 { 00194 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGenerationConfig)); 00195 } 00196 00197 /* Note: Hardware constraint (refer to description of this function) */ 00198 /* DAC instance must be disabled. */ 00199 if(LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U) 00200 { 00201 /* Configuration of DAC channel: */ 00202 /* - TriggerSource */ 00203 /* - WaveAutoGeneration */ 00204 /* - OutputBuffer */ 00205 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE) 00206 { 00207 MODIFY_REG(DACx->CR, 00208 ( DAC_CR_TSEL1 00209 | DAC_CR_WAVE1 00210 | DAC_CR_MAMP1 00211 | DAC_CR_BOFF1 00212 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00213 , 00214 ( DAC_InitStruct->TriggerSource 00215 | DAC_InitStruct->WaveAutoGeneration 00216 | DAC_InitStruct->WaveAutoGenerationConfig 00217 | DAC_InitStruct->OutputBuffer 00218 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00219 ); 00220 } 00221 else 00222 { 00223 MODIFY_REG(DACx->CR, 00224 ( DAC_CR_TSEL1 00225 | DAC_CR_WAVE1 00226 | DAC_CR_BOFF1 00227 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00228 , 00229 ( DAC_InitStruct->TriggerSource 00230 | LL_DAC_WAVE_AUTO_GENERATION_NONE 00231 | DAC_InitStruct->OutputBuffer 00232 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK) 00233 ); 00234 } 00235 } 00236 else 00237 { 00238 /* Initialization error: DAC instance is not disabled. */ 00239 status = ERROR; 00240 } 00241 return status; 00242 } 00243 00244 /** 00245 * @brief Set each @ref LL_DAC_InitTypeDef field to default value. 00246 * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure 00247 * whose fields will be set to default values. 00248 * @retval None 00249 */ 00250 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct) 00251 { 00252 /* Set DAC_InitStruct fields to default values */ 00253 DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE; 00254 DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE; 00255 /* Note: Parameter discarded if wave auto generation is disabled, */ 00256 /* set anyway to its default value. */ 00257 DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0; 00258 DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE; 00259 } 00260 00261 /** 00262 * @} 00263 */ 00264 00265 /** 00266 * @} 00267 */ 00268 00269 /** 00270 * @} 00271 */ 00272 00273 #endif /* DAC */ 00274 00275 /** 00276 * @} 00277 */ 00278 00279 #endif /* USE_FULL_LL_DRIVER */ 00280 00281 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/