1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_hal_dac.h
4   * @author  MCD Application Team
5   * @version V1.2.0
6   * @date    01-July-2016
7   * @brief   Header file of DAC HAL module.
8   ******************************************************************************
9   * @attention
10   *
11   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
12   *
13   * Redistribution and use in source and binary forms, with or without modification,
14   * are permitted provided that the following conditions are met:
15   *   1. Redistributions of source code must retain the above copyright notice,
16   *      this list of conditions and the following disclaimer.
17   *   2. Redistributions in binary form must reproduce the above copyright notice,
18   *      this list of conditions and the following disclaimer in the documentation
19   *      and/or other materials provided with the distribution.
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors
21   *      may be used to endorse or promote products derived from this software
22   *      without specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   ******************************************************************************
36   */
37 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32L1xx_HAL_DAC_H
40 #define __STM32L1xx_HAL_DAC_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32l1xx_hal_def.h"
48 
49 /** @addtogroup STM32L1xx_HAL_Driver
50   * @{
51   */
52 
53 /** @addtogroup DAC
54   * @{
55   */
56 
57 /* Exported types ------------------------------------------------------------*/
58 
59 /** @defgroup DAC_Exported_Types DAC Exported Types
60   * @{
61   */
62 
63 /**
64   * @brief  HAL State structures definition
65   */
66 typedef enum
67 {
68   HAL_DAC_STATE_RESET             = 0x00,  /*!< DAC not yet initialized or disabled  */
69   HAL_DAC_STATE_READY             = 0x01,  /*!< DAC initialized and ready for use    */
70   HAL_DAC_STATE_BUSY              = 0x02,  /*!< DAC internal processing is ongoing   */
71   HAL_DAC_STATE_TIMEOUT           = 0x03,  /*!< DAC timeout state                    */
72   HAL_DAC_STATE_ERROR             = 0x04   /*!< DAC error state                      */
73 
74 }HAL_DAC_StateTypeDef;
75 
76 /**
77   * @brief  DAC handle Structure definition
78   */
79 typedef struct
80 {
81   DAC_TypeDef                 *Instance;     /*!< Register base address             */
82 
83   __IO HAL_DAC_StateTypeDef   State;         /*!< DAC communication state           */
84 
85   HAL_LockTypeDef             Lock;          /*!< DAC locking object                */
86 
87   DMA_HandleTypeDef           *DMA_Handle1;  /*!< Pointer DMA handler for channel 1 */
88 
89   DMA_HandleTypeDef           *DMA_Handle2;  /*!< Pointer DMA handler for channel 2 */
90 
91   __IO uint32_t               ErrorCode;     /*!< DAC Error code                    */
92 
93 }DAC_HandleTypeDef;
94 
95 /**
96   * @brief   DAC Configuration regular Channel structure definition
97   */
98 typedef struct
99 {
100   uint32_t DAC_Trigger;       /*!< Specifies the external trigger for the selected DAC channel.
101                                    This parameter can be a value of @ref DAC_trigger_selection */
102 
103   uint32_t DAC_OutputBuffer;  /*!< Specifies whether the DAC channel output buffer is enabled or disabled.
104                                    This parameter can be a value of @ref DAC_output_buffer */
105 
106 }DAC_ChannelConfTypeDef;
107 
108 /**
109   * @}
110   */
111 
112 /* Exported constants --------------------------------------------------------*/
113 
114 /** @defgroup DAC_Exported_Constants DAC Exported Constants
115   * @{
116   */
117 
118 /** @defgroup DAC_Error_Code DAC Error Code
119   * @{
120   */
121 #define  HAL_DAC_ERROR_NONE              0x00    /*!< No error                          */
122 #define  HAL_DAC_ERROR_DMAUNDERRUNCH1    0x01    /*!< DAC channel1 DMA underrun error   */
123 #define  HAL_DAC_ERROR_DMAUNDERRUNCH2    0x02    /*!< DAC channel2 DMA underrun error   */
124 #define  HAL_DAC_ERROR_DMA               0x04    /*!< DMA error                         */
125 /**
126   * @}
127   */
128 
129 /** @defgroup DAC_trigger_selection DAC trigger selection
130   * @{
131   */
132 #define DAC_TRIGGER_NONE                   ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register
133                                                                        has been loaded, and not by external trigger */
134 #define DAC_TRIGGER_T6_TRGO                ((uint32_t)                                                    DAC_CR_TEN1)  /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
135 #define DAC_TRIGGER_T7_TRGO                ((uint32_t)(                 DAC_CR_TSEL1_1                  | DAC_CR_TEN1)) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
136 #define DAC_TRIGGER_T9_TRGO                ((uint32_t)(                 DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM9 TRGO selected as external conversion trigger for DAC channel */
137 #define DAC_TRIGGER_T2_TRGO                ((uint32_t)(DAC_CR_TSEL1_2                                   | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
138 #define DAC_TRIGGER_T4_TRGO                ((uint32_t)(DAC_CR_TSEL1_2                  | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */
139 #define DAC_TRIGGER_EXT_IT9                ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1                  | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */
140 #define DAC_TRIGGER_SOFTWARE               ((uint32_t)(DAC_CR_TSEL1                                     | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */
141 
142 /**
143   * @}
144   */
145 
146 /** @defgroup DAC_output_buffer DAC output buffer
147   * @{
148   */
149 #define DAC_OUTPUTBUFFER_ENABLE            ((uint32_t)0x00000000)
150 #define DAC_OUTPUTBUFFER_DISABLE           ((uint32_t)DAC_CR_BOFF1)
151 
152 /**
153   * @}
154   */
155 
156 /** @defgroup DAC_Channel_selection DAC Channel selection
157   * @{
158   */
159 #define DAC_CHANNEL_1                      ((uint32_t)0x00000000)
160 #define DAC_CHANNEL_2                      ((uint32_t)0x00000010)
161 
162 /**
163   * @}
164   */
165 
166 /** @defgroup DAC_data_alignement DAC data alignement
167   * @{
168   */
169 #define DAC_ALIGN_12B_R                    ((uint32_t)0x00000000)
170 #define DAC_ALIGN_12B_L                    ((uint32_t)0x00000004)
171 #define DAC_ALIGN_8B_R                     ((uint32_t)0x00000008)
172 
173 /**
174   * @}
175   */
176 
177 /** @defgroup DAC_flags_definition DAC flags definition
178   * @{
179   */
180 #define DAC_FLAG_DMAUDR1                   ((uint32_t)DAC_SR_DMAUDR1)
181 #define DAC_FLAG_DMAUDR2                   ((uint32_t)DAC_SR_DMAUDR2)
182 
183 /**
184   * @}
185   */
186 
187 /** @defgroup DAC_IT_definition DAC IT definition
188   * @{
189   */
190 #define DAC_IT_DMAUDR1                   ((uint32_t)DAC_SR_DMAUDR1)
191 #define DAC_IT_DMAUDR2                   ((uint32_t)DAC_SR_DMAUDR2)
192 
193 /**
194   * @}
195   */
196 
197 /**
198   * @}
199   */
200 
201 /* Exported macro ------------------------------------------------------------*/
202 
203 /** @defgroup DAC_Exported_Macros DAC Exported Macros
204   * @{
205   */
206 
207 /** @brief Reset DAC handle state
208   * @param  __HANDLE__: specifies the DAC handle.
209   * @retval None
210   */
211 #define __HAL_DAC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DAC_STATE_RESET)
212 
213 /** @brief Enable the DAC channel
214   * @param  __HANDLE__: specifies the DAC handle.
215   * @param  __DAC_Channel__: specifies the DAC channel
216   * @retval None
217   */
218 #define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__) \
219 ((__HANDLE__)->Instance->CR |=  (DAC_CR_EN1 << (__DAC_Channel__)))
220 
221 /** @brief Disable the DAC channel
222   * @param  __HANDLE__: specifies the DAC handle
223   * @param  __DAC_Channel__: specifies the DAC channel.
224   * @retval None
225   */
226 #define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__) \
227 ((__HANDLE__)->Instance->CR &=  ~(DAC_CR_EN1 << (__DAC_Channel__)))
228 
229 
230 /** @brief Enable the DAC interrupt
231   * @param  __HANDLE__: specifies the DAC handle
232   * @param  __INTERRUPT__: specifies the DAC interrupt.
233   *          This parameter can be any combination of the following values:
234   *            @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt
235   *            @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt
236   * @retval None
237   */
238 #define __HAL_DAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) |= (__INTERRUPT__))
239 
240 /** @brief Disable the DAC interrupt
241   * @param  __HANDLE__: specifies the DAC handle
242   * @param  __INTERRUPT__: specifies the DAC interrupt.
243   *          This parameter can be any combination of the following values:
244   *            @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt
245   *            @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt
246   * @retval None
247   */
248 #define __HAL_DAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__))
249 
250 /** @brief  Checks if the specified DAC interrupt source is enabled or disabled.
251   * @param __HANDLE__: DAC handle
252   * @param __INTERRUPT__: DAC interrupt source to check
253   *          This parameter can be any combination of the following values:
254   *            @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt
255   *            @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt
256   * @retval State of interruption (SET or RESET)
257   */
258 #define __HAL_DAC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__))
259 
260 /** @brief  Get the selected DAC's flag status.
261   * @param  __HANDLE__: specifies the DAC handle.
262   * @param  __FLAG__: specifies the DAC flag to get.
263   *          This parameter can be any combination of the following values:
264   *            @arg DAC_FLAG_DMAUDR1: DAC channel 1 DMA underrun flag
265   *            @arg DAC_FLAG_DMAUDR2: DAC channel 2 DMA underrun flag
266   * @retval None
267   */
268 #define __HAL_DAC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
269 
270 /** @brief  Clear the DAC's flag.
271   * @param  __HANDLE__: specifies the DAC handle.
272   * @param  __FLAG__: specifies the DAC flag to clear.
273   *          This parameter can be any combination of the following values:
274   *            @arg DAC_FLAG_DMAUDR1: DAC channel 1 DMA underrun flag
275   *            @arg DAC_FLAG_DMAUDR2: DAC channel 2 DMA underrun flag
276   * @retval None
277   */
278 #define __HAL_DAC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = (__FLAG__))
279 
280 /**
281   * @}
282   */
283 
284 /* Private macro -------------------------------------------------------------*/
285 
286 /** @defgroup DAC_Private_Macros DAC Private Macros
287   * @{
288   */
289 #define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_TRIGGER_NONE)    || \
290                                  ((TRIGGER) == DAC_TRIGGER_T6_TRGO) || \
291                                  ((TRIGGER) == DAC_TRIGGER_T7_TRGO) || \
292                                  ((TRIGGER) == DAC_TRIGGER_T9_TRGO) || \
293                                  ((TRIGGER) == DAC_TRIGGER_T2_TRGO) || \
294                                  ((TRIGGER) == DAC_TRIGGER_T4_TRGO) || \
295                                  ((TRIGGER) == DAC_TRIGGER_EXT_IT9) || \
296                                  ((TRIGGER) == DAC_TRIGGER_SOFTWARE))
297 
298 #define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OUTPUTBUFFER_ENABLE) || \
299                                            ((STATE) == DAC_OUTPUTBUFFER_DISABLE))
300 
301 #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \
302                                  ((CHANNEL) == DAC_CHANNEL_2))
303 
304 #define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_ALIGN_12B_R) || \
305                              ((ALIGN) == DAC_ALIGN_12B_L) || \
306                              ((ALIGN) == DAC_ALIGN_8B_R))
307 
308 #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0)
309 
310 #define DAC_DHR12R1_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000008) + (__ALIGNMENT__))
311 
312 #define DAC_DHR12R2_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000014) + (__ALIGNMENT__))
313 
314 #define DAC_DHR12RD_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000020) + (__ALIGNMENT__))
315 
316 /**
317   * @}
318   */
319 
320 
321 /* Include DAC HAL Extension module */
322 #include "stm32l1xx_hal_dac_ex.h"
323 
324 /* Exported functions --------------------------------------------------------*/
325 
326 /** @addtogroup DAC_Exported_Functions
327   * @{
328   */
329 
330 /** @addtogroup DAC_Exported_Functions_Group1
331   * @{
332   */
333 /* Initialization and de-initialization functions *****************************/
334 HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac);
335 HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac);
336 void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac);
337 void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac);
338 
339 /**
340   * @}
341   */
342 
343 /** @addtogroup DAC_Exported_Functions_Group2
344   * @{
345   */
346 /* IO operation functions *****************************************************/
347 HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);
348 HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);
349 HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment);
350 HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel);
351 HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
352 uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);
353 
354 /**
355   * @}
356   */
357 
358 /** @addtogroup DAC_Exported_Functions_Group2
359   * @{
360   */
361 /* Peripheral Control functions ***********************************************/
362 HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel);
363 
364 /**
365   * @}
366   */
367 
368 /** @addtogroup DAC_Exported_Functions_Group2
369   * @{
370   */
371 /* Peripheral State functions *************************************************/
372 HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac);
373 void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac);
374 uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac);
375 
376 void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac);
377 void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac);
378 void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac);
379 void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac);
380 
381 /**
382   * @}
383   */
384 
385 /**
386   * @}
387   */
388 
389 /**
390   * @}
391   */
392 
393 /**
394   * @}
395   */
396 
397 #ifdef __cplusplus
398 }
399 #endif
400 
401 #endif /*__STM32L1xx_HAL_DAC_H */
402 
403 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
404 
405