Hi,
This may not be the right place for this question, but I have exhausted
other options!
I am using ACPY3 to do a 2D-1D DMA transfer from DDR to L1DSRAM.
It is for a UYVY D1 -> greyscale QCIF resize algorithm.
I want to extract the Y bytes from a line of the image at a time and
write them into L1DSRAM with DMA.
So I have set my transfer up as follows:
ACPY3_Params dmaParams;
dmaParams.transferType = ACPY3_2D1D;
dmaParams.srcAddr =
pContext->ippSrcImage.pBytes;
dmaParams.dstAddr =
pContext->pScratchBuf_0;
dmaParams.elementSize = 1;
dmaParams.numElements = 720;
//720 Y values in a line
dmaParams.numFrames = 1;
dmaParams.srcElementIndex = 2;
dmaParams.dstElementIndex = 1;
dmaParams.srcFrameIndex = 0;
dmaParams.dstFrameIndex = 0;
dmaParams.waitId = 0;
ACPY3_activate( pContext->dmaHandle_0 );
ACPY3_configure( pContext->dmaHandle_0, &dmaParams, 0 );
// Reset busy flag
((IDMA3_Obj *)pContext->dmaHandle_0)->transferPending =
FALSE;
// Start the transfer
ACPY3_start( pContext->dmaHandle_0 );
The problem is that the ACPY3_wait function (not shown) hangs for all
values of numElements > 16.
My DMA channels are set up as follows:
Uns ALGO_dmaGetChannels( IALG_Handle handle, IDMA3_ChannelRec dmaTab[] )
{
ALGO_Obj *pObj = (ALGO_Obj *) handle;
dmaTab[0].handle =
pObj->pContext->dmaHandle_0;
dmaTab[0].numTransfers = 1;
dmaTab[0].numWaits = 1;
dmaTab[0].priority =
IDMA3_PRIORITY_HIGH;
dmaTab[0].persistent = TRUE;
dmaTab[0].protocol = &ACPY3_PROTOCOL;
return 1;
}
And my RTSC configuration for DMAN3 is:
var DMAN3 = xdc.useModule('ti.sdo.fc.dman3.DMAN3');
DMAN3.heapInternal = "L1DHEAP";
DMAN3.heapExternal = "DDR";
DMAN3.qdmaPaRamBase = 0x01C04000
DMAN3.maxPaRamEntries = 128;
DMAN3.paRamBaseIndex = 96;
DMAN3.numPaRamEntries = 32;
DMAN3.maxQdmaChannels = 8;
DMAN3.numQdmaChannels = 8;
DMAN3.qdmaChannels = [0,1,2,3,4,5,6,7];
DMAN3.numTccGroup[0] = 8;
DMAN3.numPaRamGroup[0] = 32;
DMAN3.tccAllocationMaskH = 0xffffffff;
DMAN3.tccAllocationMaskL = 0x00000000;
DMAN3.debug = true;
All of my buffers are allocated on a 64-byte (L1D Cache line length)
boundary.
I am using the DM6446 cycle accurate simulator in CCS v3.2.
I just can't figure out why it works for values of numElements <=16, but
fails for those above.
Thanks!
Ben
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source