CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_dma.c

144 lines
4.0 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_dma.c
* @author MCU Ecosystem Development Team
* @brief DMA STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ʵ<EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @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ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @param dma_init_param DMA<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void std_dma_init(std_dma_init_t *dma_init_param)
{
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD>üĴ<C3BC><C4B4><EFBFBD> */
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);
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>ԴID */
std_dma_set_req_id(dma_init_param->dma_channel, dma_init_param->dma_req_id);
}
/**
* @brief DMAͨ<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @param dma_init_param dma<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void std_dma_deinit(std_dma_init_t *dma_init_param)
{
/* <20><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
DMA->ICR = (DMA_FLAG_G0 << (dma_init_param->dma_channel << 2U));
/* <20><>ֹDMAͨ<41><CDA8> */
std_dma_disable(dma_init_param->dma_channel);
/* <20><>λDMAͨ<41><CDA8><EFBFBD>Ŀ<EFBFBD><C4BF>ƼĴ<C6BC><C4B4><EFBFBD> */
std_dma_reset_control(dma_init_param->dma_channel);
/* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_dma_set_transfer_data_number(dma_init_param->dma_channel, 0U);
/* DMA<4D><41><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
std_dma_set_src_address(dma_init_param->dma_channel, 0U);
/* DMA<4D><41>Ŀ<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
std_dma_set_dst_address(dma_init_param->dma_channel, 0U);
}
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>std_dma_init_t<EFBFBD><EFBFBD><EFBFBD>
* @param dma_init_struct dma<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note Դ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD>ڸú<EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMAԴ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>DMA
* @param dma_config <EFBFBD><EFBFBD><EFBFBD>üĴ<EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD>DMAͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void std_dma_start_transmit(std_dma_config_t *dma_config)
{
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_dma_set_transfer_data_number(dma_config->dma_channel,dma_config->data_number);
/* <20><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ */
std_dma_set_src_address(dma_config->dma_channel,dma_config->src_addr);
/* <20><><EFBFBD><EFBFBD>DMA<4D><41>Ŀ<EFBFBD>ĵ<EFBFBD>ַ */
std_dma_set_dst_address(dma_config->dma_channel,dma_config->dst_addr);
/* ʹ<><CAB9>DMA<4D><41><EFBFBD><EFBFBD> */
std_dma_enable(dma_config->dma_channel);
}
/**
* @}
*/
#endif /* STD_DMA_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/