#ifndef __FU6522_72_DMA_H__
#define __FU6522_72_DMA_H__

#include <FU6522_72_MCU.h>

#ifdef __cplusplus
extern "C" {
#endif

// DMA Pipe Config
#define DMA_PIPE        (DMACFG2 | DMACFG1 | DMACFG0)
#define UART1_XDATA     0x00                                         // DMA管道--UART1-->XDATA
#define XDATA_UART1     (DMACFG0)                                    // DMA管道--UART1<--XDATA
#define I2C_XDATA       (DMACFG1)                                    // DMA管道--I2C  -->XDATA
#define XDATA_I2C       (DMACFG0 | DMACFG1)                          // DMA管道--I2C  <--XDATA
#define SPI_XDATA       (DMACFG2)                                    // DMA管道--SPI  -->XDATA
#define XDATA_SPI       (DMACFG2 | DMACFG0)                          // DMA管道--SPI  <--XDATA
#define UART2_XDATA     (DMACFG2 | DMACFG1)                          // DMA管道--UART2-->XDATA
#define XDATA_UART2     (DMACFG2 | DMACFG1 | DMACFG0)                // DMA管道--UART2<--XDATA

// DMA IE config
#define DMA_IE_EN       DMAIE                                        // 使能DMA中断
#define DMA_IE_DIS      0x00                                         // 禁能DMA中断

// DMA transmission order
#define DMA_FHSB        ENDIAN                                       // DMA先发高8位
#define DMA_FLSB        0x00                                         // DMA先发低8位

#define Wait_DMA(a)       while (ReadBit(*(&DMA0_CR0 + a), DMABSY))
#define Switch_DMA(a)     SetBit(*(&DMA0_CR0 + a), DMAEN | DMABSY)

void Conf_DMA(uint8_t DMAx, uint8_t DMAPipe, uint16_t DMAAddr, uint8_t DMALen);

#ifdef __cplusplus
}
#endif

#endif
