This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

循环使用EDMA3传输的疑问



工程师你好,最近调试EDMA3有两点疑问,请不吝赐教:

   DDR3中声明了一个2048*2048*2的空间,暂记为input,load复数数据,通过修正源地址,每次搬移取两行数据到L2SAM运算,但是出现以下问题

1、第一次搬移源地址为&input[0],搬移结果正确,第二次搬移源地址为&input[2*2048*2],但结果仍为第一次搬移结果,感觉源地址没有更新。

2、用cycle simlutor 仿真时,如果在DDR3中声明了一个2048*2048*2的空间,在Debug时需要耗时20多分钟才能进入main函数第一行,如果将DDR3中声明空间变为200*200*2则很快进入main函数。

请问EDMA 源数据地址更新是否能通过改变数组索引实现,第二个问题是否有快一点的解决方法

  • 问题1
    建议直接查看EDMA的PaRAM配置参数的变化来定位问题。或者把你的代码贴上来看看。

    问题2
    如果你的工程是ELF格式,那么这个全局数组会被初始化成全0.初始化工作是程序加载以后,执行到main之前进行的。
    cycle simulator会仿真内存访问延迟,运行起来很慢,初始化DDR的大数组会花很长时间。
    所以你观察到要很长时间。只是验证功能的话,建议用functional simulator

  • 你好,James Li2

    csl库只支持elf格式,我改为functional simulator,编译正确,但是debug时出现找不到boot.c,请问如何解决

  • tian yu tong 你好:

    问题一:第二次搬移结果仍为第一次的数据,原因可能是在搬第二次的时候PaRAM没有更新,结合你搬数的大小尝试在源地址中加入0x2000*j,其中j为循环的次数;

    问题二:直接声明2048*2048*2这么一个数据块确实会很费时间,尝试将你待传输的数据生成DATA文件,在运行工程前再将生成的DATA文件Load至DDR3中,8MB的数据块会很快Load进去。

  • Ryan KU 你好:

    我现在就是,在运行工程前再将生成的DATA文件Load至DDR3,目前是点击debug到进入main函数这个过程很慢,我是编写了一个EDMA函数,在main中调用EDMA函数实现数据搬移,EDMA函数的参数为

    Uint8 channelNum ,
    Uint8 instNum , 
    float *srcBuff ,
    float *dstBuff ,
    Uint32 A_Count, 
    Uint32 B_Count, 
    Uint32 C_Count, 
    int16_t Src_B_idx,
    int16_t Des_B_idx,
    int16_t Src_C_idx,
    int16_t Des_C_idx

  • tian yu tong 你好:

        你在预处理过程中是否include了一些数据文件,这也会导致编译过程较慢;

         请确认源地址目的地址的指针类型是否为float,如果是那么CCNT设为2我觉得不太合适;

         不知你的应用背景是什么,方便的话可以将你的工程贴出来供大家一起分析学习。

  • Ryan KU 你好:

    现在数据传输问题已经解决,已经可以正确取数到L2,是目的地址空间定义问题。

    我没用#include数据,只是声明了数组大小对齐及位置。