硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3094|回复: 5
收起左侧

[DMA] STM32H7的DMA存储器到存储器模式的速度基本是11MHz复制频率

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2019-1-30 02:03:12 | 显示全部楼层 |阅读模式
测试条件:
1、使用DMA1 Stream1
2、RAM使用D2域的SRAM1,地址0x30000000以及D3域的SRAM4,地址0x38000000速。

测试代码:
#pragma location = 0x30000000
uint32_t SRC_Buffer[1000];

#pragma location = 0x30001000
uint32_t SRC_Buffer1[1000];

DMA_HandleTypeDef   DMA_Handle;

__HAL_RCC_DMA1_CLK_ENABLE();

DMA_Handle.Instance                          = DMA1_Stream1;
DMA_Handle.Init.Request                    = DMA_REQUEST_MEM2MEM;  
DMA_Handle.Init.Direction                   = DMA_MEMORY_TO_MEMORY;
DMA_Handle.Init.PeriphInc                  = DMA_PINC_ENABLE;
DMA_Handle.Init.MemInc                    = DMA_MINC_ENABLE;
DMA_Handle.Init.PeriphDataAlignment  = DMA_PDATAALIGN_WORD;
DMA_Handle.Init.MemDataAlignment    = DMA_PDATAALIGN_WORD;
DMA_Handle.Init.Mode                        = DMA_NORMAL;
DMA_Handle.Init.Priority                      = DMA_PRIORITY_VERY_HIGH;
DMA_Handle.Init.FIFOMode                  = DMA_FIFOMODE_ENABLE;
DMA_Handle.Init.FIFOThreshold            = DMA_FIFO_THRESHOLD_FULL;
DMA_Handle.Init.MemBurst                   = DMA_MBURST_SINGLE;
DMA_Handle.Init.PeriphBurst                = DMA_MBURST_SINGLE;

HAL_DMA_Init(&DMA_Handle);

HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);


HAL_DMA_Start_IT(&DMA_Handle, (uint32_t)SRC_Buffer, (uint32_t)SRC_Buffer1, 1000);
HC574_TogglePin(GPIO_PIN_17);                                  《------------------此处开启一个IO翻转

void DMA1_Stream1_IRQHandler(void)
{
    if((DMA1->LISR & DMA_FLAG_TCIF1_5) != RESET)
    {        HC574_TogglePin(GPIO_PIN_17);                         《------------------此处开启一个IO翻转
        DMA1->LIFCR = DMA_FLAG_TCIF1_5;
    }
}

测试1000个数据的复制粘贴耗时90.26us,基本就是11MHz的复制粘贴速度(地址是否自增,对其没有影响,下面的测试同理)。
QQ截图20190130015750.jpg

将DMA数据宽度改成都改成8bit,测试1000个数据的复制粘贴耗时24us,基本就是41.6MHz的复制粘贴速度。
99.jpg

将DMA数据宽度改成都改成16bit,测试1000个数据的复制粘贴耗时46.40us,基本就是21.5MHz的复制粘贴速度。
8.jpg

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2019-1-30 09:45:55 | 显示全部楼层

使用D2域的DMA1操作D1域的AXI SRAM做数据复制粘贴,性能巨降,复制粘贴1000个32bit数据,耗时210us

9999.jpg




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2019-1-30 09:53:42 | 显示全部楼层
使用D2域的DMA1操作D1域的FMC,实现SRAM1复制数据到FMC,复制粘贴1000个32bit数据,耗时228us
9.jpg


回复

使用道具 举报

3

主题

40

回帖

49

积分

初级会员

积分
49
发表于 2020-8-5 14:55:58 | 显示全部楼层
请问如何用示波器捕捉到这个电平的翻转?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2020-8-5 15:37:30 | 显示全部楼层
HuSanKeke 发表于 2020-8-5 14:55
请问如何用示波器捕捉到这个电平的翻转?

设置触发模式即可
回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2020-8-5 21:23:24 | 显示全部楼层
好帖,谢谢版主。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 05:31 , Processed in 0.185529 second(s), 36 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表