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.

TMS320C6747: Trouble getting simple QDMA working

Part Number: TMS320C6747
Other Parts Discussed in Thread: TMS320C6745, OMAP-L137,

I'm using a C6747, and trying to QDMA a small block of data from an external FPGA into local RAM - essentially a background memcpy() type operation, and ideally without using any external libraries.

Using the Memory Browser in CCS (11.2), all the EDMA3 registers read back as zero - I added the following .gel file to the project (as there wasn't one before), but it doesn't seem to make any difference.

Added GEL file:

setup_memory_map()
{
 GEL_MapOn();
 GEL_MapAddStr( 0x01C04000, 0, 0x00001000, "R|W|AS4", 0 );
}

However, if I read EDMA3 registers programmatically (outputting them via the UART to a serial terminal), I do get non-zero values - they are constant, but not the values written.

Values read back from PaRAM Set 0:

01C04000 : 80006084
01C04004 : 80007404
01C04008 : 80006084
01C0400C : 8000740C
01C04010 : 80006084
01C04014 : 80007414
01C04018 : 80006084
01C0401C : 8000741C

Do I need to configure any shadow region access bits, if I'm accessing the physical EDMA3 registers directly?


If I understand correctly, all I should need to do is populate a PaRAM Set:

PaRAM Set 0:

01C04000 = 0x00100008              // TCINTEN + STATIC
01C04004 = sourceAddr
01C04008 = (0 << 16) + (size << 0) // BCNT = 0, ACNT = size
01C0400C = destAddr
01C04010 = (0 << 16) + (0 << 0)    // DSTBIDX = 0, SRCBIDX = 0
01C04014 = (0 << 16) + (FFFF << 0) // BCNTRLD = 0, no link
01C04018 = (0 << 16) + (0 << 16)   // DSTCIDX = 0, SRCCIDX = 0
01C0401C = (1 << 0)                // CCNT = 1

And then map a QDMA channel onto PaRAM Set 0 using:

01C00200 = (PAENTRY << 5) + (TRWORD << 2)

Now this is where I get confused - presumably PAENTRY should be 0 to point to PaRAM Set 0 above, but what about TRWORD?

The only reference that I can find to TRWORD is in Table 23 of SPRUFL1C:

"TRWORD points to the specific PaRAM entry or the trigger word in the PaRAM set pointed to by PAENTRY. A write to the trigger word results in a QDMA event being recognized."

I'm not sure what is meant by that...

As I said above, all I'm looking for is a simple memcpy() type operation that I can setup and kick periodically to get fresh data in the background - any guidance would be most gratefully received :o)