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…...
处理器管理
处理器状态处理器管理是操作系统中重要组成部分,负责管理、调度和分配计算机系统的重要资源——处理器,并控制程序执行由于处理器管理是操作系统最核心的部分,无论是应用程序还是系统程序,最终都要在处理器上执行以实现其功能&…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
