Subversion Repositories canSerial

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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