#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_ */
HC32L17x的LL驱动库之dma
最新推荐文章于 2025-03-27 22:46:20 发布