示例代码
DMA Memory
示例工程实现DMA方式将数据从一块内存搬运到另一块内存,工程路径:SDK_Folder\projects\peripheral\dma\app_dma。
示例工程流程图
初始化参数
#if (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR551X)
app_dma_params_t dma_params = {DMA_Channel0, 0};
#else
app_dma_params_t dma_params = {DMA0,DMA_Channel0, 0};
#endif
#if (APP_DRIVER_CHIP_TYPE != APP_DRIVER_GR551X)
dma_params.p_instance = DMA0;
#endif
dma_params.channel_number = DMA_Channel0;
dma_params.init.direction = DMA_MEMORY_TO_MEMORY;
dma_params.init.src_increment = DMA_SRC_INCREMENT;
dma_params.init.dst_increment = DMA_DST_INCREMENT;
dma_params.init.src_data_alignment = DMA_SDATAALIGN_BYTE;
dma_params.init.dst_data_alignment = DMA_DDATAALIGN_BYTE;
dma_params.init.priority = DMA_PRIORITY_LOW;
s_dma_channel_id = app_dma_init(&dma_params, app_dma_callback);
- p_instance :DMA模块ID,选择DMA0。
- channel_number:DMA通道,选择DMA_Channel0,即通道0。
- init.direction:DMA传输方向,选择DMA_MEMORY_TO_MEMORY,即传输方向内存到内存。
- init.src_increment:源地址寄存器更新方式,选择DMA_SRC_INCREMENT,即源端地址递增。
- init.dst_increment:目的地址寄存器更新方式,选择DMA_DST_INCREMENT,即目的端地址递增。
- init.src_data_alignment:源数据宽度,选择DMA_SDATAALIGN_BYTE,即源数据宽度8 bits。
- init.dst_data_alignment:目标数据宽度,选择DMA_DDATAALIGN_BYTE,即目标数据宽度8 bits。
其他可选配置请参考结构体相关定义。
重要函数
-
DMA初始化
s_dma_channel_id = app_dma_init(&dma_params, app_dma_callback);
-
dma_params:初始化参数结构体
-
app_dma_callback:用户自定义回调函数
-
s_dma_channel_id:返回的DMA通道ID
-
-
DMA数据传输
app_dma_start(s_dma_channel_id, (uint32_t)&g_src_data, (uint32_t)&g_dst_data, DMA_DATA_LEN);
-
g_src_data:源数据数组
-
g_dst_data:存放数据的目的数组
-
DMA_DATA_LEN:传输数据的长度
-
测试验证
连接开发板到PC端,打开串口助手助手,连接串口。串口日志显示DMA搬运数据的对比结果,如下:
app_dma0_memory_to_memory: success
app_dma1_memory_to_memory: success
This example demo end.