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)17void 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)24void 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)36void DMA_SetSRCAddress(uint32_t Address) 37 { 38 DMA_SRC_ADDR(DMACH_MEMCP) = Address; 39 } 40 DMA_SetDSRAddress(uint32_t Address)41void DMA_SetDSRAddress(uint32_t Address) 42 { 43 DMA_DEST_ADDR(DMACH_MEMCP) = Address; 44 } 45 DMA_IsChannelEnabled(void)46FunctionalState 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)58FlagStatus DMA_GetFlagStatus(void) 59 { 60 return (FlagStatus)((DMA_STATUS(DMACH_MEMCP) & (1 << DMA_DATA_COMPLETE_BIT_Pos))); 61 } 62 DMA_ClearITPendingBit(void)63void DMA_ClearITPendingBit(void) 64 { 65 DMA_START(DMACH_MEMCP) |= (1 << DMA_CLEAR_IT_BIT_Pos); 66 } 67 DMA_ITConfig(FunctionalState NewState)68void 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