144 lines
4.0 KiB
C
144 lines
4.0 KiB
C
/************************************************************************************************/
|
||
/**
|
||
* @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 */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|