
Technical discussions about the TI C6000 DSPs (including the c62x, c64x and c67x DSPs).
Hello,
Currently we are working with the EVMDM6437 and we cannot make EDMA3 works
fine on DM6437 as we did on DM642 and DM6446.
The project is really complex and large so we decided to symplify it and try
to fix the EDMA3 troubles with an small program. The problem is related with
linked transfers. The aplication works fine if three transfers are linked
but when we link 4 transfers the following error appear: TC Program Set
already active.
We transfer the contexts of the transfers with IDMA from internal memory to
the Parameter Set table, specifically PaRam 20, 21, 22 and 23.
Transfers (through channel 2) are configured to be auto-triggered when the
seventh word of 23th PaRam Set was written. We get the error just when the
first auto-trigger transfer is performed and the program stop the execution.
We tested this code on a DM6446 DSP with 4 and more linked transfers without
problems.
Next We show a piece of the code we have written.
Does anybody know what mean exactly "TC Program Set already active" ?
How could we solve this problem? Any ideas?
Regards,
Fernando & Gonzalo
CODE:
void ddr2_a_L2_2(void) // cuatro Y de 8x8 enlazadas params:20-23
{
int i;
*(volatile uint *)((uint)QEESR)= (2<<2);
*(volatile uint *)((uint)QCHMAPn+(2<<2))= (23<<5)|(7<<2);
/* contexto de la transferencia Y1 */
Params[0].option = 0x0011F00C;
Params[0].src = (unsigned int)y_mb_DDR2;
Params[0].bcnt_acnt = ((8)<<16)|8;
Params[0].dst = (unsigned int)y_mb_L2;
Params[0].dstbidx_srcbidx = ((8)<<16)|32;
Params[0].bcntrld_link = 0xFFFF;
Params[0].dstcidx_srccidx = 0;
Params[0].ccnt = 1;
/* contexto de la transferencia Y2 */
Params[1].option = 0x0001F004;
Params[1].src = (unsigned int)(y_mb_DDR2+8);
Params[1].bcnt_acnt = ((8)<<16)|8;
Params[1].dst = (unsigned int)(y_mb_L2+8*8);
Params[1].dstbidx_srcbidx = ((8)<<16)|32;
Params[1].bcntrld_link = 0x4280;
Params[1].dstcidx_srccidx = 0;
Params[1].ccnt = 1;
/* contexto de la transferencia Y3 */
Params[2].option = 0x0001F004;
Params[2].src = (unsigned int)(y_mb_DDR2+8*32);
Params[2].bcnt_acnt = ((8)<<16)|8;
Params[2].dst = (unsigned int)(y_mb_L2+8*8*2);
Params[2].dstbidx_srcbidx = ((8)<<16)|32;
Params[2].bcntrld_link = 0x42A0;
Params[2].dstcidx_srccidx = 0;
Params[2].ccnt = 1;
/* contexto de la transferencia Y4 */
Params[3].option = 0x0001F004;
Params[3].src = (unsigned int)(y_mb_DDR2+8+8*32);
Params[3].bcnt_acnt = ((8)<<16)|8;
Params[3].dst = (unsigned int)(y_mb_L2+8*8*3);
Params[3].dstbidx_srcbidx = ((8)<<16)|32;
Params[3].bcntrld_link = 0x42C0;
Params[3].dstcidx_srccidx = 0;
Params[3].ccnt = 1;
/* copio param a la tabla y se autodispara QDMA */
*(volatile uint *)((uint)IDMA0_MASK)= (uint)0x00000000;
*(volatile uint *)((uint)IDMA0_SOURCE)= (uint)Params;
*(volatile uint *)((uint)IDMA0_DEST)= (uint)0x01C04280; // PaRAM 20
*(volatile uint *)((uint)IDMA0_COUNT)= (uint)0x00000000; // trigger
IDMA0
}
------------------------------------
OMAP35x EVM jump-starts low-power apps
------------------------------------
The modular and extensible OMAP35x Evaluation Module (EVM) enables developers to start building
applications based on the OMAP35x architecture:http://www.DSPRelated.com/omap35x