CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_dma.h

680 lines
23 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @file ciu32l051_std_dma.h
* @author MCU Ecosystem Development Team
* @brief DMA STD库驱动头文件。
* 提供DMA相关的STD库操作函数声明、数据类型以及常量的定义。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/*避免头文件重复引用*/
#ifndef CIU32L051_STD_DMA_H
#define CIU32L051_STD_DMA_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup DMA DMA
* @brief 直接存储器访问控制器的STD库驱动
* @{
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-----------------------------------------type define------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup DMA_Types DMA Types
* @brief DMA数据类型定义
* @{
*
*/
/************************************************************************************************/
/**
* @brief DMA初始化配置结构体定义
*/
typedef struct
{
uint32_t dma_channel; /**< DMA通道
@arg DMA_CHANNEL_0
@arg DMA_CHANNEL_1 */
uint32_t transfer_type; /**< DMA传输控制Block传输或Burst传输
@arg DMA_BLOCK_TRANSFER
@arg DMA_BURST_TRANSFER */
uint32_t dma_req_id; /**< DMA请求源ID
@arg DMA_REQUEST_SOFTWARE
@arg DMA_REQUEST_ADC... */
uint32_t src_addr_inc; /**< DMA源地址自增使能或禁止
@arg DMA_SRC_INC_DISABLE
@arg DMA_SRC_INC_ENABLE */
uint32_t dst_addr_inc; /**< DMA目的地址自增使能或禁止
@arg DMA_DST_INC_DISABLE
@arg DMA_DST_INC_ENABLE */
uint32_t data_size; /**< DMA传输数据宽度字节、半字或字
@arg DMA_DATA_SIZE_BYTE
@arg DMA_DATA_SIZE_HALFWORD
@arg DMA_DATA_SIZE_WORD */
uint32_t mode; /**< DMA工作模式正常模式或循环模式
@arg DMA_MODE_NORMAL
@arg DMA_MODE_CIRCULAR
@note 存储器到存储器传输方向不能配置为循环模式 */
} std_dma_init_t;
/**
* @brief DMA传输参数配置结构体定义
*/
typedef struct
{
uint32_t dma_channel; /**< DMA通道
@arg DMA_CHANNEL_0
@arg DMA_CHANNEL_1 */
uint32_t src_addr; /**< DMA传输源地址 */
uint32_t dst_addr; /**< DMA传输目的地址 */
uint32_t data_number; /**< DMA传输次数 */
} std_dma_config_t;
/**
* @}
*/
/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup DMA_Constants DMA Constants
* @brief DMA常量定义及宏定义
* @{
*/
/************************************************************************************************/
/* DMA通道 */
#define DMA_CHANNEL_0 (0x00U) /**< DMA通道0 */
#define DMA_CHANNEL_1 (0x01U) /**< DMA通道1 */
/* DMA传输控制 */
#define DMA_BLOCK_TRANSFER (0x00000000U) /**< DMA BLOCK传输类型 */
#define DMA_BURST_TRANSFER (DMA_CC_TYPE) /**< DMA BURST传输类型 */
/* DMA源地址自增模式 */
#define DMA_SRC_INC_DISABLE (0x00000000U) /**< 源地址自增禁止 */
#define DMA_SRC_INC_ENABLE (DMA_CC_SINC) /**< 源地址自增使能 */
/* DMA目的地址自增模式 */
#define DMA_DST_INC_DISABLE (0x00000000U) /**< 目的地址自增禁止 */
#define DMA_DST_INC_ENABLE (DMA_CC_DINC) /**< 目的地址自增使能 */
/* DMA传输数据宽度 */
#define DMA_DATA_SIZE_BYTE (DMA_CC_SIZE_BYTE) /**< 传输数据为字节 */
#define DMA_DATA_SIZE_HALFWORD (DMA_CC_SIZE_HALFWORD) /**< 传输数据为半字 */
#define DMA_DATA_SIZE_WORD (DMA_CC_SIZE_WORD) /**< 传输数据为字 */
/* DMA模式 */
#define DMA_MODE_NORMAL (0x00000000U) /**< 正常模式 */
#define DMA_MODE_CIRCULAR (DMA_CC_CIRC) /**< 循环模式 */
/* DMA请求源ID */
#define DMA_REQUEST_SOFTWARE (0U) /**< DMA软件触发通道请求 */
#define DMA_REQUEST_ADC (1U) /**< DMA请求为ADC */
#define DMA_REQUEST_SPI1_RX (2U) /**< DMA请求为SPI1接收 */
#define DMA_REQUEST_SPI1_TX (2U) /**< DMA请求为SPI1发送 */
#define DMA_REQUEST_SPI2_RX (3U) /**< DMA请求为SPI2接收 */
#define DMA_REQUEST_SPI2_TX (3U) /**< DMA请求为SPI2发送 */
#define DMA_REQUEST_I2C1_RX (4U) /**< DMA请求为I2C1接收 */
#define DMA_REQUEST_I2C1_TX (4U) /**< DMA请求为I2C1发送 */
#define DMA_REQUEST_USART1_RX (6U) /**< DMA请求为USART1接收 */
#define DMA_REQUEST_USART1_TX (6U) /**< DMA请求为USART1发送 */
#define DMA_REQUEST_UART2_RX (7U) /**< DMA请求为UART2接收 */
#define DMA_REQUEST_UART2_TX (7U) /**< DMA请求为UART2发送 */
#define DMA_REQUEST_UART3_RX (8U) /**< DMA请求为UART3接收 */
#define DMA_REQUEST_UART3_TX (8U) /**< DMA请求为UART3发送 */
#define DMA_REQUEST_UART4_RX (9U) /**< DMA请求为UART4接收 */
#define DMA_REQUEST_UART4_TX (9U) /**< DMA请求为UART4发送 */
#define DMA_REQUEST_LPUART1_RX (10U) /**< DMA请求为LPUART1接收 */
#define DMA_REQUEST_LPUART1_TX (10U) /**< DMA请求为LPUART1发送 */
#define DMA_REQUEST_LPUART2_RX (11U) /**< DMA请求为LPUART2接收 */
#define DMA_REQUEST_LPUART2_TX (11U) /**< DMA请求为LPUART2发送 */
#define DMA_REQUEST_TIM3_CC1 (15U) /**< DMA请求为TIM3通道1比较/匹配 */
#define DMA_REQUEST_TIM3_CC2 (15U) /**< DMA请求为TIM3通道2比较/匹配 */
#define DMA_REQUEST_TIM3_CC3 (16U) /**< DMA请求为TIM3通道3比较/匹配 */
#define DMA_REQUEST_TIM3_CC4 (16U) /**< DMA请求为TIM3通道4比较/匹配 */
#define DMA_REQUEST_TIM3_TRIG (17U) /**< DMA请求为TIM3触发 */
#define DMA_REQUEST_TIM3_UP (17U) /**< DMA请求为TIM3更新 */
#define DMA_REQUEST_TIM4_CC1 (18U) /**< DMA请求为TIM4通道1比较/匹配 */
#define DMA_REQUEST_TIM4_CC2 (18U) /**< DMA请求为TIM4通道2比较/匹配 */
#define DMA_REQUEST_TIM4_CC3 (19U) /**< DMA请求为TIM4通道3比较/匹配 */
#define DMA_REQUEST_TIM4_CC4 (19U) /**< DMA请求为TIM4通道4比较/匹配 */
#define DMA_REQUEST_TIM4_TRIG (20U) /**< DMA请求为TIM4触发 */
#define DMA_REQUEST_TIM4_UP (20U) /**< DMA请求为TIM4更新 */
#define DMA_REQUEST_TIM5_CC1 (21U) /**< DMA请求为TIM5通道1比较/匹配 */
#define DMA_REQUEST_TIM5_CC2 (21U) /**< DMA请求为TIM5通道2比较/匹配 */
#define DMA_REQUEST_TIM5_CC3 (22U) /**< DMA请求为TIM5通道3比较/匹配 */
#define DMA_REQUEST_TIM5_CC4 (22U) /**< DMA请求为TIM5通道4比较/匹配 */
#define DMA_REQUEST_TIM5_TRIG (23U) /**< DMA请求为TIM5触发 */
#define DMA_REQUEST_TIM5_UP (23U) /**< DMA请求为TIM5更新 */
#define DMA_REQUEST_TIM8_UP (24U) /**< DMA请求为TIM8更新 */
#define DMA_REQUEST_AES_IN (26U) /**< DMA请求为AES数据输入 */
#define DMA_REQUEST_AES_OUT (26U) /**< DMA请求为AES数据输出 */
#define DMA_REQUEST_LPTIM1_CMPM (27U) /**< DMA请求为LPTIM1比较/匹配 */
#define DMA_REQUEST_LPTIM1_ARRM (27U) /**< DMA请求为LPTIM1自动重载 */
#define DMA_REQUEST_LPTIM2_CMPM (28U) /**< DMA请求为LPTIM2比较/匹配 */
#define DMA_REQUEST_LPTIM2_ARRM (28U) /**< DMA请求为LPTIM2自动重载 */
/* DMA中断状态 */
#define DMA_FLAG_G0 (DMA_ISR_G0) /**< DMA通道0全局状态 */
#define DMA_FLAG_TF0 (DMA_ISR_TF0) /**< DMA通道0传输完成状态 */
#define DMA_FLAG_TH0 (DMA_ISR_TH0) /**< DMA通道0传输一半状态 */
#define DMA_FLAG_TE0 (DMA_ISR_TE0) /**< DMA通道0传输错误状态 */
#define DMA_FLAG_G1 (DMA_ISR_G1) /**< DMA通道1全局状态 */
#define DMA_FLAG_TF1 (DMA_ISR_TF1) /**< DMA通道1传输完成状态 */
#define DMA_FLAG_TH1 (DMA_ISR_TH1) /**< DMA通道1传输一半状态 */
#define DMA_FLAG_TE1 (DMA_ISR_TE1) /**< DMA通道1传输错误状态 */
/* DMA中断源 */
#define DMA_INTERRUPT_TF (DMA_CC_TFIE) /**< DMA传输完成中断 */
#define DMA_INTERRUPT_TH (DMA_CC_THIE) /**< DMA传输一半中断 */
#define DMA_INTERRUPT_TE (DMA_CC_TEIE) /**< DMA传输错误中断 */
/* DMA中断状态清除 */
#define DMA_CLEAR_G0 (DMA_ICR_GCF0) /**< DMA通道0全局状态清除 */
#define DMA_CLEAR_TF0 (DMA_ICR_TFCF0) /**< DMA通道0传输完成状态清除 */
#define DMA_CLEAR_TH0 (DMA_ICR_THCF0) /**< DMA通道0传输一半状态清除 */
#define DMA_CLEAR_TE0 (DMA_ICR_TECF0) /**< DMA通道0传输错误状态清除 */
#define DMA_CLEAR_G1 (DMA_ICR_GCF1) /**< DMA通道1全局状态清除 */
#define DMA_CLEAR_TF1 (DMA_ICR_TFCF1) /**< DMA通道1传输完成状态清除 */
#define DMA_CLEAR_TH1 (DMA_ICR_THCF1) /**< DMA通道1传输一半状态清除 */
#define DMA_CLEAR_TE1 (DMA_ICR_TECF1) /**< DMA通道1传输错误状态清除 */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup DMA_External_Functions DMA External Functions
* @brief DMA对外函数
* @{
*
*/
/************************************************************************************************/
/**
* @brief 使能DMA通道
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_enable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC |= (DMA_CC_EN);
}
/**
* @brief 禁止DMA通道
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_disable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC &= (~DMA_CC_EN);
}
/**
* @brief 配置DMA传输类型
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param transfer_type DMA传输类型
* @arg DMA_BLOCK_TRANSFER
* @arg DMA_BURST_TRANSFER
* @retval 无
*/
__STATIC_INLINE void std_dma_transfer_type_config(uint32_t channel, uint32_t transfer_type)
{
MODIFY_REG((&(DMA->channel[channel]))->CC, DMA_CC_TYPE, transfer_type);
}
/**
* @brief 获取DMA传输类型
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA传输类型
* @arg DMA_BLOCK_TRANSFER
* @arg DMA_BURST_TRANSFER
*/
__STATIC_INLINE uint32_t std_dma_get_transfer_type(uint32_t channel)
{
return ((&(DMA->channel[channel]))->CC & DMA_CC_TYPE);
}
/**
* @brief 使能DMA源地址递增
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_src_addr_inc_enable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC |= (DMA_CC_SINC);
}
/**
* @brief 禁止DMA源地址递增
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_src_addr_inc_disable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC &= (~DMA_CC_SINC);
}
/**
* @brief 使能DMA目的地址递增
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_dst_addr_inc_enable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC |= (DMA_CC_DINC);
}
/**
* @brief 禁止DMA目的地址递增
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_dst_addr_inc_disable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC &= (~DMA_CC_DINC);
}
/**
* @brief 配置DMA传输数据大小为字节、半字或字
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param data_size DMA传输数据大小
* @arg DMA_DATA_SIZE_BYTE
* @arg DMA_DATA_SIZE_HALFWORD
* @arg DMA_DATA_SIZE_WORD
* @retval 无
*/
__STATIC_INLINE void std_dma_set_transfer_data_size(uint32_t channel, uint32_t data_size)
{
MODIFY_REG((&(DMA->channel[channel]))->CC, (DMA_CC_SIZE), (data_size & DMA_CC_SIZE));
}
/**
* @brief 获取DMA传输数据大小为字节、半字或字
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA传输数据大小
* @arg DMA_DATA_SIZE_BYTE
* @arg DMA_DATA_SIZE_HALFWORD
* @arg DMA_DATA_SIZE_WORD
*/
__STATIC_INLINE uint32_t std_dma_get_transfer_data_size(uint32_t channel)
{
return ((&(DMA->channel[channel]))->CC & (DMA_CC_SIZE));
}
/**
* @brief 使能DMA循环模式
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_circular_mode_enable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC |= DMA_MODE_CIRCULAR;
}
/**
* @brief 禁止DMA循环模式
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_circular_mode_disable(uint32_t channel)
{
(&(DMA->channel[channel]))->CC &= (~DMA_MODE_CIRCULAR);
}
/**
* @brief 获取DMA循环模式使能状态
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval bool DMA循环模式使能状态
* @arg true DMA循环模式使能
* @arg false DMA循环模式禁止
*/
__STATIC_INLINE bool std_dma_get_circular_mode_status(uint32_t channel)
{
return (((&(DMA->channel[channel]))->CC & DMA_MODE_CIRCULAR) == DMA_MODE_CIRCULAR);
}
/**
* @brief 使能DMA中断
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param dma_interrupt DMA中断包括错误中断、传输完成中断传输一半中断
* @arg DMA_INTERRUPT_TE
* @arg DMA_INTERRUPT_TF
* @arg DMA_INTERRUPT_TH
* @retval 无
*/
__STATIC_INLINE void std_dma_interrupt_enable(uint32_t channel, uint32_t dma_interrupt)
{
(&(DMA->channel[channel]))->CC |= (dma_interrupt);
}
/**
* @brief 禁止DMA中断
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param dma_interrupt DMA中断包括错误中断、传输完成中断传输一半中断
* @arg DMA_INTERRUPT_TE
* @arg DMA_INTERRUPT_TF
* @arg DMA_INTERRUPT_TH
* @retval 无
*/
__STATIC_INLINE void std_dma_interrupt_disable(uint32_t channel, uint32_t dma_interrupt)
{
(&(DMA->channel[channel]))->CC &= (~dma_interrupt);
}
/**
* @brief 获取DMA中断使能状态
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param dma_interrupt DMA中断包括错误中断、传输完成中断传输一半中断
* @arg DMA_INTERRUPT_TE
* @arg DMA_INTERRUPT_TF
* @arg DMA_INTERRUPT_TH
* @retval bool DMA中断使能状态
* @arg true DMA中断使能
* @arg false DMA中断禁止
*/
__STATIC_INLINE bool std_dma_get_interrupt_enable(uint32_t channel, uint32_t dma_interrupt)
{
return (((&(DMA->channel[channel]))->CC & (dma_interrupt)) == (dma_interrupt));
}
/**
* @brief 获取DMA标志位状态
* @param flag DMA状态,包括全局中断、传输完成中断、传输一半中断、错误中断
* @arg DMA_FLAG_G0
* @arg DMA_FLAG_TF0
* @arg DMA_FLAG_TH0
* @arg DMA_FLAG_TE0
* @arg DMA_FLAG_G1
* @arg DMA_FLAG_TF1
* @arg DMA_FLAG_TH1
* @arg DMA_FLAG_TE1
* @retval bool DMA标志位状态
* @arg true DMA标志位置起
* @arg false DMA标志位未置起
*/
__STATIC_INLINE bool std_dma_get_flag(uint32_t flag)
{
return ((DMA->ISR & (flag)) == (flag));
}
/**
* @brief 清除DMA标志位
* @param flag DMA状态,包括全局中断、传输完成中断、传输一半中断、错误中断
* @arg DMA_CLEAR_G0
* @arg DMA_CLEAR_TF0
* @arg DMA_CLEAR_TH0
* @arg DMA_CLEAR_TE0
* @arg DMA_CLEAR_G1
* @arg DMA_CLEAR_TF1
* @arg DMA_CLEAR_TH1
* @arg DMA_CLEAR_TE1
* @retval 无
*/
__STATIC_INLINE void std_dma_clear_flag(uint32_t flag)
{
DMA->ICR |= (flag);
}
/**
* @brief DMA请求信号源配置
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param req_id DMA请求信号源
* @arg DMA_REQUEST_SOFTWARE
* @arg DMA_REQUEST_ADC
* @arg ...
* @arg DMA_REQUEST_LPTIM2_ARRM
* @retval 无
*/
__STATIC_INLINE void std_dma_set_req_id(uint32_t channel, uint32_t req_id)
{
MODIFY_REG((&(DMA->channel[channel]))->CC, (DMA_CC_REQ_ID), (req_id << DMA_CC_REQ_ID_POS));
}
/**
* @brief 获取DMA请求信号源配置
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA请求信号源
* @arg DMA_REQUEST_SOFTWARE
* @arg DMA_REQUEST_ADC
* @arg ...
* @arg DMA_REQUEST_LPTIM2_ARRM
*/
__STATIC_INLINE uint32_t std_dma_get_req_id(uint32_t channel)
{
return (((&(DMA->channel[channel]))->CC & (DMA_CC_REQ_ID)) >> DMA_CC_REQ_ID_POS);
}
/**
* @brief DMA通道控制参数配置
* @param channel dma通道
* @param config_value DMA配置
* @arg DMA_MODE_NORMAL or DMA_MODE_CIRCULAR
* @arg DMA_BLOCK_TRANSFER or DMA_BURST_TRANSFER
* @arg DMA_DATA_SIZE_BYTE or DMA_DATA_SIZE_HALFWORD or DMA_DATA_SIZE_WORD
* @arg DMA_SRC_INC_DISABLE or DMA_SRC_INC_ENABLE
* @arg DMA_DST_INC_DISABLE or DMA_DST_INC_ENABLE
* @retval 无
*/
__STATIC_INLINE void std_dma_channel_config(uint32_t channel, uint32_t config_value)
{
MODIFY_REG((&(DMA->channel[channel]))->CC, (DMA_CC_CIRC | DMA_CC_TYPE | DMA_CC_SIZE | DMA_CC_SINC | DMA_CC_DINC), (config_value));
}
/**
* @brief 复位DMA通道控制器
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval 无
*/
__STATIC_INLINE void std_dma_reset_control(uint32_t channel)
{
(&(DMA->channel[channel]))->CC &= (~DMA_CC_EN);
(&(DMA->channel[channel]))->CC = 0U;
}
/**
* @brief 配置DMA源地址
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param src_addr DMA源地址
* @retval 无
*/
__STATIC_INLINE void std_dma_set_src_address(uint32_t channel, uint32_t src_addr)
{
(&(DMA->channel[channel]))->CSAR = src_addr;
}
/**
* @brief 获取DMA源地址
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA源地址
*/
__STATIC_INLINE uint32_t std_dma_get_src_address(uint32_t channel)
{
return ((&(DMA->channel[channel]))->CSAR);
}
/**
* @brief 配置DMA目的地址
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param dst_addr DMA目的地址
* @retval 无
*/
__STATIC_INLINE void std_dma_set_dst_address(uint32_t channel, uint32_t dst_addr)
{
(&(DMA->channel[channel]))->CDAR = dst_addr;
}
/**
* @brief 获取DMA目的地址
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA目的地址
*/
__STATIC_INLINE uint32_t std_dma_get_dts_address(uint32_t channel)
{
return ((&(DMA->channel[channel]))->CDAR);
}
/**
* @brief 配置DMA传输次数
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @param data_number 传输次数
* @retval 无
*/
__STATIC_INLINE void std_dma_set_transfer_data_number(uint32_t channel, uint32_t data_number)
{
(&(DMA->channel[channel]))->CNDTR = data_number;
}
/**
* @brief 获取DMA传输次数
* @param channel DMA通道
* @arg DMA_CHANNEL_0
* @arg DMA_CHANNEL_1
* @retval uint32_t DMA传输次数
*/
__STATIC_INLINE uint32_t std_dma_get_transfer_data_number(uint32_t channel)
{
return ((&(DMA->channel[channel]))->CNDTR);
}
void std_dma_init(std_dma_init_t *dma_init_param);
void std_dma_deinit(std_dma_init_t *dma_init_param);
void std_dma_struct_init(std_dma_init_t *dma_init_struct);
void std_dma_start_transmit(std_dma_config_t *dma_config);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_DMA_H */