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_ */
相关文章:
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 …...
SSM项目 替换为 SpringBoot
一、运行SSM项目 保证项目改为SpringBoot后运行正常,先保证SSM下运行正常。 项目目录结构 创建数据库,导入sql文件 查看项目中连接数据jar版本,修改对应版本,修改数据库配置信息 配置启动tomcat 运行项目,测试正常…...
RL笔记:动态规划(2): 策略迭代
目录 0. 前言 (4.3) 策略迭代 Example 4.2: Jack’s Car Rental Exercise 4.4 Exercise 4.5 Exercise 4.6 Exercise 4.7 0. 前言 Sutton-book第4章(动态规划)学习笔记。本文是关于其中4.2节(策略迭代)。 (4.3) 策略迭代 基…...
2023软件测试金三银四常见的软件测试面试题-【测试理论篇】
三、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的SE会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议, 我…...
蓝桥训练第二周
1 ,泛凯撒加密 内存限制:128 MB时间限制:1.000 S 题目描述 众所周知,在网络安全中分为明文和密文,凯撒加密是将一篇明文中所有的英文字母都向后移动三位(Z的下一位是A),比如a向后…...
详讲函数知识
目录 1. 函数是什么? 2. C语言中函数的分类: 2.1 库函数: 2.2 自定义函数 函数的基本组成: 3. 函数的参数 3.1 实际参数(实参): 3.2 形式参数(形参): …...
gin 框架初始教程文档
一 、gin 入门1. 安装gin :下载并安装 gin包:$ go get -u github.com/gin-gonic/gin2. 将 gin 引入到代码中:import "github.com/gin-gonic/gin"3.初始化项目go mod init gin4.完整代码package mainimport "github.com/gin-go…...
Maven的下载和安装【详细】
文章目录一、什么是Maven?二、Maven的安装与配置2.1下载Maven安装包2.2配置Maven环境变量2.3验证三、Idea配置Maven3.1配置 setting.xml文件3.2Idea配置Maven一、什么是Maven? Apache Maven是个项目管理和自动构建工具,基于项目对象模型&…...
[数据结构]:04-循环队列(数组)(C语言实现)
目录 前言 已完成内容 循环队列实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueCommon.cpp 04-QueueFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…...
buu [GWCTF 2019]BabyRSA 1
题目描述: import hashlib import sympy from Crypto.Util.number import *flag GWHT{******} secret ******assert(len(flag) 38)half len(flag) / 2flag1 flag[:half] flag2 flag[half:]secret_num getPrime(1024) * bytes_to_long(secret)p sympy.nextp…...
codeforces 1669F
题意: alice和bob从数组两边的吃糖果, 数组的值就是糖果重量 要求alice和bob吃的糖果重量必须一样, 输出能吃几个糖果 这题最先想到的是前后缀相加 模拟一个前缀和 和 后缀和 在n/2的位置向前找前缀和 在n/2的位置向后找后缀和 找到第一个前缀和后缀和的下标输出就好 …...
高数考试必备知识点
三角函数与反三角函数的知识点 正弦函数 ysin x, 反正弦函数 yarcsin x • y sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x (π/2) kπ 为对称轴 • y arcsin x, x∈[–1,1]…...
[蓝桥杯] 二分与前缀和习题练习
文章目录 一、二分查找习题练习 1、1 数的范围 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 机器人跳跃问题 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 四平方和 1、3、1 题目描述 1、3、2 题解关键思路与解答 二、前缀和习题练习 2、1 前缀和 2、1、1 题目描述…...
SpringMvc中HandlerAdapter组件的作用
概述 我们在使用springMVC时,都知道其中不仅包含handlerMapping组件还包含handlerAdapter组件,为什么呢? springMVC请求流程图 HandlerAdapter组件使用了适配器模式 适配器模式的本质是接口转换和代码复用,这里使用适配器模式的…...
FreeRTOS优先级翻转
优先级翻转优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未…...
服务器部署—部署springboot之Linux服务器安装jdk和tomcat【建议收藏】
我是用的xshell连接的云服务器,今天想在服务器上面部署一个前后端分离【springbootvue】项目,打开我的云服务器才发现,过期了,然后又买了一个,里面环境啥都没有,正好出一期教程,方便大家也方便自…...
golang项目----家庭收支记账软件
家庭收支记账软件实现基本功能(先使用面向过程,后面改成面向对象)项目代码实现改进面向过程源码面向对象源码utils包中main包中实现基本功能(先使用面向过程,后面改成面向对象) 编写文件TestMyAccount.go完成基本功能 功能一:先完成可以显示…...
中国LNG市场投资机会研究
中国LNG市场投资机会研究中国LNG市场是一个具有巨大潜力和发展机遇的市场,尤其是在政府大力推动清洁能源发展的背景下,LNG市场投资机会正在不断扩大。首先,政府大力支持LNG市场的发展。政府实施的“十三五”规划将LNG作为清洁能源的重要来源&…...
Elasticsearch:索引数据是如何完成的
在我在之前的文章 “Elasticsearch:彻底理解 Elasticsearch 数据操作” 文章中,我详细地描述了如何索引数据到 Elasticsearch 中。在今天的文章中,我想更进一步来描述这个流程。 Elasticsearch 是一个非常强大和灵活的分布式数据系统&#x…...
处理器管理
处理器状态处理器管理是操作系统中重要组成部分,负责管理、调度和分配计算机系统的重要资源——处理器,并控制程序执行由于处理器管理是操作系统最核心的部分,无论是应用程序还是系统程序,最终都要在处理器上执行以实现其功能&…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
