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.
您好!
目标:已经做到一个core驱动一个tcp3d,需要1600K周期,太长了。目前想用这个核驱动3个tcp3d。(能提供一个像详细的方法么)
困难:1.驱动3个tcp3d意味着需要驱动3个task,这3个task(就是例程那样写的)能够并行操作么,还是执行完了A,再B,再C,和一个tcp3d效率一样?
2.第二个是我目前只能做一个instance,两个开启任何一个都是好的,但是hEDMA这个句柄只有一个,原因EDMA都用的instance 2,一个inst在一个core上只能初始化一次,导致我们无法把3个TCp3d需要的初始化代码都顺利执行,晕倒的现象是:
EDMA channel 34 open (result = 0)
EDMA channel 35 open (result = 0)
EDMA channel 32 open (result = 0)
EDMA channel 33 open (result = 0)
EDMA link channel 400 open (result = 0)
EDMA link channel 401 open (result = 0)
EDMA link channel 402 open (result = 0)
EDMA link channel 403 open (result = 0)
EDMA link channel 404 open (result = 0)
EDMA link channel 405 open (result = 0)
EDMA link channel 406 open (result = 0)
EDMA link channel 407 open (result = 0)
EDMA link channel 408 open (result = 0)
EDMA link channel 409 open (result = 0)
EDMA link channel 410 open (result = 0)
EDMA link channel 411 open (result = 0)
EDMA link channel 412 open (result = 0)
EDMA link channel 413 open (result = 0)
EDMA link channel 414 open (result = 0)
EDMA link channel 415 open (result = 0)
EDMA link channel 416 open (result = 0)
EDMA link channel 417 open (result = 0)
EDMA link channel 418 open (result = 0)
EDMA link channel 419 open (result = 0)
EDMA link channel 420 open (result = 0)
EDMA link channel 421 open (result = 0)
但是开启一个后在开启第二个会出问题(同时开):
Tx FDQ 741 successfully setup with 1 descriptors
EDMA channel 0 open (result = 0)
EDMA channel 1 open (result = 0)
EDMA channel 32 open (result = 0)
EDMA channel 33 open (result = 0)
EDMA link channel 400 open (result = 0)
EDMA link channel 401 open (result = 0)
EDMA link channel 402 open (result = 0)
EDMA link channel 403 open (result = 0)
EDMA link channel 404 open (result = 0)
EDMA link channel 405 open (result = 0)
EDMA link channel 406 open (result = 0)
EDMA link channel 407 open (result = 0)
EDMA link channel 408 open (result = 0)
EDMA link channel 409 open (result = 0)
EDMA link channel 410 open (result = 0)
EDMA link channel 411 open (result = 0)
EDMA link channel 412 open (result = 0)
EDMA link channel 413 open (result = 0)
EDMA link channel 414 open (result = 0)
EDMA link channel 415 open (result = 0)
EDMA link channel 416 open (result = 0)
EDMA link channel 417 open (result = 0)
EDMA link channel 418 open (result = 0)
EDMA link channel 419 open (result = 0)
EDMA link channel 420 open (result = 0)
EDMA link channel 421 open (result = 0)
[C66xx_5] Core 0 fftc time used is 164825
all time consumed is 10076964
[C66xx_4] EDMA channel 34 open (result = -139)
EDMA channel 35 open (result = -139)
EDMA channel 1002 open (result = -139)
EDMA channel 1002 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
EDMA link channel 1005 open (result = -139)
难道必须两个片在一个核控制的条件下无法同时运行?
谢谢大家!
这个函数过了还是收不了中断 之前第一个inst还可以收中断 现在第一个instance也收不到了
Tx FDQ 741 successfully setup with 1 descriptors
EDMA channel 0 open (result = 0)
EDMA channel 1 open (result = 0)
EDMA channel 32 open (result = 0)
EDMA channel 33 open (result = 0)
EDMA link channel 400 open (result = 0)
EDMA link channel 401 open (result = 0)
EDMA link channel 402 open (result = 0)
EDMA link channel 403 open (result = 0)
EDMA link channel 404 open (result = 0)
EDMA link channel 405 open (result = 0)
EDMA link channel 406 open (result = 0)
EDMA link channel 407 open (result = 0)
EDMA link channel 408 open (result = 0)
EDMA link channel 409 open (result = 0)
EDMA link channel 410 open (result = 0)
EDMA link channel 411 open (result = 0)
EDMA link channel 412 open (result = 0)
EDMA link channel 413 open (result = 0)
EDMA link channel 414 open (result = 0)
EDMA link channel 415 open (result = 0)
EDMA link channel 416 open (result = 0)
EDMA link channel 417 open (result = 0)
EDMA link channel 418 open (result = 0)
EDMA link channel 419 open (result = 0)
EDMA link channel 420 open (result = 0)
EDMA link channel 421 open (result = 0)
EDMA channel 34 open (result = 0)
EDMA channel 35 open (result = 0)
EDMA channel 50 open (result = 0)
EDMA channel 51 open (result = 0)
EDMA link channel 422 open (result = 0)
EDMA link channel 423 open (result = 0)
EDMA link channel 424 open (result = 0)
EDMA link channel 425 open (result = 0)
EDMA link channel 426 open (result = 0)
EDMA link channel 427 open (result = 0)
EDMA link channel 428 open (result = 0)
EDMA link channel 429 open (result = 0)
EDMA link channel 430 open (result = 0)
EDMA link channel 431 open (result = 0)
EDMA link channel 432 open (result = 0)
EDMA link channel 433 open (result = 0)
EDMA link channel 434 open (result = 0)
EDMA link channel 435 open (result = 0)
EDMA link channel 436 open (result = 0)
EDMA link channel 437 open (result = 0)
EDMA link channel 438 open (result = 0)
EDMA link channel 439 open (result = 0)
EDMA link channel 440 open (result = 0)
EDMA link channel 441 open (result = 0)
EDMA link channel 442 open (result = 0)
EDMA link channel 443 open (result = 0)
发现国外的论坛提供这样一个帖子 http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/322217.aspx
但是依然没有给出一个具体的方法。
目前我把EDMA instance 2创建了, 但是
/* Open the Driver Instance */
hEdma = EDMA3_DRV_open (edma3Id, (void *) &initCfg, &edma3Result);
依然不能成功。
现在的首要目的是让一个核控制三个TCP3d跑起来,其次才是尽量解放core在decoding的过程中还能去做其他的计算。
继续等待TI工程师或者论坛上有经验工程师的解答和帮助!
谢谢!
新的一周,继续等待。。。。。。。。。。。。。。其实也看了很久 感觉是不是MCSDK的例程就根本没法改成我现在的需求 要改的地方略多 而且现在的问题才开始出现在EDMA中 TCP3d后面还有很多要改的
(Andy写的例程是大端, 我就仍然按照MCSDK的例程小端进行修改 不然工作量太大)
我把进展和目前的问题在叙述一遍:
1. TCP3d开始工作之前要进行一次初始化 例程中使用了allinit() API, 在这个函数里面,首先要EDMA_init() 其中先EDMA3_DRV_create,然后EDMA3_DRV_open。
如果是一个core在一个时刻只控制一个tcp3d,这个流程没问题。但是如果要控制两个tcp3d,我个人觉得儿就会申请两次EDMA。第一次仍按照上述流程,但是第二次由于EDMA3_DRV_create一般指creat一次(如果对同一个instance creat两次,openEdmaChannels()中的EDMA3_DRV_requestChannel就会报错),所以第二次初始化直接EDMA3_DRV_create,但是失败,返回的错误代码是-165,根本就不在.h文件的错误代码种类中,所以我也不知道是什么报错。 看了EDMA3_DRV_create的源文件,也不深明白哪儿错了。
虽然知道后面还要修改很多地方,但是在这里就别卡死了。
发帖块一周多了,希望得到解答啊!附件是国外论坛的一个设计例子,虽然看出他使用高个不同的ECC是不可能的,但是总体目标是一致的,就是一个core控制3个tcp3d,以达到加快解码速度为目的,尽可能释放DSP对硬核的维护。
谢谢大家!
目前看了一下K_1和MCSDK的而来那个TCP3d例程。
EDMA不能重复申请的问题还没想好解决方法,然后又遇见了新问题:(在此仅作记录,自己可以通过代码验证后在明确一下)
TCP3d decode完毕后会出发EDMA传数据到memory上,也就是传说中的revt0和revt1,MCSDK的程序中写的是还需要发送semaphore,重新TCP3d_start来触发下一个块的EDMA传输到TCP3d中。请问,我理解对了么?(如果是自动促发,waitTCP3d处理那个模块while中的TCP3d_start可以去掉么)
我看K_1的例程,其中revt0和revt1压根就没提到还需要中断,相当于就是Chain链接触发了,是么? 然后处理完所有blocks后通过polling来判断。
继续等待好心人点播可行方案。
晚上修改:目前经过测试,MCSDK的例程确实是通过revt0和revt1发出的semaphore,然后通过TCP3d_start函数来触法EDMA传输下一个传输块的额
另外K_1的例程也修改了一下,还是无法实现一个core控制两个TCP3d,问题也是出现在EDMA的CHannel上,第一个Keystone_TCP3D_PollFree就过不了。
又是一天过去了,期待解答!我在想能去问TI的FAE么?????