CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_dma.c

144 lines
4.0 KiB
C
Raw 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.c
* @author MCU Ecosystem Development Team
* @brief DMA STD库驱动。
* 实现DMA初始化和启动等API。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @addtogroup DMA
* @{
*
*/
/************************************************************************************************/
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std.h"
#ifdef STD_DMA_PERIPHERAL_USED
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @addtogroup DMA_External_Functions
* @{
*
*/
/************************************************************************************************/
/**
* @brief DMA通道初始化
* @param dma_init_param DMA初始化结构体
* @retval 无
*/
void std_dma_init(std_dma_init_t *dma_init_param)
{
/* 设置DMA配置寄存器 */
std_dma_channel_config(dma_init_param->dma_channel, dma_init_param->transfer_type \
| dma_init_param->src_addr_inc \
| dma_init_param->dst_addr_inc \
| dma_init_param->data_size \
| dma_init_param->mode);
/* 设置DMA请求源ID */
std_dma_set_req_id(dma_init_param->dma_channel, dma_init_param->dma_req_id);
}
/**
* @brief DMA通道去初始化
* @param dma_init_param dma初始化结构体
* @retval 无
*/
void std_dma_deinit(std_dma_init_t *dma_init_param)
{
/* 清除DMA通道的所有状态 */
DMA->ICR = (DMA_FLAG_G0 << (dma_init_param->dma_channel << 2U));
/* 禁止DMA通道 */
std_dma_disable(dma_init_param->dma_channel);
/* 复位DMA通道的控制寄存器 */
std_dma_reset_control(dma_init_param->dma_channel);
/* DMA传输数量清零 */
std_dma_set_transfer_data_number(dma_init_param->dma_channel, 0U);
/* DMA传输源地址清零 */
std_dma_set_src_address(dma_init_param->dma_channel, 0U);
/* DMA传目的地址清零 */
std_dma_set_dst_address(dma_init_param->dma_channel, 0U);
}
/**
* @brief 初始化std_dma_init_t结构体
* @param dma_init_struct dma初始化结构体
* @note 源地址、目的地址、DMA传输数的配置不在该函数
* @retval 无
*/
void std_dma_struct_init(std_dma_init_t *dma_init_struct)
{
dma_init_struct->dma_channel = DMA_CHANNEL_0;
dma_init_struct->transfer_type = DMA_BLOCK_TRANSFER;
dma_init_struct->dma_req_id = DMA_REQUEST_SOFTWARE;
dma_init_struct->src_addr_inc = DMA_SRC_INC_DISABLE;
dma_init_struct->dst_addr_inc = DMA_DST_INC_DISABLE;
dma_init_struct->data_size = DMA_DATA_SIZE_BYTE;
dma_init_struct->mode = DMA_MODE_NORMAL;
}
/**
* @brief 配置DMA源地址、目的地址、DMA传输数使能DMA
* @param dma_config 配置寄存器
* @note 当DMA通道配置软件触发DMA请求立即启动DMA传输
* @retval 无
*/
void std_dma_start_transmit(std_dma_config_t *dma_config)
{
/* 设置DMA传输数量 */
std_dma_set_transfer_data_number(dma_config->dma_channel,dma_config->data_number);
/* 设置DMA传输源地址 */
std_dma_set_src_address(dma_config->dma_channel,dma_config->src_addr);
/* 设置DMA传目的地址 */
std_dma_set_dst_address(dma_config->dma_channel,dma_config->dst_addr);
/* 使能DMA传输 */
std_dma_enable(dma_config->dma_channel);
}
/**
* @}
*/
#endif /* STD_DMA_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/