1 /*
2 File Name    : yc_dma.c
3 Author       : Yichip
4 Version      : V1.0
5 Date         : 2018/03/27
6 Description  : DMA Mem_TO_Mem Mode encapsulation.
7 		       If enable DMA interrupt ,enter interrupt after sending data by default,and just one DMA IT Mode.
8 */
9 
10 #include "yc_dma.h"
11 
12 #define DMA_Channel DMACH_MEMCP
13 #define DMA_CLEAR_IT_BIT_Pos 6
14 #define DMA_ENTERIT_BIT_Pos 1
15 #define DMA_DATA_COMPLETE_BIT_Pos 0
16 
DMA_Init(DMA_InitTypeDef * DMA_InitStruct)17 void DMA_Init(DMA_InitTypeDef *DMA_InitStruct)
18 {
19 	DMA_SRC_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemorySourceAddr;
20 	DMA_DEST_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemoryDestAddr;
21 	DMA_LEN(DMACH_MEMCP) = (DMA_InitStruct->DMA_BlockSize << 16) | DMA_InitStruct->DMA_BlockSize;
22 }
23 
DMA_ChannelCmd(FunctionalState NewState)24 void DMA_ChannelCmd(FunctionalState NewState)
25 {
26 	if (NewState != DISABLE)
27 	{
28 		DMA_START(DMACH_MEMCP) |= (DMA_ENABLE);
29 	}
30 	else
31 	{
32 		DMA_START(DMACH_MEMCP) &= ~(DMA_ENABLE);
33 	}
34 }
35 
DMA_SetSRCAddress(uint32_t Address)36 void DMA_SetSRCAddress(uint32_t Address)
37 {
38 	DMA_SRC_ADDR(DMACH_MEMCP) = Address;
39 }
40 
DMA_SetDSRAddress(uint32_t Address)41 void DMA_SetDSRAddress(uint32_t Address)
42 {
43 	DMA_DEST_ADDR(DMACH_MEMCP) = Address;
44 }
45 
DMA_IsChannelEnabled(void)46 FunctionalState DMA_IsChannelEnabled(void)
47 {
48 	if (1 == (DMA_START(DMACH_MEMCP) & DMA_ENABLE))
49 	{
50 		return ENABLE;
51 	}
52 	else
53 	{
54 		return DISABLE;
55 	}
56 }
57 
DMA_GetFlagStatus(void)58 FlagStatus DMA_GetFlagStatus(void)
59 {
60 	return (FlagStatus)((DMA_STATUS(DMACH_MEMCP) & (1 << DMA_DATA_COMPLETE_BIT_Pos)));
61 }
62 
DMA_ClearITPendingBit(void)63 void DMA_ClearITPendingBit(void)
64 {
65 	DMA_START(DMACH_MEMCP) |= (1 << DMA_CLEAR_IT_BIT_Pos);
66 }
67 
DMA_ITConfig(FunctionalState NewState)68 void DMA_ITConfig(FunctionalState NewState)
69 {
70 	DMA_CONFIG(DMACH_MEMCP) &= ~(1 << DMA_ENTERIT_BIT_Pos);
71 	DMA_CONFIG(DMACH_MEMCP) |= (NewState << DMA_ENTERIT_BIT_Pos);
72 }
73