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<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 */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|