File indexing completed on 2025-05-11 08:23:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0019
0020
0021 #include "stm32h7xx_ll_dac.h"
0022 #include "stm32h7xx_ll_bus.h"
0023
0024 #ifdef USE_FULL_ASSERT
0025 #include "stm32_assert.h"
0026 #else
0027 #define assert_param(expr) ((void)0U)
0028 #endif
0029
0030
0031
0032
0033
0034 #if defined(DAC1) || defined(DAC2)
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 #define IS_LL_DAC_CHANNEL(__DAC_CHANNEL__) \
0049 (((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \
0050 || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \
0051 )
0052
0053 #if defined (HRTIM1)
0054 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \
0055 (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \
0056 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \
0057 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \
0058 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \
0059 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \
0060 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \
0061 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \
0062 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \
0063 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \
0064 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO1) \
0065 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_HRTIM_TRGO2) \
0066 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \
0067 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \
0068 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \
0069 )
0070 #elif defined (DAC2)
0071 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \
0072 (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \
0073 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \
0074 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \
0075 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \
0076 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \
0077 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \
0078 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \
0079 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \
0080 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \
0081 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \
0082 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \
0083 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \
0084 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM3_OUT) \
0085 )
0086 #else
0087 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \
0088 (((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \
0089 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \
0090 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \
0091 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \
0092 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \
0093 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \
0094 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \
0095 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \
0096 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \
0097 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT) \
0098 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT) \
0099 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \
0100 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM23_TRGO) \
0101 || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM24_TRGO) \
0102 )
0103 #endif
0104
0105 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \
0106 (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \
0107 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
0108 || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
0109 )
0110
0111 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__) \
0112 ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
0113 && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \
0114 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \
0115 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \
0116 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \
0117 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \
0118 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \
0119 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \
0120 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \
0121 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \
0122 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \
0123 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \
0124 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0)) \
0125 ) \
0126 ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
0127 && (((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \
0128 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \
0129 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \
0130 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \
0131 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \
0132 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \
0133 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \
0134 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \
0135 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \
0136 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \
0137 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \
0138 || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)) \
0139 ) \
0140 )
0141
0142 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \
0143 (((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \
0144 || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \
0145 )
0146
0147 #define IS_LL_DAC_OUTPUT_CONNECTION(__OUTPUT_CONNECTION__) \
0148 (((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_GPIO) \
0149 || ((__OUTPUT_CONNECTION__) == LL_DAC_OUTPUT_CONNECT_INTERNAL) \
0150 )
0151
0152 #define IS_LL_DAC_OUTPUT_MODE(__OUTPUT_MODE__) \
0153 (((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_NORMAL) \
0154 || ((__OUTPUT_MODE__) == LL_DAC_OUTPUT_MODE_SAMPLE_AND_HOLD) \
0155 )
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181 ErrorStatus LL_DAC_DeInit(const DAC_TypeDef *DACx)
0182 {
0183
0184 assert_param(IS_DAC_ALL_INSTANCE(DACx));
0185
0186 if (DACx == DAC1)
0187 {
0188
0189 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC12);
0190
0191
0192 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC12);
0193 }
0194 #if defined (DAC2)
0195 else
0196 {
0197
0198 LL_APB4_GRP1_ForceReset(LL_APB4_GRP1_PERIPH_DAC2);
0199
0200
0201 LL_APB4_GRP1_ReleaseReset(LL_APB4_GRP1_PERIPH_DAC2);
0202 }
0203 #endif
0204
0205 return SUCCESS;
0206 }
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, const LL_DAC_InitTypeDef *DAC_InitStruct)
0234 {
0235 ErrorStatus status = SUCCESS;
0236
0237
0238 assert_param(IS_DAC_ALL_INSTANCE(DACx));
0239 assert_param(IS_LL_DAC_CHANNEL(DAC_Channel));
0240 assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
0241 assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
0242 assert_param(IS_LL_DAC_OUTPUT_CONNECTION(DAC_InitStruct->OutputConnection));
0243 assert_param(IS_LL_DAC_OUTPUT_MODE(DAC_InitStruct->OutputMode));
0244 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
0245 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
0246 {
0247 assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration,
0248 DAC_InitStruct->WaveAutoGenerationConfig));
0249 }
0250
0251
0252
0253 if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0UL)
0254 {
0255
0256
0257
0258
0259
0260
0261 if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
0262 {
0263 MODIFY_REG(DACx->CR,
0264 (DAC_CR_TSEL1
0265 | DAC_CR_WAVE1
0266 | DAC_CR_MAMP1
0267 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0268 ,
0269 (DAC_InitStruct->TriggerSource
0270 | DAC_InitStruct->WaveAutoGeneration
0271 | DAC_InitStruct->WaveAutoGenerationConfig
0272 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0273 );
0274 }
0275 else
0276 {
0277 MODIFY_REG(DACx->CR,
0278 (DAC_CR_TSEL1
0279 | DAC_CR_WAVE1
0280 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0281 ,
0282 (DAC_InitStruct->TriggerSource
0283 | LL_DAC_WAVE_AUTO_GENERATION_NONE
0284 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0285 );
0286 }
0287 MODIFY_REG(DACx->MCR,
0288 (DAC_MCR_MODE1_1
0289 | DAC_MCR_MODE1_0
0290 | DAC_MCR_MODE1_2
0291 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0292 ,
0293 (DAC_InitStruct->OutputBuffer
0294 | DAC_InitStruct->OutputConnection
0295 | DAC_InitStruct->OutputMode
0296 ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
0297 );
0298 }
0299 else
0300 {
0301
0302 status = ERROR;
0303 }
0304 return status;
0305 }
0306
0307
0308
0309
0310
0311
0312
0313 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
0314 {
0315
0316 DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE;
0317 DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE;
0318
0319
0320 DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
0321 DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
0322 DAC_InitStruct->OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO;
0323 DAC_InitStruct->OutputMode = LL_DAC_OUTPUT_MODE_NORMAL;
0324 }
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338 #endif
0339
0340
0341
0342
0343
0344 #endif