SWM341_dma.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #ifndef __SWM341_DMA_H__
  2. #define __SWM341_DMA_H__
  3. typedef struct {
  4. uint8_t Mode; //DMA_MODE_SINGLE、DMA_MODE_CIRCLE
  5. uint8_t Unit; //DMA_UNIT_BYTE、DMA_UNIT_HALFWORD、DMA_UNIT_WORD
  6. uint32_t Count; //传输 Unit 个数,最大取值0x100000
  7. uint32_t SrcAddr;
  8. uint32_t DstAddr;
  9. uint8_t SrcAddrInc; //0 地址固定 1 地址递增
  10. uint8_t DstAddrInc;
  11. uint8_t Handshake; //传输握手信号:DMA_HS_NO、DMA_CH0_UART0TX、DMA_CH0_SPI0TX、... ...
  12. uint8_t Priority; //DMA_PRI_LOW、DMA_PRI_HIGH
  13. uint32_t INTEn; //中断使能,有效值有 DMA_IT_DONE、DMA_IT_DSTSG_HALF、DMA_IT_DSTSG_DONE、DMA_IT_SRCSG_HALF、DMA_IT_SRCSG_DONE 及其“或”
  14. } DMA_InitStructure;
  15. #define DMA_CH0 0
  16. #define DMA_CH1 1
  17. #define DMA_CH2 2
  18. #define DMA_CH3 3
  19. #define DMA_MODE_SINGLE 0 // 单次模式,传输完成后停止
  20. #define DMA_MODE_CIRCLE 1 // 环形模式,传输完成后从头执行下一轮传输
  21. #define DMA_UNIT_BYTE 0
  22. #define DMA_UNIT_HALFWORD 1
  23. #define DMA_UNIT_WORD 2
  24. #define DMA_PRI_LOW 0
  25. #define DMA_PRI_HIGH 1
  26. #define DMA_HS_NO (0 << 4) // 无握手(Handshake)信号,启动传输后全部传完
  27. #define DMA_HS_SRC (1 << 4) // 源 侧握手信号,启动传输后源 侧生成一个数据,DMA搬运一个Unit
  28. #define DMA_HS_DST (2 << 4) // 目标侧握手信号,启动传输后目标侧索取一个数据,DMA搬运一个Unit
  29. #define DMA_HS_EXT (4 << 4) // 外部 握手信号,启动传输后外部握手来一个脉冲,DMA搬运一个Unit
  30. #define DMA_HS_MSK (7 << 4)
  31. #define DMA_DIR_RX (0 << 7) // SRC --> DST
  32. #define DMA_DIR_TX (1 << 7) // DST --> SRC
  33. #define DMA_DIR_MSK (1 << 7)
  34. // 源侧外设
  35. #define DMA_CH0_UART1RX (0 | DMA_HS_SRC | DMA_DIR_RX)
  36. #define DMA_CH0_SPI1RX (1 | DMA_HS_SRC | DMA_DIR_RX)
  37. #define DMA_CH0_UART2RX (2 | DMA_HS_SRC | DMA_DIR_RX)
  38. #define DMA_CH0_ADC0 (3 | DMA_HS_SRC | DMA_DIR_RX)
  39. #define DMA_CH1_UART0RX (0 | DMA_HS_SRC | DMA_DIR_RX)
  40. #define DMA_CH1_SPI0RX (1 | DMA_HS_SRC | DMA_DIR_RX)
  41. #define DMA_CH1_UART3RX (2 | DMA_HS_SRC | DMA_DIR_RX)
  42. #define DMA_CH2_UART3RX (0 | DMA_HS_SRC | DMA_DIR_RX)
  43. #define DMA_CH2_SPI0RX (1 | DMA_HS_SRC | DMA_DIR_RX)
  44. #define DMA_CH2_UART0RX (2 | DMA_HS_SRC | DMA_DIR_RX)
  45. #define DMA_CH3_UART2RX (0 | DMA_HS_SRC | DMA_DIR_RX)
  46. #define DMA_CH3_SPI1RX (1 | DMA_HS_SRC | DMA_DIR_RX)
  47. #define DMA_CH3_UART1RX (2 | DMA_HS_SRC | DMA_DIR_RX)
  48. #define DMA_CH3_ADC1 (3 | DMA_HS_SRC | DMA_DIR_RX)
  49. // 目标侧外设
  50. #define DMA_CH0_UART0TX (0 | DMA_HS_DST | DMA_DIR_RX)
  51. #define DMA_CH0_SPI0TX (1 | DMA_HS_DST | DMA_DIR_RX)
  52. #define DMA_CH0_UART3TX (2 | DMA_HS_DST | DMA_DIR_RX)
  53. #define DMA_CH1_UART1TX (0 | DMA_HS_DST | DMA_DIR_RX)
  54. #define DMA_CH1_SPI1TX (1 | DMA_HS_DST | DMA_DIR_RX)
  55. #define DMA_CH1_UART2TX (2 | DMA_HS_DST | DMA_DIR_RX)
  56. #define DMA_CH2_UART2TX (0 | DMA_HS_DST | DMA_DIR_RX)
  57. #define DMA_CH2_SPI1TX (1 | DMA_HS_DST | DMA_DIR_RX)
  58. #define DMA_CH2_UART1TX (2 | DMA_HS_DST | DMA_DIR_RX)
  59. #define DMA_CH3_UART3TX (0 | DMA_HS_DST | DMA_DIR_RX)
  60. #define DMA_CH3_SPI0TX (1 | DMA_HS_DST | DMA_DIR_RX)
  61. #define DMA_CH3_UART0TX (2 | DMA_HS_DST | DMA_DIR_RX)
  62. // 外部握手信号
  63. #define DMA_EXHS_TIMR0 (0 | DMA_HS_EXT | DMA_DIR_RX)
  64. #define DMA_EXHS_TIMR1 (1 | DMA_HS_EXT | DMA_DIR_RX)
  65. #define DMA_EXHS_TIMR2 (2 | DMA_HS_EXT | DMA_DIR_RX)
  66. #define DMA_EXHS_TIMR3 (3 | DMA_HS_EXT | DMA_DIR_RX)
  67. #define DMA_EXHS_TIMR4 (4 | DMA_HS_EXT | DMA_DIR_RX)
  68. #define DMA_EXHS_TRIG0 (5 | DMA_HS_EXT | DMA_DIR_RX) // DMA_TRIG0引脚
  69. #define DMA_EXHS_TRIG1 (6 | DMA_HS_EXT | DMA_DIR_RX) // DMA_TRIG1引脚
  70. /* Interrupt Type */
  71. #define DMA_IT_DONE (1 << 0) //Transfer Done
  72. #define DMA_IT_DSTSG_HALF (1 << 8) //Destination Scatter-Gather Transfer Half
  73. #define DMA_IT_DSTSG_DONE (1 << 9) //Destination Scatter-Gather Transfer Done
  74. #define DMA_IT_SRCSG_HALF (1 << 16) //Source Scatter-Gather Transfer Half
  75. #define DMA_IT_SRCSG_DONE (1 << 17) //Source Scatter-Gather Transfer Done
  76. void DMA_CH_Init(uint32_t chn, DMA_InitStructure * initStruct); //DMA通道配置
  77. void DMA_CH_Open(uint32_t chn);
  78. void DMA_CH_Close(uint32_t chn);
  79. void DMA_CH_SetCount(uint32_t chn, uint32_t count);
  80. void DMA_CH_SetSrcAddress(uint32_t chn, uint32_t address);
  81. void DMA_CH_SetDstAddress(uint32_t chn, uint32_t address);
  82. uint32_t DMA_CH_GetRemaining(uint32_t chn);
  83. void DMA_CH_INTEn(uint32_t chn, uint32_t it); //DMA中断使能
  84. void DMA_CH_INTDis(uint32_t chn, uint32_t it); //DMA中断禁止
  85. void DMA_CH_INTClr(uint32_t chn, uint32_t it); //DMA中断标志清除
  86. uint32_t DMA_CH_INTStat(uint32_t chn, uint32_t it); //DMA中断状态查询
  87. #endif //__SWM341_DMA_H__