Merge pull request #93 from zyp/master
[fw/stlink] / example / libs_stm / inc / stm32l1xx / stm32l1xx_dma.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32l1xx_dma.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0\r
6   * @date    31-December-2010\r
7   * @brief   This file contains all the functions prototypes for the DMA firmware \r
8   *          library.\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
14   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
15   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
16   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
17   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18   *\r
19   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
20   ******************************************************************************  \r
21   */ \r
22 \r
23 /* Define to prevent recursive inclusion -------------------------------------*/\r
24 #ifndef __STM32L1xx_DMA_H\r
25 #define __STM32L1xx_DMA_H\r
26 \r
27 #ifdef __cplusplus\r
28  extern "C" {\r
29 #endif\r
30 \r
31 /* Includes ------------------------------------------------------------------*/\r
32 #include "stm32l1xx.h"\r
33 \r
34 /** @addtogroup STM32L1xx_StdPeriph_Driver\r
35   * @{\r
36   */\r
37 \r
38 /** @addtogroup DMA\r
39   * @{\r
40   */\r
41 \r
42 /* Exported types ------------------------------------------------------------*/\r
43 \r
44 /** \r
45   * @brief  DMA Init structure definition\r
46   */\r
47 \r
48 typedef struct\r
49 {\r
50   uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Channelx. */\r
51 \r
52   uint32_t DMA_MemoryBaseAddr;     /*!< Specifies the memory base address for DMAy Channelx. */\r
53 \r
54   uint32_t DMA_DIR;                /*!< Specifies if the peripheral is the source or destination.\r
55                                         This parameter can be a value of @ref DMA_data_transfer_direction */\r
56 \r
57   uint32_t DMA_BufferSize;         /*!< Specifies the buffer size, in data unit, of the specified Channel. \r
58                                         The data unit is equal to the configuration set in DMA_PeripheralDataSize\r
59                                         or DMA_MemoryDataSize members depending in the transfer direction. */\r
60 \r
61   uint32_t DMA_PeripheralInc;      /*!< Specifies whether the Peripheral address register is incremented or not.\r
62                                         This parameter can be a value of @ref DMA_peripheral_incremented_mode */\r
63 \r
64   uint32_t DMA_MemoryInc;          /*!< Specifies whether the memory address register is incremented or not.\r
65                                         This parameter can be a value of @ref DMA_memory_incremented_mode */\r
66 \r
67   uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width.\r
68                                         This parameter can be a value of @ref DMA_peripheral_data_size */\r
69 \r
70   uint32_t DMA_MemoryDataSize;     /*!< Specifies the Memory data width.\r
71                                         This parameter can be a value of @ref DMA_memory_data_size */\r
72 \r
73   uint32_t DMA_Mode;               /*!< Specifies the operation mode of the DMAy Channelx.\r
74                                         This parameter can be a value of @ref DMA_circular_normal_mode.\r
75                                         @note: The circular buffer mode cannot be used if the memory-to-memory\r
76                                               data transfer is configured on the selected Channel */\r
77 \r
78   uint32_t DMA_Priority;           /*!< Specifies the software priority for the DMAy Channelx.\r
79                                         This parameter can be a value of @ref DMA_priority_level */\r
80 \r
81   uint32_t DMA_M2M;                /*!< Specifies if the DMAy Channelx will be used in memory-to-memory transfer.\r
82                                         This parameter can be a value of @ref DMA_memory_to_memory */\r
83 }DMA_InitTypeDef;\r
84 \r
85 /* Exported constants --------------------------------------------------------*/\r
86 \r
87 /** @defgroup DMA_Exported_Constants\r
88   * @{\r
89   */\r
90 \r
91 #define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Channel1) || \\r
92                                    ((PERIPH) == DMA1_Channel2) || \\r
93                                    ((PERIPH) == DMA1_Channel3) || \\r
94                                    ((PERIPH) == DMA1_Channel4) || \\r
95                                    ((PERIPH) == DMA1_Channel5) || \\r
96                                    ((PERIPH) == DMA1_Channel6) || \\r
97                                    ((PERIPH) == DMA1_Channel7))\r
98 \r
99 /** @defgroup DMA_data_transfer_direction \r
100   * @{\r
101   */\r
102 \r
103 #define DMA_DIR_PeripheralDST              ((uint32_t)0x00000010)\r
104 #define DMA_DIR_PeripheralSRC              ((uint32_t)0x00000000)\r
105 #define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_PeripheralDST) || \\r
106                          ((DIR) == DMA_DIR_PeripheralSRC))\r
107 /**\r
108   * @}\r
109   */\r
110 \r
111 /** @defgroup DMA_peripheral_incremented_mode \r
112   * @{\r
113   */\r
114 \r
115 #define DMA_PeripheralInc_Enable           ((uint32_t)0x00000040)\r
116 #define DMA_PeripheralInc_Disable          ((uint32_t)0x00000000)\r
117 #define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \\r
118                                             ((STATE) == DMA_PeripheralInc_Disable))\r
119 /**\r
120   * @}\r
121   */\r
122 \r
123 /** @defgroup DMA_memory_incremented_mode \r
124   * @{\r
125   */\r
126 \r
127 #define DMA_MemoryInc_Enable               ((uint32_t)0x00000080)\r
128 #define DMA_MemoryInc_Disable              ((uint32_t)0x00000000)\r
129 #define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \\r
130                                         ((STATE) == DMA_MemoryInc_Disable))\r
131 /**\r
132   * @}\r
133   */\r
134 \r
135 /** @defgroup DMA_peripheral_data_size \r
136   * @{\r
137   */\r
138 \r
139 #define DMA_PeripheralDataSize_Byte        ((uint32_t)0x00000000)\r
140 #define DMA_PeripheralDataSize_HalfWord    ((uint32_t)0x00000100)\r
141 #define DMA_PeripheralDataSize_Word        ((uint32_t)0x00000200)\r
142 #define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \\r
143                                            ((SIZE) == DMA_PeripheralDataSize_HalfWord) || \\r
144                                            ((SIZE) == DMA_PeripheralDataSize_Word))\r
145 /**\r
146   * @}\r
147   */\r
148 \r
149 /** @defgroup DMA_memory_data_size \r
150   * @{\r
151   */\r
152 \r
153 #define DMA_MemoryDataSize_Byte            ((uint32_t)0x00000000)\r
154 #define DMA_MemoryDataSize_HalfWord        ((uint32_t)0x00000400)\r
155 #define DMA_MemoryDataSize_Word            ((uint32_t)0x00000800)\r
156 #define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \\r
157                                        ((SIZE) == DMA_MemoryDataSize_HalfWord) || \\r
158                                        ((SIZE) == DMA_MemoryDataSize_Word))\r
159 /**\r
160   * @}\r
161   */\r
162 \r
163 /** @defgroup DMA_circular_normal_mode \r
164   * @{\r
165   */\r
166 \r
167 #define DMA_Mode_Circular                  ((uint32_t)0x00000020)\r
168 #define DMA_Mode_Normal                    ((uint32_t)0x00000000)\r
169 #define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || ((MODE) == DMA_Mode_Normal))\r
170 /**\r
171   * @}\r
172   */\r
173 \r
174 /** @defgroup DMA_priority_level \r
175   * @{\r
176   */\r
177 \r
178 #define DMA_Priority_VeryHigh              ((uint32_t)0x00003000)\r
179 #define DMA_Priority_High                  ((uint32_t)0x00002000)\r
180 #define DMA_Priority_Medium                ((uint32_t)0x00001000)\r
181 #define DMA_Priority_Low                   ((uint32_t)0x00000000)\r
182 #define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \\r
183                                    ((PRIORITY) == DMA_Priority_High) || \\r
184                                    ((PRIORITY) == DMA_Priority_Medium) || \\r
185                                    ((PRIORITY) == DMA_Priority_Low))\r
186 /**\r
187   * @}\r
188   */\r
189 \r
190 /** @defgroup DMA_memory_to_memory \r
191   * @{\r
192   */\r
193 \r
194 #define DMA_M2M_Enable                     ((uint32_t)0x00004000)\r
195 #define DMA_M2M_Disable                    ((uint32_t)0x00000000)\r
196 #define IS_DMA_M2M_STATE(STATE) (((STATE) == DMA_M2M_Enable) || ((STATE) == DMA_M2M_Disable))\r
197 \r
198 /**\r
199   * @}\r
200   */\r
201 \r
202 /** @defgroup DMA_interrupts_definition \r
203   * @{\r
204   */\r
205 \r
206 #define DMA_IT_TC                          ((uint32_t)0x00000002)\r
207 #define DMA_IT_HT                          ((uint32_t)0x00000004)\r
208 #define DMA_IT_TE                          ((uint32_t)0x00000008)\r
209 #define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFFF1) == 0x00) && ((IT) != 0x00))\r
210 \r
211 #define DMA1_IT_GL1                        ((uint32_t)0x00000001)\r
212 #define DMA1_IT_TC1                        ((uint32_t)0x00000002)\r
213 #define DMA1_IT_HT1                        ((uint32_t)0x00000004)\r
214 #define DMA1_IT_TE1                        ((uint32_t)0x00000008)\r
215 #define DMA1_IT_GL2                        ((uint32_t)0x00000010)\r
216 #define DMA1_IT_TC2                        ((uint32_t)0x00000020)\r
217 #define DMA1_IT_HT2                        ((uint32_t)0x00000040)\r
218 #define DMA1_IT_TE2                        ((uint32_t)0x00000080)\r
219 #define DMA1_IT_GL3                        ((uint32_t)0x00000100)\r
220 #define DMA1_IT_TC3                        ((uint32_t)0x00000200)\r
221 #define DMA1_IT_HT3                        ((uint32_t)0x00000400)\r
222 #define DMA1_IT_TE3                        ((uint32_t)0x00000800)\r
223 #define DMA1_IT_GL4                        ((uint32_t)0x00001000)\r
224 #define DMA1_IT_TC4                        ((uint32_t)0x00002000)\r
225 #define DMA1_IT_HT4                        ((uint32_t)0x00004000)\r
226 #define DMA1_IT_TE4                        ((uint32_t)0x00008000)\r
227 #define DMA1_IT_GL5                        ((uint32_t)0x00010000)\r
228 #define DMA1_IT_TC5                        ((uint32_t)0x00020000)\r
229 #define DMA1_IT_HT5                        ((uint32_t)0x00040000)\r
230 #define DMA1_IT_TE5                        ((uint32_t)0x00080000)\r
231 #define DMA1_IT_GL6                        ((uint32_t)0x00100000)\r
232 #define DMA1_IT_TC6                        ((uint32_t)0x00200000)\r
233 #define DMA1_IT_HT6                        ((uint32_t)0x00400000)\r
234 #define DMA1_IT_TE6                        ((uint32_t)0x00800000)\r
235 #define DMA1_IT_GL7                        ((uint32_t)0x01000000)\r
236 #define DMA1_IT_TC7                        ((uint32_t)0x02000000)\r
237 #define DMA1_IT_HT7                        ((uint32_t)0x04000000)\r
238 #define DMA1_IT_TE7                        ((uint32_t)0x08000000)\r
239 \r
240 #define IS_DMA_CLEAR_IT(IT) ((((IT) & 0xF0000000) == 0x00) && ((IT) != 0x00))\r
241 \r
242 #define IS_DMA_GET_IT(IT) (((IT) == DMA1_IT_GL1) || ((IT) == DMA1_IT_TC1) || \\r
243                            ((IT) == DMA1_IT_HT1) || ((IT) == DMA1_IT_TE1) || \\r
244                            ((IT) == DMA1_IT_GL2) || ((IT) == DMA1_IT_TC2) || \\r
245                            ((IT) == DMA1_IT_HT2) || ((IT) == DMA1_IT_TE2) || \\r
246                            ((IT) == DMA1_IT_GL3) || ((IT) == DMA1_IT_TC3) || \\r
247                            ((IT) == DMA1_IT_HT3) || ((IT) == DMA1_IT_TE3) || \\r
248                            ((IT) == DMA1_IT_GL4) || ((IT) == DMA1_IT_TC4) || \\r
249                            ((IT) == DMA1_IT_HT4) || ((IT) == DMA1_IT_TE4) || \\r
250                            ((IT) == DMA1_IT_GL5) || ((IT) == DMA1_IT_TC5) || \\r
251                            ((IT) == DMA1_IT_HT5) || ((IT) == DMA1_IT_TE5) || \\r
252                            ((IT) == DMA1_IT_GL6) || ((IT) == DMA1_IT_TC6) || \\r
253                            ((IT) == DMA1_IT_HT6) || ((IT) == DMA1_IT_TE6) || \\r
254                            ((IT) == DMA1_IT_GL7) || ((IT) == DMA1_IT_TC7) || \\r
255                            ((IT) == DMA1_IT_HT7) || ((IT) == DMA1_IT_TE7))\r
256 \r
257 /**\r
258   * @}\r
259   */\r
260 \r
261 /** @defgroup DMA_flags_definition \r
262   * @{\r
263   */\r
264 #define DMA1_FLAG_GL1                      ((uint32_t)0x00000001)\r
265 #define DMA1_FLAG_TC1                      ((uint32_t)0x00000002)\r
266 #define DMA1_FLAG_HT1                      ((uint32_t)0x00000004)\r
267 #define DMA1_FLAG_TE1                      ((uint32_t)0x00000008)\r
268 #define DMA1_FLAG_GL2                      ((uint32_t)0x00000010)\r
269 #define DMA1_FLAG_TC2                      ((uint32_t)0x00000020)\r
270 #define DMA1_FLAG_HT2                      ((uint32_t)0x00000040)\r
271 #define DMA1_FLAG_TE2                      ((uint32_t)0x00000080)\r
272 #define DMA1_FLAG_GL3                      ((uint32_t)0x00000100)\r
273 #define DMA1_FLAG_TC3                      ((uint32_t)0x00000200)\r
274 #define DMA1_FLAG_HT3                      ((uint32_t)0x00000400)\r
275 #define DMA1_FLAG_TE3                      ((uint32_t)0x00000800)\r
276 #define DMA1_FLAG_GL4                      ((uint32_t)0x00001000)\r
277 #define DMA1_FLAG_TC4                      ((uint32_t)0x00002000)\r
278 #define DMA1_FLAG_HT4                      ((uint32_t)0x00004000)\r
279 #define DMA1_FLAG_TE4                      ((uint32_t)0x00008000)\r
280 #define DMA1_FLAG_GL5                      ((uint32_t)0x00010000)\r
281 #define DMA1_FLAG_TC5                      ((uint32_t)0x00020000)\r
282 #define DMA1_FLAG_HT5                      ((uint32_t)0x00040000)\r
283 #define DMA1_FLAG_TE5                      ((uint32_t)0x00080000)\r
284 #define DMA1_FLAG_GL6                      ((uint32_t)0x00100000)\r
285 #define DMA1_FLAG_TC6                      ((uint32_t)0x00200000)\r
286 #define DMA1_FLAG_HT6                      ((uint32_t)0x00400000)\r
287 #define DMA1_FLAG_TE6                      ((uint32_t)0x00800000)\r
288 #define DMA1_FLAG_GL7                      ((uint32_t)0x01000000)\r
289 #define DMA1_FLAG_TC7                      ((uint32_t)0x02000000)\r
290 #define DMA1_FLAG_HT7                      ((uint32_t)0x04000000)\r
291 #define DMA1_FLAG_TE7                      ((uint32_t)0x08000000)\r
292 \r
293 #define IS_DMA_CLEAR_FLAG(FLAG) ((((FLAG) & 0xF0000000) == 0x00) && ((FLAG) != 0x00))\r
294 \r
295 #define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GL1) || ((FLAG) == DMA1_FLAG_TC1) || \\r
296                                ((FLAG) == DMA1_FLAG_HT1) || ((FLAG) == DMA1_FLAG_TE1) || \\r
297                                ((FLAG) == DMA1_FLAG_GL2) || ((FLAG) == DMA1_FLAG_TC2) || \\r
298                                ((FLAG) == DMA1_FLAG_HT2) || ((FLAG) == DMA1_FLAG_TE2) || \\r
299                                ((FLAG) == DMA1_FLAG_GL3) || ((FLAG) == DMA1_FLAG_TC3) || \\r
300                                ((FLAG) == DMA1_FLAG_HT3) || ((FLAG) == DMA1_FLAG_TE3) || \\r
301                                ((FLAG) == DMA1_FLAG_GL4) || ((FLAG) == DMA1_FLAG_TC4) || \\r
302                                ((FLAG) == DMA1_FLAG_HT4) || ((FLAG) == DMA1_FLAG_TE4) || \\r
303                                ((FLAG) == DMA1_FLAG_GL5) || ((FLAG) == DMA1_FLAG_TC5) || \\r
304                                ((FLAG) == DMA1_FLAG_HT5) || ((FLAG) == DMA1_FLAG_TE5) || \\r
305                                ((FLAG) == DMA1_FLAG_GL6) || ((FLAG) == DMA1_FLAG_TC6) || \\r
306                                ((FLAG) == DMA1_FLAG_HT6) || ((FLAG) == DMA1_FLAG_TE6) || \\r
307                                ((FLAG) == DMA1_FLAG_GL7) || ((FLAG) == DMA1_FLAG_TC7) || \\r
308                                ((FLAG) == DMA1_FLAG_HT7) || ((FLAG) == DMA1_FLAG_TE7))\r
309 /**\r
310   * @}\r
311   */\r
312 \r
313 /** @defgroup DMA_Buffer_Size \r
314   * @{\r
315   */\r
316 \r
317 #define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000))\r
318 \r
319 /**\r
320   * @}\r
321   */\r
322 \r
323 /**\r
324   * @}\r
325   */\r
326 \r
327 /* Exported macro ------------------------------------------------------------*/\r
328 /* Exported functions ------------------------------------------------------- */\r
329 \r
330 /*  Function used to set the DMA configuration to the default reset state *****/ \r
331 void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);\r
332 \r
333 /* Initialization and Configuration functions *********************************/\r
334 void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);\r
335 void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);\r
336 void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);\r
337 \r
338 /* Data Counter functions *****************************************************/\r
339 void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber);\r
340 uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);\r
341 \r
342 /* Interrupts and flags management functions **********************************/\r
343 void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);\r
344 FlagStatus DMA_GetFlagStatus(uint32_t DMA_FLAG);\r
345 void DMA_ClearFlag(uint32_t DMA_FLAG);\r
346 ITStatus DMA_GetITStatus(uint32_t DMA_IT);\r
347 void DMA_ClearITPendingBit(uint32_t DMA_IT);\r
348 \r
349 #ifdef __cplusplus\r
350 }\r
351 #endif\r
352 \r
353 #endif /*__STM32L1xx_DMA_H */\r
354 \r
355 /**\r
356   * @}\r
357   */\r
358 \r
359 /**\r
360   * @}\r
361   */\r
362 \r
363 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r