HC32L17x的LL驱动库之dma

#include "hc32l1xx_ll_dma.h"

///
//函        数:
//功        能:
//输入参数:
//输出参数:
//说        明:
//
uint8_t LL_DMA_DeInit(DMA_TypeDef* DMAx, uint32_t Channel)
{
    __IO uint32_t* dmac = NULL;
    dmac = &(DMAx->CONFA0);
    Channel <<= 4;
    dmac += Channel;
    WRITE_REG((*dmac), 0);

    dmac = &(DMAx->CONFB0);
    dmac += Channel;
    WRITE_REG((*dmac), 0);
    return 0;
}

///
//函        数:
//功        能:
//输入参数:
//输出参数:
//说        明:
//
uint8_t LL_DMA_Init(DMA_TypeDef* DMAx, uint32_t Channel, LL_DMA_InitTypeDef* DMA_InitStruct)
{
    //---设置优先级
    LL_DMA_SetPrority(DMAx, DMA_InitStruct->Prority);
    //---配置触发请求
    LL_DMA_SetTrigSource(DMAx, Channel, DMA_InitStruct->PeriphRequest);
    //---设置数据块大小
    LL_DMA_SetDataBlockSize(DMAx, Channel, DMA_InitStruct->DataSize);
    //---计算数块个数
    DMA_InitStruct->PeriphRequest = DMA_InitStruct->NbData / DMA_InitStruct->DataSize;
    DMA_InitStruct->NbData = DMA_InitStruct->PeriphRequest;
    //---判断是否有数据
    if ((DMA_InitStruct->NbData % DMA_InitStruct->DataSize)!=0)
    {
        DMA_InitStruct->NbData +=1;
    }
    LL_DMA_SetDataBlockNum(DMAx, Channel, DMA_InitStruct->NbData);
    //---设置传输模式
    LL_DMA_SetTransferMode(DMAx, Channel, DMA_InitStruct->Mode);
    //---设置数据位宽
    LL_DMA_SetDataWidth(DMAx, Channel, DMA_InitStruct->DataWidth);
    //---设置DMA源地址自增模式
    LL_DMA_SetSourceAddrIncreaseMode(DMAx, Channel, DMA_InitStruct->PeriphOrM2MSrcIncMode);
    //---设置DMA目的地址自增模式
    LL_DMA_SetDestinateAddrIncreaseMode(DMAx, Channel, DMA_InitStruct->MemoryOrM2MDstIncMode);
    //---设置DMA源地址自动重载
    LL_DMA_EnableSourceAddrReload(DMAx, Channel);
    //---设置DMA目的地址自动重载
    LL_DMA_EnableDestinateAddrReload(DMAx, Channel);
    //---禁用DMA传输完成配置
    LL_DMA_SetChannelMode(DMAx, Channel,LL_DMA_CHANNEL_SINGLE);
    //---设置源地址
    LL_DMA_SetSourceAddr(DMAx, Channel, DMA_InitStruct->PeriphOrM2MSrcAddress);
    //---设置目的地址
    LL_DMA_SetDestinateAddr(DMAx, Channel, DMA_InitStruct->MemoryOrM2MDstAddress);
    return 0;
}
#ifndef HC32L1XX_LL_DMA_H_
#define HC32L1XX_LL_DMA_H_

#ifdef __cplusplus
extern "C" {
#endif 
    
    #include "hc32l1xx.h"
    ///
    #define LL_DMA_CHANNEL_0                    0
    #define LL_DMA_CHANNEL_1                    1

    #define LL_DMA_PRIO_FIXED                    DMA_CONF_PRIO_FIXED    
    #define LL_DMA_PRIO_CIRCLE                    DMA_CONF_PRIO_CIRCLE

    #define    LL_DMA_HALT_ALL                        DMA_CONF_HALT_ALL
    #define    LL_DMA_HALT_CH0S                    DMA_CONF_HALT_CH0S
    #define    LL_DMA_HALT_CH0D                    DMA_CONF_HALT_CH0D
    #define    LL_DMA_HALT_CH1S                    DMA_CONF_HALT_CH1S
    #define    LL_DMA_HALT_CH1D                    DMA_CONF_HALT_CH1D
    #define    LL_DMA_HALT_NULL                    DMA_CONF_HALT_NULL

    #define LL_DMA_TRIGS_SOFTWARE                DMA_CONFA_TRIGS_SOFTWARE        
    #define LL_DMA_TRIGS_RX_SPI0                DMA_CONFA_TRIGS_RX_SPI0            
    #define LL_DMA_TRIGS_TX_SPI0                DMA_CONFA_TRIGS_TX_SPI0            
    #define LL_DMA_TRIGS_RX_SPI1                DMA_CONFA_TRIGS_RX_SPI1            
    #define LL_DMA_TRIGS_TX_SPI1                DMA_CONFA_TRIGS_TX_SPI1            
    #define LL_DMA_TRIGS_SQR_ADC                DMA_CONFA_TRIGS_SQR_ADC            
    #define LL_DMA_TRIGS_JQR_ADC                DMA_CONFA_TRIGS_JQR_ADC            
    #define LL_DMA_TRIGS_LCD                    DMA_CONFA_TRIGS_LCD                
    #define LL_DMA_TRIGS_RX_UART0                DMA_CONFA_TRIGS_RX_UART0        
    #define LL_DMA_TRIGS_TX_UART0                DMA_CONFA_TRIGS_TX_UART0        
    #define LL_DMA_TRIGS_RX_UART1                DMA_CONFA_TRIGS_RX_UART1        
    #define LL_DMA_TRIGS_TX_UART1                DMA_CONFA_TRIGS_TX_UART1        
    #define LL_DMA_TRIGS_RX_LPUART0                DMA_CONFA_TRIGS_RX_LPUART0        
    #define LL_DMA_TRIGS_TX_LPUART0                DMA_CONFA_TRIGS_TX_LPUART0        
    #define LL_DMA_TRIGS_RX_LPUART1                DMA_CONFA_TRIGS_RX_LPUART1        
    #define LL_DMA_TRIGS_TX_LPUART1                DMA_CONFA_TRIGS_TX_LPUART1        
    #define LL_DMA_TRIGS_DAC                    DMA_CONFA_TRIGS_DAC                
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM0        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM0
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM0        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM0  
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM1        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM1
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM1        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM1
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM2        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM2
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM2        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM2
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM3        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM3
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM3        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM3
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM4        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM4
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM4        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM4
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM5        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM5
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM5        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM5
    #define LL_DMA_TRIGS_CAPTURE_CHA_TIM6        DMA_CONFA_TRIGS_CAPTURE_CHA_TIM6
    #define LL_DMA_TRIGS_CAPTURE_CHB_TIM6        DMA_CONFA_TRIGS_CAPTURE_CHB_TIM6
    #define LL_DMA_TRIGS_RX_UART2                DMA_CONFA_TRIGS_RX_UART2        
    #define LL_DMA_TRIGS_TX_UART2                DMA_CONFA_TRIGS_TX_UART2        
    #define LL_DMA_TRIGS_RX_UART3                DMA_CONFA_TRIGS_RX_UART3        
    #define LL_DMA_TRIGS_TX_UART3                DMA_CONFA_TRIGS_TX_UART3        

    #define LL_DMA_DATA_BLOCK_SIZE_1            1
    #define LL_DMA_DATA_BLOCK_SIZE_2            2
    #define LL_DMA_DATA_BLOCK_SIZE_3            3
    #define LL_DMA_DATA_BLOCK_SIZE_4            4
    #define LL_DMA_DATA_BLOCK_SIZE_5            5
    #define LL_DMA_DATA_BLOCK_SIZE_6            6
    #define LL_DMA_DATA_BLOCK_SIZE_7            7
    #define LL_DMA_DATA_BLOCK_SIZE_8            8
    #define LL_DMA_DATA_BLOCK_SIZE_9            9
    #define LL_DMA_DATA_BLOCK_SIZE_10            10
    #define LL_DMA_DATA_BLOCK_SIZE_11            11
    #define LL_DMA_DATA_BLOCK_SIZE_12            12
    #define LL_DMA_DATA_BLOCK_SIZE_13            13
    #define LL_DMA_DATA_BLOCK_SIZE_14            14
    #define LL_DMA_DATA_BLOCK_SIZE_15            15
    #define LL_DMA_DATA_BLOCK_SIZE_16            16

    #define LL_DMA_MODE_BLOCK                    DMA_CONFB_MODE_BLOCK
    #define LL_DMA_MODE_BURST                    DMA_CONFB_MODE_BURST

    #define LL_DMA_DATA_WIDTH_8BITS                DMA_CONFB_WIDTH_8BITS
    #define LL_DMA_DATA_WIDTH_16BITS            DMA_CONFB_WIDTH_16BITS
    #define LL_DMA_DATA_WIDTH_32BITS            DMA_CONFB_WIDTH_32BITS

    #define LL_DMA_DATA_ADDR_INCREASE            0
    #define LL_DMA_DATA_ADDR_FIXED                1

    #define LL_DMA_CHANNEL_SINGLE                DMA_CONFB_MSK_SINGLE    
    #define LL_DMA_CHANNEL_CONTINUOUS            DMA_CONFB_MSK_CONTINUOUS

    #define LL_DMA_STATE_INIT                    DMA_CONFB_STATE_INIT
    #define LL_DMA_STATE_ADDR                    DMA_CONFB_STATE_ADDR
    #define LL_DMA_STATE_DMA                    DMA_CONFB_STATE_DMA
    #define LL_DMA_STATE_SRC                    DMA_CONFB_STATE_SRC
    #define LL_DMA_STATE_DST                    DMA_CONFB_STATE_DST
    #define LL_DMA_STATE_FIS                    DMA_CONFB_STATE_FIS
    #define LL_DMA_STATE_SUSPEND                DMA_CONFB_STATE_SUSPEND

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_Enable(DMA_TypeDef* DMAx)
    {
        SET_BIT(DMAx->CONF, DMA_CONF_EN);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_Disable(DMA_TypeDef* DMAx)
    {
        CLEAR_BIT(DMAx->CONF, DMA_CONF_EN);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_IsEnabled(DMA_TypeDef* DMAx)
    {
        return (uint32_t)(READ_BIT(DMAx->CONF, DMA_CONF_EN) == DMA_CONF_EN);
    }

    ///
    //函        数: 
    //功        能: 设置优先级
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetPrority(DMA_TypeDef* DMAx,uint32_t priority)
    {
        MODIFY_REG(DMAx->CONF, DMA_CONF_PRIO, priority);
    }

    ///
    //函        数: 
    //功        能: 获取优先级
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetPrority(DMA_TypeDef* DMAx)
    {
        return (uint32_t)(READ_BIT(DMAx->CONF, DMA_CONF_EN)& DMA_CONF_PRIO);
    }


    ///
    //函        数: 
    //功        能: 暂停
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_Suspend(DMA_TypeDef* DMAx, uint32_t halt)
    {
        MODIFY_REG(DMAx->CONF, DMA_CONF_HALT, halt);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_Resume(DMA_TypeDef* DMAx, uint32_t halt)
    {
        MODIFY_REG(DMAx->CONF, DMA_CONF_HALT, ~halt);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnableChannel(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFA_ENS);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableChannel(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        CLEAR_BIT(DMAx->CONF, DMA_CONFA_ENS);
    }

    ///
    //函        数: 
    //功        能: 
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_IsEnabled_Channel(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT(DMAx->CONF, DMA_CONFA_ENS) == DMA_CONFA_ENS);
    }

    ///
    //函        数: 
    //功        能: 暂停
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SuspendChannel(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch<<4);
        SET_BIT((*dmac), DMA_CONFA_PAS);
    }

    ///
    //函        数: 
    //功        能: 恢复
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_ResumeChannel(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFA_PAS);
    }

    ///
    //函        数: 
    //功        能: 软件触发启动
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SoftwareStart(DMA_TypeDef* DMAx,uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFA_STS);
    }

    ///
    //函        数: 
    //功        能: 软件触发停止
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SoftwareStop(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFA_STS);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetTrigSource(DMA_TypeDef* DMAx, uint32_t ch, uint32_t trig)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFA_TRIGS, trig);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetTrigSource(DMA_TypeDef* DMAx,uint32_t ch, uint32_t trig)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFA_TRIGS) & trig);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDataBlockSize(DMA_TypeDef* DMAx, uint32_t ch, uint32_t size)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        size -= 1;
        if (size>15)
        {
            size = 0;
        }
        size <<= DMA_CONFA_BCS_POS;
        MODIFY_REG((*dmac), DMA_CONFA_BCS, size);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetDataBlockSize(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFA_BCS)>> DMA_CONFA_BCS_POS);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDataBlockNum(DMA_TypeDef* DMAx, uint32_t ch, uint32_t num)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        num -= 1;
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFA_TCS, num);
    }

    ///
    //函        数: 
    //功        能: 设置触发源
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetDataBlockNum(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFA_TCS)>> DMA_CONFA_TCS_POS);
    }

    ///
    //函        数: 
    //功        能: 设置数据长度
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDataLength(DMA_TypeDef* DMAx, uint32_t ch, uint32_t length)
    {
        __IO uint32_t* dmac = NULL;
        uint32_t datablocksize = 0; 
        dmac = &(DMAx->CONFA0);
        dmac += (ch << 4);
        //---计算数据块的大小
        datablocksize= LL_DMA_GetDataBlockSize(DMAx,ch)+1;
        //---计算数据块
        ch = length / datablocksize;
        if ((length % datablocksize)!=0)
        {
            ch += 1;
        }
        ch -= 1;
        //---将数据写入
        MODIFY_REG((*dmac), DMA_CONFA_TCS, ch);
    }

    ///
    //函        数: 
    //功        能: 设置DMA工作模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetTransferMode(DMA_TypeDef* DMAx, uint32_t ch, uint32_t mode)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFB_MODE, mode);
    }

    ///
    //函        数: 
    //功        能: 获取DMA工作模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetTransferMode(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_MODE)& DMA_CONFB_MODE);
    }
    
    ///
    //函        数: 
    //功        能: 设置数据宽度
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDataWidth(DMA_TypeDef* DMAx, uint32_t ch, uint32_t width)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFB_WIDTH, width);
    }

    ///
    //函        数: 
    //功        能: 获取数据宽度
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetDataWidth(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_WIDTH) >> DMA_CONFB_WIDTH_POS);
    }

    ///
    //函        数: 
    //功        能: 设置源地址自增模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetSourceAddrIncreaseMode(DMA_TypeDef* DMAx, uint32_t ch, uint32_t mode)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        mode <<= DMA_CONFB_FS_POS;
        MODIFY_REG((*dmac), DMA_CONFB_FS, mode);
    }

    ///
    //函        数: 
    //功        能: 获取源地址自增模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetSourceAddrIncreaseMode(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_FS) >> DMA_CONFB_FS_POS);
    }

    ///
    //函        数: 
    //功        能: 设置目的地址自增模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDestinateAddrIncreaseMode(DMA_TypeDef* DMAx, uint32_t ch, uint32_t mode)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        mode <<= DMA_CONFB_FD_POS;
        MODIFY_REG((*dmac), DMA_CONFB_FD, mode);
    }

    ///
    //函        数: 
    //功        能: 获取目的地址自增模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetDestinateAddrIncreaseMode(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_FD) >> DMA_CONFB_FD_POS);
    }

    ///
    //函        数: 
    //功        能: 使能数据块和数据块数量自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnableDataBlockReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFB_RC);
    }

    ///
    //函        数: 
    //功        能: 使能数据块和数据块数量自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableDataBlockReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFB_RC);
    }

    ///
    //函        数: 
    //功        能: 使能源地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnableSourceAddrReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFB_RS);
    }

    ///
    //函        数: 
    //功        能: 不使能源地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableSourceAddrReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFB_RS);
    }

    ///
    //函        数: 
    //功        能: 使能目的地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnableDestinateAddrReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFB_RD);
    }

    ///
    //函        数: 
    //功        能: 不使能目的地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableDestinateAddrReload(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFB_RD);
    }

    ///
    //函        数: 
    //功        能: 使能错误中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnabledIT_Error(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFB_ERR_IE);
    }

    ///
    //函        数: 
    //功        能: 不使能错误中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableIT_Error(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFB_ERR_IE);
    }

    ///
    //函        数: 
    //功        能: 是否使能传输完成中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_IsEnabled_IT_Error(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_ERR_IE));
    }

    ///
    //函        数: 
    //功        能: 使能传输完成中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_EnabledIT_Complete(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        SET_BIT((*dmac), DMA_CONFB_FIS_IE);
    }
    
    ///
    //函        数: 
    //功        能: 不使能传输完成中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_DisableIT_Complete(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        CLEAR_BIT((*dmac), DMA_CONFB_FIS_IE);
    }

    ///
    //函        数: 
    //功        能: 是否使能传输完成中断
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_IsEnabled_IT_Complete(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_FIS_IE));
    }

    ///
    //函        数: 
    //功        能: 获取传输状态
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_TransferState(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_STATE));
    }

    ///
    //函        数:
    //功        能:中断标志
    //输入参    数:
    //输出参    数:
    //说        明:
    //
    static inline uint32_t LL_DMA_IsActiveFlag(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_STATE));
    }

    ///
    //函        数:
    //功        能:中断标志
    //输入参    数:
    //输出参    数:
    //说        明:
    //
    static inline uint32_t LL_DMA_IsActiveFlag_Complete(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_STATE)&LL_DMA_STATE_FIS);
    }

    ///
    //函        数:
    //功        能:清除中断标志
    //输入参    数:
    //输出参    数:
    //说        明:
    //
    static inline void LL_DMA_ClearFlag(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFB_STATE, 0);
    }

    ///
    //函        数: 
    //功        能: 设置DMA通道模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetChannelMode(DMA_TypeDef* DMAx, uint32_t ch, uint32_t mode)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        MODIFY_REG((*dmac), DMA_CONFB_MSK, mode);
    }

    ///
    //函        数: 
    //功        能: 获取DMA通道模式
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetChannelMode(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->CONFB0);
        dmac += (ch << 4);
        return (uint32_t)(READ_BIT((*dmac), DMA_CONFB_MSK) & DMA_CONFB_MSK);
    }

    ///
    //函        数: 
    //功        能: 设置源地址
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetSourceAddr(DMA_TypeDef* DMAx, uint32_t ch,uint32_t addr)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->SRCADR0);
        dmac += (ch << 4);
        WRITE_REG((*dmac), addr);
    }

    ///
    //函        数: 
    //功        能: 获取源地址
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetSourceAddr(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->SRCADR0);
        dmac += (ch << 4);
        return READ_REG((*dmac))& DMA_SRC_ADDR;
    }

    ///
    //函        数: 
    //功        能: 使能目的地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline void LL_DMA_SetDestinateAddr(DMA_TypeDef* DMAx, uint32_t ch, uint32_t addr)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->DSTADR0);
        dmac += (ch << 4);
        WRITE_REG((*dmac),addr);
    }

    ///
    //函        数: 
    //功        能: 不使能目的地址自动重载
    //输入参    数: 
    //输出参    数: 
    //说        明: 
    //
    static inline uint32_t LL_DMA_GetDestinateAddr(DMA_TypeDef* DMAx, uint32_t ch)
    {
        __IO uint32_t* dmac = NULL;
        dmac = &(DMAx->DSTADR0);
        dmac += (ch << 4);
        return READ_REG((*dmac)) & DMA_DST_ADDR;
    }


    typedef struct
    {
        uint32_t Prority;
        uint32_t PeriphRequest;
        uint32_t DataSize;
        uint32_t NbData;
        
        uint32_t Mode; 
        uint32_t DataWidth;
        uint32_t PeriphOrM2MSrcIncMode;  
        uint32_t MemoryOrM2MDstIncMode;   
        uint32_t PeriphOrM2MSrcAddress;
        uint32_t MemoryOrM2MDstAddress;
    } LL_DMA_InitTypeDef;

    //===函数定义
    uint8_t LL_DMA_Init(DMA_TypeDef* DMAx, uint32_t Channel, LL_DMA_InitTypeDef* DMA_InitStruct);
    uint8_t LL_DMA_DeInit(DMA_TypeDef* DMAx, uint32_t Channel);

    ///
#ifdef __cplusplus
}
#endif 

#endif /* HC32L1XX_LL_DMA_H_ */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值