TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678LE平台上,在SYS/BIOS下使用EDMA_LLD搬移数据,出现edma事件丢失或DSP内核陷死在内部处理函数中

我在TMS320C6678LE评估开发板上,在SYS/BIOS下使用IPC和EDMA_LLD进行多核间的通信和数据搬移时,出现EDMA event 丢失或核陷死在edma3CCErrHandler()函数中,不知道如何解决,也找不到问题的原因,请各位大侠支支招,谢谢了

具体的情景是:在一个task中建立了一个for(i=0;i<6;i++)循环,循环体内执行了四次EDMA数据搬移,第一次执行从MSM到L2的矩阵数据块搬移,第二次执行L2到MSM的矩阵数据转置搬移,第三次执行从MSM到L2的矩阵数据块搬移,第四次执行从L2到MSM的矩阵数据块搬移

问题是:edma执行过程中,如果edma的等待中断语句跟例程一样,在while(irqRaised==0u)时打印等待信息printf(“waiting for interruptting。。。”),则不会出现问题,但程序的实时性太差了,满足不了工程需求,一旦去掉打印函数或换成空的for循环语句,就会出现上述问题。

Andy Yin1:

可能是由于一个循环体内多个数据的搬移采用了相同的edma通道,前一次数据搬移还没有完成就启动后一次,可能到时edma事件丢失,在加了printf后会加大各个数据搬移启动的间隔避免了上述问题。对于同一个edma 通道,相邻两次启动需要保证前一次启动已经被push到EDMA TC Queue中,否则有可能导致事件丢失。

你在一个循环体内做这样的edma通道启动搬移,应该只是为了测试好玩而已吧,实际中会有这样的场景?

Wende Wu:

回复 Andy Yin1:

谢谢Andy Yin1的解答,我想继续问一下,对于同一个edma 通道,有没有什么办法可以确保相邻两次启动,前一次启动已经被push到EDMA TC Queue中呢?我做这样的edma通道启动搬移不是为了测试好玩,确实是实际的情景有这样的需求。

实际的情景是某个图像处理算法需要对一副128*128的float型图像做6次二维FFT,但TI提供的imglib中没有二维FFT的实现函数,只在dsplib中提供了一维FFT的实现函数,为了提高利用C6678多核的并行性,每次将一副图像分成8个16*128的图像块分发到每个核做一维FFT,然后转置合并在一起,再重新分块分发到每个核做一维FFT,所以才会出现上述循环体内的edma通道启动搬移。

赞(0)
未经允许不得转载:TI中文支持网 » C6678LE平台上,在SYS/BIOS下使用EDMA_LLD搬移数据,出现edma事件丢失或DSP内核陷死在内部处理函数中
分享到: 更多 (0)