Just as I clicked send, I got a followup from my team... an upgrade to
CCS 3.3.56 fixed this on our side - making this feel even more like a
simulation bug. Perhaps you can try the same and let us know if that
solves the issue?
Chris
________________________________
From: Ring, Chris
Sent: Friday, November 09, 2007 4:46 PM
To: 'Ben White'; [email protected]
Subject: RE: ACPY3 problems with ACPY3_2D1D - DM6446 Sim
Can you reproduce this in hardware? We were able to reproduce
it on the simulator, but not on hardware - and we're wondering if we
should file this as a simulator bug.
Chris
________________________________
From:
[EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On
Behalf Of Ben White
Sent: Wednesday, November 07, 2007 12:12 PM
To: [email protected]
Subject: ACPY3 problems with ACPY3_2D1D - DM6446 Sim
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