CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面

示例代码

DMA Memory

示例工程实现DMA方式将数据从一块内存搬运到另一块内存,工程路径:SDK_Folder\projects\peripheral\dma\app_dma

示例工程流程图

图 8 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.

扫描关注

打开微信,使用“扫一扫”即可关注。