Subversion Repositories FuelGauge

Rev

Details | Last modification | View Log | RSS feed

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