yc_dma.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. #include "yc_dma.h"
  10. #define DMA_Channel DMACH_MEMCP
  11. #define DMA_CLEAR_IT_BIT_Pos 6
  12. #define DMA_ENTERIT_BIT_Pos 1
  13. #define DMA_DATA_COMPLETE_BIT_Pos 0
  14. void DMA_Init(DMA_InitTypeDef *DMA_InitStruct)
  15. {
  16. DMA_SRC_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemorySourceAddr;
  17. DMA_DEST_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemoryDestAddr;
  18. DMA_LEN(DMACH_MEMCP) = (DMA_InitStruct->DMA_BlockSize << 16) | DMA_InitStruct->DMA_BlockSize;
  19. }
  20. void DMA_ChannelCmd(FunctionalState NewState)
  21. {
  22. if (NewState != DISABLE)
  23. {
  24. DMA_START(DMACH_MEMCP) |= (DMA_ENABLE);
  25. }
  26. else
  27. {
  28. DMA_START(DMACH_MEMCP) &= ~(DMA_ENABLE);
  29. }
  30. }
  31. void DMA_SetSRCAddress(uint32_t Address)
  32. {
  33. DMA_SRC_ADDR(DMACH_MEMCP) = Address;
  34. }
  35. void DMA_SetDSRAddress(uint32_t Address)
  36. {
  37. DMA_DEST_ADDR(DMACH_MEMCP) = Address;
  38. }
  39. FunctionalState DMA_IsChannelEnabled(void)
  40. {
  41. if (1 == (DMA_START(DMACH_MEMCP) & DMA_ENABLE))
  42. {
  43. return ENABLE;
  44. }
  45. else
  46. {
  47. return DISABLE;
  48. }
  49. }
  50. FlagStatus DMA_GetFlagStatus(void)
  51. {
  52. return (FlagStatus)((DMA_STATUS(DMACH_MEMCP) & (1 << DMA_DATA_COMPLETE_BIT_Pos)));
  53. }
  54. void DMA_ClearITPendingBit(void)
  55. {
  56. DMA_START(DMACH_MEMCP) |= (1 << DMA_CLEAR_IT_BIT_Pos);
  57. }
  58. void DMA_ITConfig(FunctionalState NewState)
  59. {
  60. DMA_CONFIG(DMACH_MEMCP) &= ~(1 << DMA_ENTERIT_BIT_Pos);
  61. DMA_CONFIG(DMACH_MEMCP) |= (NewState << DMA_ENTERIT_BIT_Pos);
  62. }