]> git.piffa.net Git - arduino/blob - sheets/gyro/GY-52 Three-axis gyroscope sending data /Three-axis gyroscope sending data/GY-52 Test program/STM32-CODE/serial port output MPU-3050/serial/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c
first commit
[arduino] / sheets / gyro / GY-52 Three-axis gyroscope sending data / Three-axis gyroscope sending data / GY-52 Test program / STM32-CODE / serial port output MPU-3050 / serial / Libraries / STM32F10x_StdPeriph_Driver / src / stm32f10x_dac.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_dac.c\r
4   * @author  MCD Application Team\r
5   * @version V3.1.2\r
6   * @date    09/28/2009\r
7   * @brief   This file provides all the DAC firmware functions.\r
8   ******************************************************************************\r
9   * @copy\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>\r
19   */ \r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_dac.h"\r
23 #include "stm32f10x_rcc.h"\r
24 \r
25 /** @addtogroup STM32F10x_StdPeriph_Driver\r
26   * @{\r
27   */\r
28 \r
29 /** @defgroup DAC \r
30   * @brief DAC driver modules\r
31   * @{\r
32   */ \r
33 \r
34 /** @defgroup DAC_Private_TypesDefinitions\r
35   * @{\r
36   */\r
37 \r
38 /**\r
39   * @}\r
40   */\r
41 \r
42 /** @defgroup DAC_Private_Defines\r
43   * @{\r
44   */\r
45 \r
46 /* DAC EN mask */\r
47 #define CR_EN_Set                  ((uint32_t)0x00000001)\r
48 \r
49 /* DAC DMAEN mask */\r
50 #define CR_DMAEN_Set               ((uint32_t)0x00001000)\r
51 \r
52 /* CR register Mask */\r
53 #define CR_CLEAR_Mask              ((uint32_t)0x00000FFE)\r
54 \r
55 /* DAC SWTRIG mask */\r
56 #define SWTRIGR_SWTRIG_Set         ((uint32_t)0x00000001)\r
57 \r
58 /* DAC Dual Channels SWTRIG masks */\r
59 #define DUAL_SWTRIG_Set            ((uint32_t)0x00000003)\r
60 #define DUAL_SWTRIG_Reset          ((uint32_t)0xFFFFFFFC)\r
61 \r
62 /* DHR registers offsets */\r
63 #define DHR12R1_Offset             ((uint32_t)0x00000008)\r
64 #define DHR12R2_Offset             ((uint32_t)0x00000014)\r
65 #define DHR12RD_Offset             ((uint32_t)0x00000020)\r
66 \r
67 /* DOR register offset */\r
68 #define DOR_Offset                 ((uint32_t)0x0000002C)\r
69 /**\r
70   * @}\r
71   */\r
72 \r
73 /** @defgroup DAC_Private_Macros\r
74   * @{\r
75   */\r
76 \r
77 /**\r
78   * @}\r
79   */\r
80 \r
81 /** @defgroup DAC_Private_Variables\r
82   * @{\r
83   */\r
84 \r
85 /**\r
86   * @}\r
87   */\r
88 \r
89 /** @defgroup DAC_Private_FunctionPrototypes\r
90   * @{\r
91   */\r
92 \r
93 /**\r
94   * @}\r
95   */\r
96 \r
97 /** @defgroup DAC_Private_Functions\r
98   * @{\r
99   */\r
100 \r
101 /**\r
102   * @brief  Deinitializes the DAC peripheral registers to their default reset values.\r
103   * @param  None\r
104   * @retval None\r
105   */\r
106 void DAC_DeInit(void)\r
107 {\r
108   /* Enable DAC reset state */\r
109   RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);\r
110   /* Release DAC from reset state */\r
111   RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);\r
112 }\r
113 \r
114 /**\r
115   * @brief  Initializes the DAC peripheral according to the specified \r
116   *   parameters in the DAC_InitStruct.\r
117   * @param  DAC_Channel: the selected DAC channel. \r
118   *   This parameter can be one of the following values:\r
119   *     @arg DAC_Channel_1: DAC Channel1 selected\r
120   *     @arg DAC_Channel_2: DAC Channel2 selected\r
121   * @param  DAC_InitStruct: pointer to a DAC_InitTypeDef structure that\r
122   *   contains the configuration information for the specified DAC channel.\r
123   * @retval None\r
124   */\r
125 void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)\r
126 {\r
127   uint32_t tmpreg1 = 0, tmpreg2 = 0;\r
128   /* Check the DAC parameters */\r
129   assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger));\r
130   assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));\r
131   assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));\r
132   assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));\r
133 /*---------------------------- DAC CR Configuration --------------------------*/\r
134   /* Get the DAC CR value */\r
135   tmpreg1 = DAC->CR;\r
136   /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */\r
137   tmpreg1 &= ~(CR_CLEAR_Mask << DAC_Channel);\r
138   /* Configure for the selected DAC channel: buffer output, trigger, wave genration,\r
139      mask/amplitude for wave genration */\r
140   /* Set TSELx and TENx bits according to DAC_Trigger value */\r
141   /* Set WAVEx bits according to DAC_WaveGeneration value */\r
142   /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ \r
143   /* Set BOFFx bit according to DAC_OutputBuffer value */   \r
144   tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |\r
145              DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);\r
146   /* Calculate CR register value depending on DAC_Channel */\r
147   tmpreg1 |= tmpreg2 << DAC_Channel;\r
148   /* Write to DAC CR */\r
149   DAC->CR = tmpreg1;\r
150 }\r
151 \r
152 /**\r
153   * @brief  Fills each DAC_InitStruct member with its default value.\r
154   * @param  DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will\r
155   *   be initialized.\r
156   * @retval None\r
157   */\r
158 void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)\r
159 {\r
160 /*--------------- Reset DAC init structure parameters values -----------------*/\r
161   /* Initialize the DAC_Trigger member */\r
162   DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;\r
163   /* Initialize the DAC_WaveGeneration member */\r
164   DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;\r
165   /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */\r
166   DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;\r
167   /* Initialize the DAC_OutputBuffer member */\r
168   DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;\r
169 }\r
170 \r
171 /**\r
172   * @brief  Enables or disables the specified DAC channel.\r
173   * @param  DAC_Channel: the selected DAC channel. \r
174   *   This parameter can be one of the following values:\r
175   *     @arg DAC_Channel_1: DAC Channel1 selected\r
176   *     @arg DAC_Channel_2: DAC Channel2 selected\r
177   * @param  NewState: new state of the DAC channel. \r
178   *   This parameter can be: ENABLE or DISABLE.\r
179   * @retval None\r
180   */\r
181 void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)\r
182 {\r
183   /* Check the parameters */\r
184   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
185   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
186   if (NewState != DISABLE)\r
187   {\r
188     /* Enable the selected DAC channel */\r
189     DAC->CR |= CR_EN_Set << DAC_Channel;\r
190   }\r
191   else\r
192   {\r
193     /* Disable the selected DAC channel */\r
194     DAC->CR &= ~(CR_EN_Set << DAC_Channel);\r
195   }\r
196 }\r
197 \r
198 /**\r
199   * @brief  Enables or disables the specified DAC channel DMA request.\r
200   * @param  DAC_Channel: the selected DAC channel. \r
201   *   This parameter can be one of the following values:\r
202   *     @arg DAC_Channel_1: DAC Channel1 selected\r
203   *     @arg DAC_Channel_2: DAC Channel2 selected\r
204   * @param  NewState: new state of the selected DAC channel DMA request.\r
205   *   This parameter can be: ENABLE or DISABLE.\r
206   * @retval None\r
207   */\r
208 void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)\r
209 {\r
210   /* Check the parameters */\r
211   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
212   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
213   if (NewState != DISABLE)\r
214   {\r
215     /* Enable the selected DAC channel DMA request */\r
216     DAC->CR |= CR_DMAEN_Set << DAC_Channel;\r
217   }\r
218   else\r
219   {\r
220     /* Disable the selected DAC channel DMA request */\r
221     DAC->CR &= ~(CR_DMAEN_Set << DAC_Channel);\r
222   }\r
223 }\r
224 \r
225 /**\r
226   * @brief  Enables or disables the selected DAC channel software trigger.\r
227   * @param  DAC_Channel: the selected DAC channel. \r
228   *   This parameter can be one of the following values:\r
229   *     @arg DAC_Channel_1: DAC Channel1 selected\r
230   *     @arg DAC_Channel_2: DAC Channel2 selected\r
231   * @param  NewState: new state of the selected DAC channel software trigger.\r
232   *   This parameter can be: ENABLE or DISABLE.\r
233   * @retval None\r
234   */\r
235 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)\r
236 {\r
237   /* Check the parameters */\r
238   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
239   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
240   if (NewState != DISABLE)\r
241   {\r
242     /* Enable software trigger for the selected DAC channel */\r
243     DAC->SWTRIGR |= SWTRIGR_SWTRIG_Set << (DAC_Channel >> 4);\r
244   }\r
245   else\r
246   {\r
247     /* Disable software trigger for the selected DAC channel */\r
248     DAC->SWTRIGR &= ~(SWTRIGR_SWTRIG_Set << (DAC_Channel >> 4));\r
249   }\r
250 }\r
251 \r
252 /**\r
253   * @brief  Enables or disables simultaneously the two DAC channels software\r
254   *   triggers.\r
255   * @param  NewState: new state of the DAC channels software triggers.\r
256   *   This parameter can be: ENABLE or DISABLE.\r
257   * @retval None\r
258   */\r
259 void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)\r
260 {\r
261   /* Check the parameters */\r
262   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
263   if (NewState != DISABLE)\r
264   {\r
265     /* Enable software trigger for both DAC channels */\r
266     DAC->SWTRIGR |= DUAL_SWTRIG_Set ;\r
267   }\r
268   else\r
269   {\r
270     /* Disable software trigger for both DAC channels */\r
271     DAC->SWTRIGR &= DUAL_SWTRIG_Reset;\r
272   }\r
273 }\r
274 \r
275 /**\r
276   * @brief  Enables or disables the selected DAC channel wave generation.\r
277   * @param  DAC_Channel: the selected DAC channel. \r
278   *   This parameter can be one of the following values:\r
279   *     @arg DAC_Channel_1: DAC Channel1 selected\r
280   *     @arg DAC_Channel_2: DAC Channel2 selected\r
281   * @param  DAC_Wave: Specifies the wave type to enable or disable.\r
282   *   This parameter can be one of the following values:\r
283   *     @arg DAC_Wave_Noise: noise wave generation\r
284   *     @arg DAC_Wave_Triangle: triangle wave generation\r
285   * @param  NewState: new state of the selected DAC channel wave generation.\r
286   *   This parameter can be: ENABLE or DISABLE.\r
287   * @retval None\r
288   */\r
289 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)\r
290 {\r
291   /* Check the parameters */\r
292   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
293   assert_param(IS_DAC_WAVE(DAC_Wave)); \r
294   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
295   if (NewState != DISABLE)\r
296   {\r
297     /* Enable the selected wave generation for the selected DAC channel */\r
298     DAC->CR |= DAC_Wave << DAC_Channel;\r
299   }\r
300   else\r
301   {\r
302     /* Disable the selected wave generation for the selected DAC channel */\r
303     DAC->CR &= ~(DAC_Wave << DAC_Channel);\r
304   }\r
305 }\r
306 \r
307 /**\r
308   * @brief  Set the specified data holding register value for DAC channel1.\r
309   * @param  DAC_Align: Specifies the data alignement for DAC channel1.\r
310   *   This parameter can be one of the following values:\r
311   *     @arg DAC_Align_8b_R: 8bit right data alignement selected\r
312   *     @arg DAC_Align_12b_L: 12bit left data alignement selected\r
313   *     @arg DAC_Align_12b_R: 12bit right data alignement selected\r
314   * @param  Data : Data to be loaded in the selected data holding register.\r
315   * @retval None\r
316   */\r
317 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)\r
318 {  \r
319   __IO uint32_t tmp = 0;\r
320   \r
321   /* Check the parameters */\r
322   assert_param(IS_DAC_ALIGN(DAC_Align));\r
323   assert_param(IS_DAC_DATA(Data));\r
324   \r
325   tmp = (uint32_t)DAC_BASE; \r
326   tmp += DHR12R1_Offset + DAC_Align;\r
327 \r
328   /* Set the DAC channel1 selected data holding register */\r
329   *(__IO uint32_t *) tmp = Data;\r
330 }\r
331 \r
332 /**\r
333   * @brief  Set the specified data holding register value for DAC channel2.\r
334   * @param  DAC_Align: Specifies the data alignement for DAC channel2.\r
335   *   This parameter can be one of the following values:\r
336   *     @arg DAC_Align_8b_R: 8bit right data alignement selected\r
337   *     @arg DAC_Align_12b_L: 12bit left data alignement selected\r
338   *     @arg DAC_Align_12b_R: 12bit right data alignement selected\r
339   * @param  Data : Data to be loaded in the selected data holding register.\r
340   * @retval None\r
341   */\r
342 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)\r
343 {\r
344   __IO uint32_t tmp = 0;\r
345 \r
346   /* Check the parameters */\r
347   assert_param(IS_DAC_ALIGN(DAC_Align));\r
348   assert_param(IS_DAC_DATA(Data));\r
349   \r
350   tmp = (uint32_t)DAC_BASE;\r
351   tmp += DHR12R2_Offset + DAC_Align;\r
352 \r
353   /* Set the DAC channel2 selected data holding register */\r
354   *(__IO uint32_t *)tmp = Data;\r
355 }\r
356 \r
357 /**\r
358   * @brief  Set the specified data holding register value for dual channel\r
359   *   DAC.\r
360   * @param  DAC_Align: Specifies the data alignement for dual channel DAC.\r
361   *   This parameter can be one of the following values:\r
362   *     @arg DAC_Align_8b_R: 8bit right data alignement selected\r
363   *     @arg DAC_Align_12b_L: 12bit left data alignement selected\r
364   *     @arg DAC_Align_12b_R: 12bit right data alignement selected\r
365   * @param  Data2: Data for DAC Channel2 to be loaded in the selected data \r
366   *   holding register.\r
367   * @param  Data1: Data for DAC Channel1 to be loaded in the selected data \r
368   *   holding register.\r
369   * @retval None\r
370   */\r
371 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)\r
372 {\r
373   uint32_t data = 0, tmp = 0;\r
374   \r
375   /* Check the parameters */\r
376   assert_param(IS_DAC_ALIGN(DAC_Align));\r
377   assert_param(IS_DAC_DATA(Data1));\r
378   assert_param(IS_DAC_DATA(Data2));\r
379   \r
380   /* Calculate and set dual DAC data holding register value */\r
381   if (DAC_Align == DAC_Align_8b_R)\r
382   {\r
383     data = ((uint32_t)Data2 << 8) | Data1; \r
384   }\r
385   else\r
386   {\r
387     data = ((uint32_t)Data2 << 16) | Data1;\r
388   }\r
389   \r
390   tmp = (uint32_t)DAC_BASE;\r
391   tmp += DHR12RD_Offset + DAC_Align;\r
392 \r
393   /* Set the dual DAC selected data holding register */\r
394   *(__IO uint32_t *)tmp = data;\r
395 }\r
396 \r
397 /**\r
398   * @brief  Returns the last data output value of the selected DAC cahnnel.\r
399   * @param  DAC_Channel: the selected DAC channel. \r
400   *   This parameter can be one of the following values:\r
401   *     @arg DAC_Channel_1: DAC Channel1 selected\r
402   *     @arg DAC_Channel_2: DAC Channel2 selected\r
403   * @retval The selected DAC channel data output value.\r
404   */\r
405 uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)\r
406 {\r
407   __IO uint32_t tmp = 0;\r
408   \r
409   /* Check the parameters */\r
410   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
411   \r
412   tmp = (uint32_t) DAC_BASE ;\r
413   tmp += DOR_Offset + ((uint32_t)DAC_Channel >> 2);\r
414   \r
415   /* Returns the DAC channel data output register value */\r
416   return (uint16_t) (*(__IO uint32_t*) tmp);\r
417 }\r
418 \r
419 /**\r
420   * @}\r
421   */\r
422 \r
423 /**\r
424   * @}\r
425   */\r
426 \r
427 /**\r
428   * @}\r
429   */\r
430 \r
431 /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/\r