]> git.sur5r.net Git - freertos/blob - Demo/ARM7_STR75x_GCC/STLibrary/src/75x_dma.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / ARM7_STR75x_GCC / STLibrary / src / 75x_dma.c
1 /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************\r
2 * File Name          : 75x_dma.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 03/10/2006 \r
5 * Description        : This file provides all the DMA software functions.\r
6 ********************************************************************************\r
7 * History:\r
8 * 07/17/2006 : V1.0\r
9 * 03/10/2006 : V0.1\r
10 ********************************************************************************\r
11 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
13 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, \r
14 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
15 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING \r
16 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17 *******************************************************************************/\r
18 \r
19 /* Includes ------------------------------------------------------------------*/\r
20 #include "75x_dma.h"\r
21 #include "75x_mrcc.h"\r
22 \r
23 /* Private typedef -----------------------------------------------------------*/\r
24 /* Private define ------------------------------------------------------------*/\r
25 /* Private macro -------------------------------------------------------------*/\r
26 /* Private variables ---------------------------------------------------------*/\r
27 \r
28 /* DMA enable */\r
29 #define DMA_Enable     0x0001\r
30 #define DMA_Disable    0xFFFE\r
31 \r
32 /* DMA Last Buffer Sweep */\r
33 #define DMA_Last0_Enable_Mask    0x0001\r
34 #define DMA_Last0_Disable_Mask   0xFFFE\r
35 #define DMA_Last1_Enable_Mask    0x0002\r
36 #define DMA_Last1_Disable_Mask   0xFFFD\r
37 #define DMA_Last2_Enable_Mask    0x0004\r
38 #define DMA_Last2_Disable_Mask   0xFFFB\r
39 #define DMA_Last3_Enable_Mask    0x0008\r
40 #define DMA_Last3_Disable_Mask   0xFFF7\r
41 \r
42 /* DMA Masks */\r
43 #define DMA_Stream0_MASK_Mask  0xFFEE\r
44 #define DMA_Stream0_CLR_Mask   0x0011\r
45 #define DMA_Stream0_LAST_Mask  0xFFFE\r
46 \r
47 #define DMA_Stream1_MASK_Mask  0xFFDD\r
48 #define DMA_Stream1_CLR_Mask   0x0022\r
49 #define DMA_Stream1_LAST_Mask  0xFFFD\r
50 \r
51 #define DMA_Stream2_MASK_Mask  0xFFBB\r
52 #define DMA_Stream2_CLR_Mask   0x0044\r
53 #define DMA_Stream2_LAST_Mask  0xFFFB\r
54 \r
55 #define DMA_Stream3_MASK_Mask  0xFF77\r
56 #define DMA_Stream3_CLR_Mask   0x0088\r
57 #define DMA_Stream3_LAST_Mask  0xFFF7\r
58 \r
59 #define DMA_SRCSize_Mask   0xFFE7\r
60 #define DMA_SRCBurst_Mask  0xFF9F\r
61 #define DMA_DSTSize_Mask   0xFE7F     \r
62 \r
63 /* Private function prototypes -----------------------------------------------*/\r
64 /* Private functions ---------------------------------------------------------*/\r
65 /*******************************************************************************\r
66 * Function Name  : DMA_DeInit\r
67 * Description    : Deinitializes the DMA streamx registers to their default reset\r
68 *                  values.\r
69 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
70 *                    Stream.\r
71 * Output         : None\r
72 * Return         : None\r
73 *******************************************************************************/\r
74 void DMA_DeInit(DMA_Stream_TypeDef* DMA_Streamx)\r
75 {\r
76   /* Reset streamx source base address register */\r
77   DMA_Streamx->SOURCEL = 0;\r
78   DMA_Streamx->SOURCEH = 0;\r
79 \r
80   /* Reset streamx destination base address register */\r
81   DMA_Streamx->DESTL = 0;\r
82   DMA_Streamx->DESTH = 0;\r
83 \r
84   /* Reset streamx maximum count register */\r
85   DMA_Streamx->MAX  = 0;\r
86   /* Reset streamx control register */\r
87   DMA_Streamx->CTRL = 0;\r
88   /* Reset streamx last used buffer location register */\r
89   DMA_Streamx->LUBUFF = 0;\r
90 \r
91   switch(*(u32*)&DMA_Streamx)\r
92   {\r
93     case DMA_Stream0_BASE:\r
94       /* Reset interrupt mask, clear and flag bits for stream0 */\r
95       DMA->MASK &= DMA_Stream0_MASK_Mask;\r
96       DMA->CLR |= DMA_Stream0_CLR_Mask;\r
97       DMA->LAST &= DMA_Stream0_LAST_Mask;\r
98       break;\r
99 \r
100     case DMA_Stream1_BASE:\r
101       /* Reset interrupt mask, clear and flag bits for stream1 */\r
102       DMA->MASK &= DMA_Stream1_MASK_Mask;\r
103       DMA->CLR |= DMA_Stream1_CLR_Mask;\r
104       DMA->LAST &= DMA_Stream1_LAST_Mask;\r
105       break;\r
106 \r
107     case DMA_Stream2_BASE:\r
108     /* Reset interrupt mask, clear and flag bits for stream2 */\r
109       DMA->MASK &= DMA_Stream2_MASK_Mask;\r
110       DMA->CLR |= DMA_Stream2_CLR_Mask;\r
111       DMA->LAST &= DMA_Stream2_LAST_Mask;\r
112       break;\r
113 \r
114     case DMA_Stream3_BASE:\r
115       /* Reset interrupt mask, clear and flag bits for stream3 */\r
116       DMA->MASK &= DMA_Stream3_MASK_Mask;\r
117       DMA->CLR |= DMA_Stream3_CLR_Mask;\r
118       DMA->LAST &= DMA_Stream3_LAST_Mask;\r
119       break;\r
120       \r
121     default:\r
122       break;\r
123   }\r
124 }\r
125 \r
126 /*******************************************************************************\r
127 * Function Name  : DMA_Init\r
128 * Description    : Initializes the DMAx stream according to the specified\r
129 *                  parameters in the DMA_InitStruct.\r
130 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
131 *                    Stream.\r
132 *                  - DMA_InitStruct: pointer to a DMA_InitTypeDef structure that\r
133 *                    contains the configuration information for the specified\r
134 *                    DMA stream.\r
135 * Output         : None\r
136 * Return         : None\r
137 ******************************************************************************/\r
138 void DMA_Init(DMA_Stream_TypeDef*  DMA_Streamx, DMA_InitTypeDef* DMA_InitStruct)\r
139 {\r
140   /* set the buffer Size */\r
141    DMA_Streamx->MAX = DMA_InitStruct->DMA_BufferSize ;\r
142 \r
143   /* Configure the incrementation of the current source Register */\r
144   if(DMA_InitStruct->DMA_SRC == DMA_SRC_INCR)\r
145   {\r
146     /* Increment current source register */\r
147     DMA_Streamx->CTRL |= DMA_SRC_INCR;\r
148   }\r
149   else \r
150   {\r
151     /* Current source register unchanged */\r
152     DMA_Streamx->CTRL &= DMA_SRC_NOT_INCR;\r
153   }\r
154   \r
155   /* Configure the incrementation of the current destination Register */\r
156   if(DMA_InitStruct->DMA_DST == DMA_DST_INCR)\r
157   {\r
158     /* Increment current source register */\r
159     DMA_Streamx->CTRL |= DMA_DST_INCR;\r
160   }\r
161   else \r
162   {\r
163     /* Current source register unchanged */\r
164     DMA_Streamx->CTRL &= DMA_DST_NOT_INCR;\r
165   }\r
166   \r
167   /* Clear source to DMA data width SOSIZE[1:0] bits */\r
168   DMA_Streamx->CTRL &= DMA_SRCSize_Mask;\r
169   /* Set the source to DMA data width */\r
170   DMA_Streamx->CTRL |= DMA_InitStruct->DMA_SRCSize;\r
171   \r
172   /* Clear the DMA peripheral burst size SOBURST[1:0] bits */\r
173   DMA_Streamx->CTRL &= DMA_SRCBurst_Mask;\r
174   /* Set the DMA peripheral burst size */\r
175   DMA_Streamx->CTRL |= DMA_InitStruct->DMA_SRCBurst;\r
176   \r
177   /* Clear destination to DMA dat width DESIZE[1:0] bits */\r
178   DMA_Streamx->CTRL &= DMA_DSTSize_Mask;\r
179   /* Set the destination to DMA data width */\r
180   DMA_Streamx->CTRL |= DMA_InitStruct->DMA_DSTSize;\r
181   \r
182   /* Configure the circular mode */\r
183   if(DMA_InitStruct->DMA_Mode == DMA_Mode_Circular)\r
184   {\r
185     /* Set circular mode */\r
186     DMA_Streamx->CTRL |= DMA_Mode_Circular;\r
187   }\r
188   else \r
189   {\r
190     /* Set normal mode */\r
191     DMA_Streamx->CTRL &= DMA_Mode_Normal;\r
192   } \r
193   \r
194   /* Configure the direction transfer */\r
195   if(DMA_InitStruct->DMA_DIR == DMA_DIR_PeriphDST)\r
196   {\r
197     /* Set peripheral as destination */\r
198     DMA_Streamx->CTRL |= DMA_DIR_PeriphDST;\r
199   }\r
200   else \r
201   {\r
202     /* Set peripheral as source */\r
203     DMA_Streamx->CTRL &= DMA_DIR_PeriphSRC;\r
204   } \r
205   \r
206   /* Configure the memory to memory transfer only for stream3 */\r
207   if(DMA_Streamx == DMA_Stream3)\r
208   {\r
209     if(DMA_InitStruct->DMA_M2M == DMA_M2M_Enable)\r
210     {\r
211       /* Enable memory to memory transfer for stream3 */\r
212       DMA_Streamx->CTRL |= DMA_M2M_Enable;\r
213     }\r
214     else \r
215     {\r
216       /* Disable memory to memory transfer for stream3 */\r
217       DMA_Streamx->CTRL &= DMA_M2M_Disable;\r
218     }   \r
219   }\r
220 \r
221   /* Configure the source base address */\r
222   DMA_Streamx->SOURCEL = DMA_InitStruct->DMA_SRCBaseAddr;\r
223   DMA_Streamx->SOURCEH = DMA_InitStruct->DMA_SRCBaseAddr >> 16;\r
224 \r
225   /* Configure the destination base address */\r
226   DMA_Streamx->DESTL = DMA_InitStruct->DMA_DSTBaseAddr;\r
227   DMA_Streamx->DESTH = DMA_InitStruct->DMA_DSTBaseAddr >> 16;\r
228 }\r
229 \r
230 /*******************************************************************************\r
231 * Function Name  : DMA_StructInit\r
232 * Description    : Fills each DMA_InitStruct member with its default value.\r
233 * Input          : DMA_InitStruct : pointer to a DMA_InitTypeDef structure\r
234 *                  which will be initialized.\r
235 * Output         : None\r
236 * Return         : None\r
237 *******************************************************************************/\r
238 void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct)\r
239 {\r
240   /* Initialize the DMA_BufferSize member */\r
241   DMA_InitStruct->DMA_BufferSize = 0;\r
242 \r
243   /* initialize the DMA_SRCBaseAddr member */\r
244   DMA_InitStruct->DMA_SRCBaseAddr = 0;\r
245 \r
246   /* Initialize the DMA_DSTBaseAddr member */\r
247   DMA_InitStruct ->DMA_DSTBaseAddr = 0;\r
248   \r
249   /* Initialize the DMA_SRC member */\r
250   DMA_InitStruct->DMA_SRC = DMA_SRC_NOT_INCR;\r
251   \r
252   /* Initialize the DMA_DST member */\r
253   DMA_InitStruct->DMA_DST = DMA_DST_NOT_INCR;\r
254   \r
255   /* Initialize the DMA_SRCSize member */\r
256   DMA_InitStruct->DMA_SRCSize = DMA_SRCSize_Byte;\r
257   \r
258   /* Initialize the DMA_SRCBurst member */\r
259   DMA_InitStruct->DMA_SRCBurst = DMA_SRCBurst_1Data;\r
260   \r
261   /* Initialize the DMA_DSTSize member */\r
262   DMA_InitStruct->DMA_DSTSize = DMA_DSTSize_Byte;\r
263   \r
264   /* Initialize the DMA_Mode member */\r
265   DMA_InitStruct->DMA_Mode = DMA_Mode_Normal;\r
266   \r
267   /* Initialize the DMA_M2M member */\r
268   DMA_InitStruct->DMA_M2M =  DMA_M2M_Disable;\r
269 \r
270   /* Initialize the DMA_DIR member */\r
271   DMA_InitStruct->DMA_DIR = DMA_DIR_PeriphSRC;\r
272 }\r
273 \r
274 /*******************************************************************************\r
275 * Function Name  : DMA_Cmd\r
276 * Description    : Enables or disables the specified DMA stream.\r
277 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
278 *                    Stream.\r
279 *                  - NewState: new state of the DMAx stream. This parameter can\r
280 *                  be: ENABLE or DISABLE.\r
281 * Output         : None\r
282 * Return         : None\r
283 *******************************************************************************/\r
284 void DMA_Cmd(DMA_Stream_TypeDef*  DMA_Streamx, FunctionalState NewState)\r
285 {\r
286   if(NewState == ENABLE)\r
287   {\r
288     /* Enable the selected DMA streamx */\r
289     DMA_Streamx->CTRL |= DMA_Enable;\r
290   }\r
291   else\r
292   {\r
293     /* Disable the selected DMA streamx */\r
294     DMA_Streamx->CTRL &= DMA_Disable;\r
295   }\r
296 }\r
297 \r
298 /*******************************************************************************\r
299 * Function Name  : DMA_ITConfig\r
300 * Description    : Enables or disables the specified DMA interrupts.\r
301 * Input          : - DMA_IT: specifies the DMA interrupts sources to be enabled\r
302 *                    or disabled. This parameter can be any combination of the\r
303 *                    following values:\r
304 *                         - DMA_IT_SI0: Stream0 transfer end interrupt mask\r
305 *                         - DMA_IT_SI1: Stream1 transfer end interrupt mask\r
306 *                         - DMA_IT_SI2: Stream2 transfer end interrupt mask\r
307 *                         - DMA_IT_SI3: Stream3 transfer end interrupt mask\r
308 *                         - DMA_IT_SE0: Stream0 transfer error interrupt mask\r
309 *                         - DMA_IT_SE1: Stream1 transfer error interrupt mask\r
310 *                         - DMA_IT_SE2: Stream2 transfer error interrupt mask\r
311 *                         - DMA_IT_SE3: Stream3 transfer error interrupt mask\r
312 *                         - DMA_IT_ALL: ALL DMA interrupts mask\r
313 *                  - NewState: new state of the specified DMA interrupts.\r
314 *                    This parameter can be: ENABLE or DISABLE.\r
315 * Output         : None\r
316 * Return         : None\r
317 *******************************************************************************/\r
318 void DMA_ITConfig(u16 DMA_IT, FunctionalState NewState)\r
319 {\r
320   if(NewState == ENABLE)\r
321   {\r
322     /* Enable the selected DMA interrupts */\r
323     DMA->MASK |= DMA_IT;\r
324   }\r
325   else\r
326   {\r
327     /* Disable the selected DMA interrupts */\r
328     DMA->MASK &= ~DMA_IT;\r
329   }\r
330 }\r
331 \r
332 /*******************************************************************************\r
333 * Function Name  : DMA_GetCurrDSTAddr\r
334 * Description    : Returns the current value of the destination address pointer\r
335 *                  related to the specified DMA stream.\r
336 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
337 *                    Stream.\r
338 * Output         : None\r
339 * Return         : The current value of the destination address pointer related\r
340 *                  to the specified DMA stream.\r
341 *******************************************************************************/\r
342 u32 DMA_GetCurrDSTAddr(DMA_Stream_TypeDef*  DMA_Streamx)\r
343\r
344   u32 Tmp = 0;\r
345 \r
346   /* Get high current destination address */\r
347   Tmp = (DMA_Streamx->DECURRH)<<16;\r
348   /* Get low current destination address */\r
349   Tmp |= DMA_Streamx->DECURRL;\r
350 \r
351   /* Return the current destination address value for streamx */\r
352   return Tmp;\r
353 }\r
354 \r
355 /*******************************************************************************\r
356 * Function Name  : DMA_GetCurrSRCAddr\r
357 * Description    : Returns the current value of the source address pointer\r
358 *                  related to the specified DMA stream.\r
359 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
360 *                    Stream.\r
361 * Output         : None\r
362 * Return         : The current value of the source address pointer related to\r
363 *                  the specified DMA stream.\r
364 *******************************************************************************/\r
365 u32 DMA_GetCurrSRCAddr(DMA_Stream_TypeDef*  DMA_Streamx)\r
366 {\r
367   u32 Tmp = 0;\r
368 \r
369   /* Get high current source address */\r
370   Tmp = (DMA_Streamx->SOCURRH)<<16;\r
371   /* Get slow current source address */\r
372   Tmp |= DMA_Streamx->SOCURRL;\r
373 \r
374   /* Return the current source address value for streamx */\r
375   return Tmp;\r
376 }\r
377 \r
378 /*******************************************************************************\r
379 * Function Name  : DMA_GetTerminalCounter\r
380 * Description    : Returns the number of data units remaining in the current\r
381 *                  DMA stream transfer.\r
382 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
383 *                    Stream.\r
384 * Output         : None\r
385 * Return         : The number of data units remaining in the current DMA stream\r
386 *                  transfer.\r
387 *******************************************************************************/\r
388 u16 DMA_GetTerminalCounter(DMA_Stream_TypeDef*  DMA_Streamx)\r
389 {\r
390   /* Return the terminal counter value for streamx */\r
391   return(DMA_Streamx->TCNT);\r
392 }\r
393 \r
394 /*******************************************************************************\r
395 * Function Name  : DMA_LastBufferSweepConfig\r
396 * Description    : Activates or disactivates the last buffer sweep mode for the \r
397 *                  DMA streamx configured in circular buffer mode.\r
398 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
399 *                    Stream.\r
400 *                  - NewState: new state of the Last buffer sweep DMA_Streamx.                 \r
401 *                    This parameter can be: ENABLE or DISABLE.\r
402 * Output         : None\r
403 * Return         : None\r
404 *******************************************************************************/\r
405 void DMA_LastBufferSweepConfig(DMA_Stream_TypeDef* DMA_Streamx, FunctionalState NewState)\r
406 {  \r
407   switch(*(u32*)&DMA_Streamx)\r
408   {\r
409     case DMA_Stream0_BASE:\r
410       if(NewState == ENABLE)\r
411       {\r
412         /* Activates the last circular buffer sweep mode for stream0 */\r
413         DMA->LAST |= DMA_Last0_Enable_Mask;\r
414       }\r
415       else\r
416       {\r
417         /* Disactivates the last circular buffer sweep mode for stream0 */\r
418         DMA->LAST &= DMA_Last0_Disable_Mask;\r
419       } \r
420       break;\r
421 \r
422     case DMA_Stream1_BASE:\r
423       if(NewState == ENABLE)\r
424       {\r
425         /* Activates the last circular buffer sweep mode for stream1 */\r
426         DMA->LAST |= DMA_Last1_Enable_Mask;\r
427       }\r
428       else\r
429       {\r
430         /* Disactivates the last circular buffer sweep mode for stream1 */\r
431         DMA->LAST &= DMA_Last1_Disable_Mask;\r
432       } \r
433       break;\r
434 \r
435     case DMA_Stream2_BASE:\r
436       if(NewState == ENABLE)\r
437       {\r
438         /* Activates the last circular buffer sweep mode for stream2 */\r
439         DMA->LAST |= DMA_Last2_Enable_Mask;\r
440       }\r
441       else\r
442       {\r
443         /* Disactivates the last circular buffer sweep mode for stream2 */\r
444         DMA->LAST &= DMA_Last2_Disable_Mask;\r
445       } \r
446       break;\r
447 \r
448     case DMA_Stream3_BASE:\r
449       if(NewState == ENABLE)\r
450       {\r
451         /* Activates the last circular buffer sweep mode for stream3 */\r
452         DMA->LAST |= DMA_Last3_Enable_Mask;\r
453       }\r
454       else\r
455       {\r
456         /* Disactivates the last circular buffer sweep mode for stream3 */\r
457         DMA->LAST &= DMA_Last3_Disable_Mask;\r
458       } \r
459       break;\r
460     \r
461     default:\r
462       break;      \r
463   }\r
464 }\r
465 \r
466 /*******************************************************************************\r
467 * Function Name  : DMA_LastBufferAddrConfig\r
468 * Description    : Configures the circular buffer position where the last data \r
469 *                  to be used by the specified DMA stream is located.\r
470 * Input          : - DMA_Streamx: where x can be 0, 1, 2 or 3 to select the DMA\r
471 *                    Stream.\r
472 *                  - DMA_LastBufferAddr: specifies the circular buffer position\r
473 *                    where the last data to be used by the specified DMA stream\r
474 *                    is located.\r
475 *                    This member must be a number between 0 and the stream BufferSize-1.\r
476 * Output         : None\r
477 * Return         : None\r
478 *******************************************************************************/\r
479 void DMA_LastBufferAddrConfig(DMA_Stream_TypeDef*  DMA_Streamx, u16 DMA_LastBufferAddr)\r
480 {\r
481   /* Set the streamx last data circular buffer location */\r
482   DMA_Streamx->LUBUFF = DMA_LastBufferAddr;\r
483 }\r
484 \r
485 /*******************************************************************************\r
486 * Function Name  : DMA_GetFlagStatus\r
487 * Description    : Checks whether the specified DMA flag is set or not.\r
488 * Input          : - DMA_FLAG: specifies the flag to check. This parameter can \r
489 *                    be one of the following values:\r
490 *                         - DMA_FLAG_SI0:  Stream0 transfer end flag.\r
491 *                         - DMA_FLAG_SI1:  Stream1 transfer end flag.\r
492 *                         - DMA_FLAG_SI2:  Stream2 transfer end flag.\r
493 *                         - DMA_FLAG_SI3:  Stream3 transfer end flag.\r
494 *                         - DMA_FLAG_SE0:  Stream0 transfer error flag.\r
495 *                         - DMA_FLAG_SE1:  Stream1 transfer error flag.\r
496 *                         - DMA_FLAG_SE2:  Stream2 transfer error flag.\r
497 *                         - DMA_FLAG_SE3:  Stream3 transfer error flag.\r
498 *                         - DMA_FLAG_ACT0: Stream0 status.\r
499 *                         - DMA_FLAG_ACT1: Stream1 status.\r
500 *                         - DMA_FLAG_ACT2: Stream2 status.\r
501 *                         - DMA_FLAG_ACT3: Stream3 status.\r
502 * Output         : None\r
503 * Return         : The new state of DMA_FLAG (SET or RESET).\r
504 *******************************************************************************/\r
505 FlagStatus DMA_GetFlagStatus(u16 DMA_FLAG)\r
506 {\r
507   /* Check the status of the specified DMA flag */\r
508   if((DMA->STATUS & DMA_FLAG) != RESET)\r
509   {\r
510     /* Return SET if DMA_FLAG is set */\r
511     return SET;\r
512   }\r
513   else\r
514   {\r
515     /* Return RESET if DMA_FLAG is reset */\r
516     return RESET;\r
517   }\r
518 }\r
519 \r
520 /*******************************************************************************\r
521 * Function Name  : DMA_ClearFlag\r
522 * Description    : Clears the DMA\92s pending flags.\r
523 * Input          : - DMA_FLAG: specifies the flag to clear. This parameter can \r
524 *                    be any combination of the following values:\r
525 *                         - DMA_FLAG_SI0:  Stream0 transfer end flag.\r
526 *                         - DMA_FLAG_SI1:  Stream1 transfer end flag.\r
527 *                         - DMA_FLAG_SI2:  Stream2 transfer end flag.\r
528 *                         - DMA_FLAG_SI3:  Stream3 transfer end flag.\r
529 *                         - DMA_FLAG_SE0:  Stream0 transfer error flag.\r
530 *                         - DMA_FLAG_SE1:  Stream1 transfer error flag.\r
531 *                         - DMA_FLAG_SE2:  Stream2 transfer error flag.\r
532 *                         - DMA_FLAG_SE3:  Stream3 transfer error flag.\r
533 * Output         : None\r
534 * Return         : None\r
535 *******************************************************************************/\r
536 void DMA_ClearFlag(u16 DMA_FLAG)\r
537 {\r
538   /* Clear the selected DMA flags */ \r
539   DMA->CLR = DMA_FLAG ;\r
540 }\r
541 \r
542 /*******************************************************************************\r
543 * Function Name  : DMA_GetITStatus\r
544 * Description    : Checks whether the specified DMA interrupt has occured or not.\r
545 * Input          : - DMA_IT: specifies the DMA interrupt source to check.  \r
546 *                    This parameter can be one of the following values:\r
547 *                         - DMA_IT_SI0: Stream0 transfer end interrupt \r
548 *                         - DMA_IT_SI1: Stream1 transfer end interrupt \r
549 *                         - DMA_IT_SI2: Stream2 transfer end interrupt \r
550 *                         - DMA_IT_SI3: Stream3 transfer end interrupt \r
551 *                         - DMA_IT_SE0: Stream0 transfer error interrupt \r
552 *                         - DMA_IT_SE1: Stream1 transfer error interrupt \r
553 *                         - DMA_IT_SE2: Stream2 transfer error interrupt \r
554 *                         - DMA_IT_SE3: Stream3 transfer error interrupt \r
555 * Output         : None\r
556 * Return         : The new state of DMA_IT (SET or RESET).\r
557 *******************************************************************************/\r
558 ITStatus DMA_GetITStatus(u16 DMA_IT)\r
559 {\r
560   /* Check the status of the specified DMA interrupt */\r
561   if((DMA->STATUS & DMA_IT) != RESET)\r
562   {\r
563     /* Return SET if the DMA interrupt flag is set */\r
564     return SET;\r
565   }\r
566   else\r
567   {\r
568     /* Return RESET if the DMA interrupt flag is reset */\r
569     return RESET;\r
570   }\r
571 }\r
572 \r
573 /*******************************************************************************\r
574 * Function Name  : DMA_ClearITPendingBit\r
575 * Description    : Clears the DMA\92s interrupt pending bits. \r
576 * Input          : - DMA_IT: specifies the interrupt pending bit to clear.  \r
577 *                    This parameter can be any combination of the following values:\r
578 *                         - DMA_IT_SI0:  Stream0 transfer end interrupt.\r
579 *                         - DMA_IT_SI1:  Stream1 transfer end interrupt.\r
580 *                         - DMA_IT_SI2:  Stream2 transfer end interrupt.\r
581 *                         - DMA_IT_SI3:  Stream3 transfer end interrupt.\r
582 *                         - DMA_IT_SE0:  Stream0 transfer error interrupt.\r
583 *                         - DMA_IT_SE1:  Stream1 transfer error interrupt.\r
584 *                         - DMA_IT_SE2:  Stream2 transfer error interrupt.\r
585 *                         - DMA_IT_SE3:  Stream3 transfer error interrupt.\r
586 *                         - DMA_IT_ALL:  All DMA interrupts.\r
587 * Output         : None\r
588 * Return         : None\r
589 *******************************************************************************/\r
590 void DMA_ClearITPendingBit(u16 DMA_IT)\r
591 {\r
592   /* Clear the selected DMA interrupts pending bits */\r
593   DMA->CLR = DMA_IT ;\r
594 }\r
595 \r
596 /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/\r