]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/blob
025b8e28375959bd36e037b2a9b6159fff5544d8
[mvd_firmware.git] /
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_dac.c\r
4   * @author  MCD Application Team\r
5   * @version V3.5.0\r
6   * @date    11-March-2011\r
7   * @brief   This file provides all the DAC firmware functions.\r
8   ******************************************************************************\r
9   * @attention\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 2011 STMicroelectronics</center></h2>\r
19   ******************************************************************************\r
20   */\r
21 \r
22 /* Includes ------------------------------------------------------------------*/\r
23 #include "stm32f10x_dac.h"\r
24 #include "stm32f10x_rcc.h"\r
25 \r
26 /** @addtogroup STM32F10x_StdPeriph_Driver\r
27   * @{\r
28   */\r
29 \r
30 /** @defgroup DAC \r
31   * @brief DAC driver modules\r
32   * @{\r
33   */ \r
34 \r
35 /** @defgroup DAC_Private_TypesDefinitions\r
36   * @{\r
37   */\r
38 \r
39 /**\r
40   * @}\r
41   */\r
42 \r
43 /** @defgroup DAC_Private_Defines\r
44   * @{\r
45   */\r
46 \r
47 /* CR register Mask */\r
48 #define CR_CLEAR_MASK              ((uint32_t)0x00000FFE)\r
49 \r
50 /* DAC Dual Channels SWTRIG masks */\r
51 #define DUAL_SWTRIG_SET            ((uint32_t)0x00000003)\r
52 #define DUAL_SWTRIG_RESET          ((uint32_t)0xFFFFFFFC)\r
53 \r
54 /* DHR registers offsets */\r
55 #define DHR12R1_OFFSET             ((uint32_t)0x00000008)\r
56 #define DHR12R2_OFFSET             ((uint32_t)0x00000014)\r
57 #define DHR12RD_OFFSET             ((uint32_t)0x00000020)\r
58 \r
59 /* DOR register offset */\r
60 #define DOR_OFFSET                 ((uint32_t)0x0000002C)\r
61 /**\r
62   * @}\r
63   */\r
64 \r
65 /** @defgroup DAC_Private_Macros\r
66   * @{\r
67   */\r
68 \r
69 /**\r
70   * @}\r
71   */\r
72 \r
73 /** @defgroup DAC_Private_Variables\r
74   * @{\r
75   */\r
76 \r
77 /**\r
78   * @}\r
79   */\r
80 \r
81 /** @defgroup DAC_Private_FunctionPrototypes\r
82   * @{\r
83   */\r
84 \r
85 /**\r
86   * @}\r
87   */\r
88 \r
89 /** @defgroup DAC_Private_Functions\r
90   * @{\r
91   */\r
92 \r
93 /**\r
94   * @brief  Deinitializes the DAC peripheral registers to their default reset values.\r
95   * @param  None\r
96   * @retval None\r
97   */\r
98 void DAC_DeInit(void)\r
99 {\r
100   /* Enable DAC reset state */\r
101   RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);\r
102   /* Release DAC from reset state */\r
103   RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);\r
104 }\r
105 \r
106 /**\r
107   * @brief  Initializes the DAC peripheral according to the specified \r
108   *         parameters in the DAC_InitStruct.\r
109   * @param  DAC_Channel: the selected DAC channel. \r
110   *   This parameter can be one of the following values:\r
111   *     @arg DAC_Channel_1: DAC Channel1 selected\r
112   *     @arg DAC_Channel_2: DAC Channel2 selected\r
113   * @param  DAC_InitStruct: pointer to a DAC_InitTypeDef structure that\r
114   *        contains the configuration information for the specified DAC channel.\r
115   * @retval None\r
116   */\r
117 void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)\r
118 {\r
119   uint32_t tmpreg1 = 0, tmpreg2 = 0;\r
120   /* Check the DAC parameters */\r
121   assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger));\r
122   assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));\r
123   assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));\r
124   assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));\r
125 /*---------------------------- DAC CR Configuration --------------------------*/\r
126   /* Get the DAC CR value */\r
127   tmpreg1 = DAC->CR;\r
128   /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */\r
129   tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel);\r
130   /* Configure for the selected DAC channel: buffer output, trigger, wave generation,\r
131      mask/amplitude for wave generation */\r
132   /* Set TSELx and TENx bits according to DAC_Trigger value */\r
133   /* Set WAVEx bits according to DAC_WaveGeneration value */\r
134   /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ \r
135   /* Set BOFFx bit according to DAC_OutputBuffer value */   \r
136   tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |\r
137              DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);\r
138   /* Calculate CR register value depending on DAC_Channel */\r
139   tmpreg1 |= tmpreg2 << DAC_Channel;\r
140   /* Write to DAC CR */\r
141   DAC->CR = tmpreg1;\r
142 }\r
143 \r
144 /**\r
145   * @brief  Fills each DAC_InitStruct member with its default value.\r
146   * @param  DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will\r
147   *         be initialized.\r
148   * @retval None\r
149   */\r
150 void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)\r
151 {\r
152 /*--------------- Reset DAC init structure parameters values -----------------*/\r
153   /* Initialize the DAC_Trigger member */\r
154   DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;\r
155   /* Initialize the DAC_WaveGeneration member */\r
156   DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;\r
157   /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */\r
158   DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;\r
159   /* Initialize the DAC_OutputBuffer member */\r
160   DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;\r
161 }\r
162 \r
163 /**\r
164   * @brief  Enables or disables the specified DAC channel.\r
165   * @param  DAC_Channel: the selected DAC channel. \r
166   *   This parameter can be one of the following values:\r
167   *     @arg DAC_Channel_1: DAC Channel1 selected\r
168   *     @arg DAC_Channel_2: DAC Channel2 selected\r
169   * @param  NewState: new state of the DAC channel. \r
170   *   This parameter can be: ENABLE or DISABLE.\r
171   * @retval None\r
172   */\r
173 void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)\r
174 {\r
175   /* Check the parameters */\r
176   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
177   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
178   if (NewState != DISABLE)\r
179   {\r
180     /* Enable the selected DAC channel */\r
181     DAC->CR |= (DAC_CR_EN1 << DAC_Channel);\r
182   }\r
183   else\r
184   {\r
185     /* Disable the selected DAC channel */\r
186     DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);\r
187   }\r
188 }\r
189 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)\r
190 /**\r
191   * @brief  Enables or disables the specified DAC interrupts.\r
192   * @param  DAC_Channel: the selected DAC channel. \r
193   *   This parameter can be one of the following values:\r
194   *     @arg DAC_Channel_1: DAC Channel1 selected\r
195   *     @arg DAC_Channel_2: DAC Channel2 selected\r
196   * @param  DAC_IT: specifies the DAC interrupt sources to be enabled or disabled. \r
197   *   This parameter can be the following values:\r
198   *     @arg DAC_IT_DMAUDR: DMA underrun interrupt mask                      \r
199   * @param  NewState: new state of the specified DAC interrupts.\r
200   *   This parameter can be: ENABLE or DISABLE.\r
201   * @retval None\r
202   */ \r
203 void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState)  \r
204 {\r
205   /* Check the parameters */\r
206   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
207   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
208   assert_param(IS_DAC_IT(DAC_IT)); \r
209 \r
210   if (NewState != DISABLE)\r
211   {\r
212     /* Enable the selected DAC interrupts */\r
213     DAC->CR |=  (DAC_IT << DAC_Channel);\r
214   }\r
215   else\r
216   {\r
217     /* Disable the selected DAC interrupts */\r
218     DAC->CR &= (~(uint32_t)(DAC_IT << DAC_Channel));\r
219   }\r
220 }\r
221 #endif\r
222 \r
223 /**\r
224   * @brief  Enables or disables the specified DAC channel DMA request.\r
225   * @param  DAC_Channel: the selected DAC channel. \r
226   *   This parameter can be one of the following values:\r
227   *     @arg DAC_Channel_1: DAC Channel1 selected\r
228   *     @arg DAC_Channel_2: DAC Channel2 selected\r
229   * @param  NewState: new state of the selected DAC channel DMA request.\r
230   *   This parameter can be: ENABLE or DISABLE.\r
231   * @retval None\r
232   */\r
233 void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)\r
234 {\r
235   /* Check the parameters */\r
236   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
237   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
238   if (NewState != DISABLE)\r
239   {\r
240     /* Enable the selected DAC channel DMA request */\r
241     DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel);\r
242   }\r
243   else\r
244   {\r
245     /* Disable the selected DAC channel DMA request */\r
246     DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);\r
247   }\r
248 }\r
249 \r
250 /**\r
251   * @brief  Enables or disables the selected DAC channel software trigger.\r
252   * @param  DAC_Channel: the selected DAC channel. \r
253   *   This parameter can be one of the following values:\r
254   *     @arg DAC_Channel_1: DAC Channel1 selected\r
255   *     @arg DAC_Channel_2: DAC Channel2 selected\r
256   * @param  NewState: new state of the selected DAC channel software trigger.\r
257   *   This parameter can be: ENABLE or DISABLE.\r
258   * @retval None\r
259   */\r
260 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)\r
261 {\r
262   /* Check the parameters */\r
263   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
264   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
265   if (NewState != DISABLE)\r
266   {\r
267     /* Enable software trigger for the selected DAC channel */\r
268     DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4);\r
269   }\r
270   else\r
271   {\r
272     /* Disable software trigger for the selected DAC channel */\r
273     DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));\r
274   }\r
275 }\r
276 \r
277 /**\r
278   * @brief  Enables or disables simultaneously the two DAC channels software\r
279   *   triggers.\r
280   * @param  NewState: new state of the DAC channels software triggers.\r
281   *   This parameter can be: ENABLE or DISABLE.\r
282   * @retval None\r
283   */\r
284 void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)\r
285 {\r
286   /* Check the parameters */\r
287   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
288   if (NewState != DISABLE)\r
289   {\r
290     /* Enable software trigger for both DAC channels */\r
291     DAC->SWTRIGR |= DUAL_SWTRIG_SET ;\r
292   }\r
293   else\r
294   {\r
295     /* Disable software trigger for both DAC channels */\r
296     DAC->SWTRIGR &= DUAL_SWTRIG_RESET;\r
297   }\r
298 }\r
299 \r
300 /**\r
301   * @brief  Enables or disables the selected DAC channel wave generation.\r
302   * @param  DAC_Channel: the selected DAC channel. \r
303   *   This parameter can be one of the following values:\r
304   *     @arg DAC_Channel_1: DAC Channel1 selected\r
305   *     @arg DAC_Channel_2: DAC Channel2 selected\r
306   * @param  DAC_Wave: Specifies the wave type to enable or disable.\r
307   *   This parameter can be one of the following values:\r
308   *     @arg DAC_Wave_Noise: noise wave generation\r
309   *     @arg DAC_Wave_Triangle: triangle wave generation\r
310   * @param  NewState: new state of the selected DAC channel wave generation.\r
311   *   This parameter can be: ENABLE or DISABLE.\r
312   * @retval None\r
313   */\r
314 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)\r
315 {\r
316   /* Check the parameters */\r
317   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
318   assert_param(IS_DAC_WAVE(DAC_Wave)); \r
319   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
320   if (NewState != DISABLE)\r
321   {\r
322     /* Enable the selected wave generation for the selected DAC channel */\r
323     DAC->CR |= DAC_Wave << DAC_Channel;\r
324   }\r
325   else\r
326   {\r
327     /* Disable the selected wave generation for the selected DAC channel */\r
328     DAC->CR &= ~(DAC_Wave << DAC_Channel);\r
329   }\r
330 }\r
331 \r
332 /**\r
333   * @brief  Set the specified data holding register value for DAC channel1.\r
334   * @param  DAC_Align: Specifies the data alignment for DAC channel1.\r
335   *   This parameter can be one of the following values:\r
336   *     @arg DAC_Align_8b_R: 8bit right data alignment selected\r
337   *     @arg DAC_Align_12b_L: 12bit left data alignment selected\r
338   *     @arg DAC_Align_12b_R: 12bit right data alignment 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_SetChannel1Data(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 += DHR12R1_OFFSET + DAC_Align;\r
352 \r
353   /* Set the DAC channel1 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 DAC channel2.\r
359   * @param  DAC_Align: Specifies the data alignment for DAC channel2.\r
360   *   This parameter can be one of the following values:\r
361   *     @arg DAC_Align_8b_R: 8bit right data alignment selected\r
362   *     @arg DAC_Align_12b_L: 12bit left data alignment selected\r
363   *     @arg DAC_Align_12b_R: 12bit right data alignment selected\r
364   * @param  Data : Data to be loaded in the selected data holding register.\r
365   * @retval None\r
366   */\r
367 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)\r
368 {\r
369   __IO uint32_t tmp = 0;\r
370 \r
371   /* Check the parameters */\r
372   assert_param(IS_DAC_ALIGN(DAC_Align));\r
373   assert_param(IS_DAC_DATA(Data));\r
374   \r
375   tmp = (uint32_t)DAC_BASE;\r
376   tmp += DHR12R2_OFFSET + DAC_Align;\r
377 \r
378   /* Set the DAC channel2 selected data holding register */\r
379   *(__IO uint32_t *)tmp = Data;\r
380 }\r
381 \r
382 /**\r
383   * @brief  Set the specified data holding register value for dual channel\r
384   *   DAC.\r
385   * @param  DAC_Align: Specifies the data alignment for dual channel DAC.\r
386   *   This parameter can be one of the following values:\r
387   *     @arg DAC_Align_8b_R: 8bit right data alignment selected\r
388   *     @arg DAC_Align_12b_L: 12bit left data alignment selected\r
389   *     @arg DAC_Align_12b_R: 12bit right data alignment selected\r
390   * @param  Data2: Data for DAC Channel2 to be loaded in the selected data \r
391   *   holding register.\r
392   * @param  Data1: Data for DAC Channel1 to be loaded in the selected data \r
393   *   holding register.\r
394   * @retval None\r
395   */\r
396 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)\r
397 {\r
398   uint32_t data = 0, tmp = 0;\r
399   \r
400   /* Check the parameters */\r
401   assert_param(IS_DAC_ALIGN(DAC_Align));\r
402   assert_param(IS_DAC_DATA(Data1));\r
403   assert_param(IS_DAC_DATA(Data2));\r
404   \r
405   /* Calculate and set dual DAC data holding register value */\r
406   if (DAC_Align == DAC_Align_8b_R)\r
407   {\r
408     data = ((uint32_t)Data2 << 8) | Data1; \r
409   }\r
410   else\r
411   {\r
412     data = ((uint32_t)Data2 << 16) | Data1;\r
413   }\r
414   \r
415   tmp = (uint32_t)DAC_BASE;\r
416   tmp += DHR12RD_OFFSET + DAC_Align;\r
417 \r
418   /* Set the dual DAC selected data holding register */\r
419   *(__IO uint32_t *)tmp = data;\r
420 }\r
421 \r
422 /**\r
423   * @brief  Returns the last data output value of the selected DAC channel.\r
424   * @param  DAC_Channel: the selected DAC channel. \r
425   *   This parameter can be one of the following values:\r
426   *     @arg DAC_Channel_1: DAC Channel1 selected\r
427   *     @arg DAC_Channel_2: DAC Channel2 selected\r
428   * @retval The selected DAC channel data output value.\r
429   */\r
430 uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)\r
431 {\r
432   __IO uint32_t tmp = 0;\r
433   \r
434   /* Check the parameters */\r
435   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
436   \r
437   tmp = (uint32_t) DAC_BASE ;\r
438   tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2);\r
439   \r
440   /* Returns the DAC channel data output register value */\r
441   return (uint16_t) (*(__IO uint32_t*) tmp);\r
442 }\r
443 \r
444 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)\r
445 /**\r
446   * @brief  Checks whether the specified DAC flag is set or not.\r
447   * @param  DAC_Channel: thee selected DAC channel. \r
448   *   This parameter can be one of the following values:\r
449   *     @arg DAC_Channel_1: DAC Channel1 selected\r
450   *     @arg DAC_Channel_2: DAC Channel2 selected\r
451   * @param  DAC_FLAG: specifies the flag to check. \r
452   *   This parameter can be only of the following value:\r
453   *     @arg DAC_FLAG_DMAUDR: DMA underrun flag                                                 \r
454   * @retval The new state of DAC_FLAG (SET or RESET).\r
455   */\r
456 FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG)\r
457 {\r
458   FlagStatus bitstatus = RESET;\r
459   /* Check the parameters */\r
460   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
461   assert_param(IS_DAC_FLAG(DAC_FLAG));\r
462 \r
463   /* Check the status of the specified DAC flag */\r
464   if ((DAC->SR & (DAC_FLAG << DAC_Channel)) != (uint8_t)RESET)\r
465   {\r
466     /* DAC_FLAG is set */\r
467     bitstatus = SET;\r
468   }\r
469   else\r
470   {\r
471     /* DAC_FLAG is reset */\r
472     bitstatus = RESET;\r
473   }\r
474   /* Return the DAC_FLAG status */\r
475   return  bitstatus;\r
476 }\r
477 \r
478 /**\r
479   * @brief  Clears the DAC channelx's pending flags.\r
480   * @param  DAC_Channel: the selected DAC channel. \r
481   *   This parameter can be one of the following values:\r
482   *     @arg DAC_Channel_1: DAC Channel1 selected\r
483   *     @arg DAC_Channel_2: DAC Channel2 selected\r
484   * @param  DAC_FLAG: specifies the flag to clear. \r
485   *   This parameter can be of the following value:\r
486   *     @arg DAC_FLAG_DMAUDR: DMA underrun flag                           \r
487   * @retval None\r
488   */\r
489 void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG)\r
490 {\r
491   /* Check the parameters */\r
492   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
493   assert_param(IS_DAC_FLAG(DAC_FLAG));\r
494 \r
495   /* Clear the selected DAC flags */\r
496   DAC->SR = (DAC_FLAG << DAC_Channel);\r
497 }\r
498 \r
499 /**\r
500   * @brief  Checks whether the specified DAC interrupt has occurred or not.\r
501   * @param  DAC_Channel: the selected DAC channel. \r
502   *   This parameter can be one of the following values:\r
503   *     @arg DAC_Channel_1: DAC Channel1 selected\r
504   *     @arg DAC_Channel_2: DAC Channel2 selected\r
505   * @param  DAC_IT: specifies the DAC interrupt source to check. \r
506   *   This parameter can be the following values:\r
507   *     @arg DAC_IT_DMAUDR: DMA underrun interrupt mask                       \r
508   * @retval The new state of DAC_IT (SET or RESET).\r
509   */\r
510 ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT)\r
511 {\r
512   ITStatus bitstatus = RESET;\r
513   uint32_t enablestatus = 0;\r
514   \r
515   /* Check the parameters */\r
516   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
517   assert_param(IS_DAC_IT(DAC_IT));\r
518 \r
519   /* Get the DAC_IT enable bit status */\r
520   enablestatus = (DAC->CR & (DAC_IT << DAC_Channel)) ;\r
521   \r
522   /* Check the status of the specified DAC interrupt */\r
523   if (((DAC->SR & (DAC_IT << DAC_Channel)) != (uint32_t)RESET) && enablestatus)\r
524   {\r
525     /* DAC_IT is set */\r
526     bitstatus = SET;\r
527   }\r
528   else\r
529   {\r
530     /* DAC_IT is reset */\r
531     bitstatus = RESET;\r
532   }\r
533   /* Return the DAC_IT status */\r
534   return  bitstatus;\r
535 }\r
536 \r
537 /**\r
538   * @brief  Clears the DAC channelx's interrupt pending bits.\r
539   * @param  DAC_Channel: the selected DAC channel. \r
540   *   This parameter can be one of the following values:\r
541   *     @arg DAC_Channel_1: DAC Channel1 selected\r
542   *     @arg DAC_Channel_2: DAC Channel2 selected\r
543   * @param  DAC_IT: specifies the DAC interrupt pending bit to clear.\r
544   *   This parameter can be the following values:\r
545   *     @arg DAC_IT_DMAUDR: DMA underrun interrupt mask                         \r
546   * @retval None\r
547   */\r
548 void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT)\r
549 {\r
550   /* Check the parameters */\r
551   assert_param(IS_DAC_CHANNEL(DAC_Channel));\r
552   assert_param(IS_DAC_IT(DAC_IT)); \r
553 \r
554   /* Clear the selected DAC interrupt pending bits */\r
555   DAC->SR = (DAC_IT << DAC_Channel);\r
556 }\r
557 #endif\r
558 \r
559 /**\r
560   * @}\r
561   */\r
562 \r
563 /**\r
564   * @}\r
565   */\r
566 \r
567 /**\r
568   * @}\r
569   */\r
570 \r
571 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/\r