arjun.a
rename files
6c7b14a
Ticket Name: CCS/TDA2: How to configure for EDMA_UTILS_TRANSFER_OUT
Query Text:
Part Number: TDA2 Tool/software: Code Composer Studio EDMA_UTILS_autoIncrement_initParam_v2 initParamV2; i configure for EDMA_UTILS_TRANSFER_IN and EDMA_UTILS_TRANSFER_INOUT is work, this time for EDMA_UTILS_TRANSFER_OUT status=0 but it dosenot work , No data is copied to extmem. initParamV2.initParams.numInTransfers = 0; initParamV2.initParams.numOutTransfers = 1; //parameters for ping transfer from external to internal memory and vice versa initParamV2.initParams.transferType = EDMA_UTILS_TRANSFER_OUT; //parameters for in transfer - ping //initParamV2.initParams.transferProp[0].roiWidth = width * 2; //initParamV2.initParams.transferProp[0].roiHeight = height*channels; //initParamV2.initParams.transferProp[0].roiOffset = 0; //initParamV2.initParams.transferProp[0].blkWidth = width * 2; //initParamV2.initParams.transferProp[0].blkHeight = height; //initParamV2.initParams.transferProp[0].blkOffset = 0; //initParamV2.initParams.transferProp[0].extBlkIncrementX = 0; //initParamV2.initParams.transferProp[0].extBlkIncrementY = height; //initParamV2.initParams.transferProp[0].intBlkIncrementX = 0; //initParamV2.initParams.transferProp[0].intBlkIncrementY = 0; //initParamV2.initParams.transferProp[0].extMemPtrStride = width * 4; //initParamV2.initParams.transferProp[0].interMemPtrStride = blkWidth * 4; //initParamV2.initParams.transferProp[0].extMemPtr = (uint8_t *)(inBufExt); //initParamV2.initParams.transferProp[0].interMemPtr = (uint8_t *)(inBufInt[0]); //initParamV2.initParams.transferProp[0].dmaQueNo = 0; //parameters for out transfer - ping initParamV2.initParams.transferProp[1].roiWidth = width * 2; initParamV2.initParams.transferProp[1].roiHeight = height * channels; initParamV2.initParams.transferProp[1].roiOffset = 0; initParamV2.initParams.transferProp[1].blkWidth = width * 2; initParamV2.initParams.transferProp[1].blkHeight = height; initParamV2.initParams.transferProp[1].blkOffset = 0; initParamV2.initParams.transferProp[1].extBlkIncrementX = 0; initParamV2.initParams.transferProp[1].extBlkIncrementY = height; initParamV2.initParams.transferProp[1].intBlkIncrementX = 0; initParamV2.initParams.transferProp[1].intBlkIncrementY = 0; initParamV2.initParams.transferProp[1].extMemPtrStride = width * 2; initParamV2.initParams.transferProp[1].interMemPtrStride = width * 2; initParamV2.initParams.transferProp[1].extMemPtr = (uint8_t *)(outBufExt); initParamV2.initParams.transferProp[1].interMemPtr = (uint8_t *)(outBufInt[0]); initParamV2.initParams.transferProp[1].dmaQueNo = 1; //configure EDMA for ping set both Ext -> Int and Int -> Ext EDMA_UTILS_autoIncrement_init_v2(dmaAutoContextInOut, &initParamV2); status = EDMA_UTILS_autoIncrement_configure_v2(dmaAutoContextInOut, EDMA_UTILS_TRANSFER_OUT);
Responses:
Hi, Which software package you are using and which version? Regards, Prasad
Hi Shuai, When you configured OUT have you already configure IN channels? Regards, Anshu
Hi: Anshu its like this ! if in _fun1 no EDMA_UTILS_globalReset(); then call fun1 6times dmaQue is over, so i must add EDMA_UTILS_globalReset in fun1 ,but this will break dmaAutoContextOut. fun1( out,indata) { EDMA_UTILS_globalReset(); ////////////// EDMA_UTILS_autoIncrement_triggerInChannel_v2(dmaAutoContextInOut); for (j= 0; j < 16; j++) { fun2( out,indata_in[bufIdx ]); EDMA_UTILS_autoIncrement_waitInChannel_v2(dmaAutoContextIn); EDMA_UTILS_autoIncrement_triggerInChannel_v2(dmaAutoContextIn); bufIdx ^= 1; } } for (j= 0; j < 32; j++) { EDMA_UTILS_autoIncrement_waitOutChannel_v2(dmaAutoContextOut); fun1( out[bufIdx],indata); EDMA_UTILS_autoIncrement_triggerOutChannel_v2(dmaAutoContextOut); bufIdx ^= 1; } BESTWISHES SHUAI
Hi Shuai, This is looking like a different question then the original question you asked. In general following should be the flow 1. EDMA_UTILS_globalReset() -> Call this only once for your frame processing. 2. Setup(init) input channels ( EDMA_UTILS_TRANSFER_IN) 3. Setup(init) output channels ( EDMA_UTILS_TRANSFER_OUT) At this stage we have not touched the hardware 4. Configure input channels ( EDMA_UTILS_TRANSFER_IN) 5. Configure output channels ( EDMA_UTILS_TRANSFER_OUT) Step 4 and 5 are the ones which will go and configure the hardware as per the transfer properties described in the init parameters. It is important to note that number of blocks in input transfer and number of blocks in output transfer should be same. Once this setup is done then you can call trigger and wait as required. I see that in your code you are calling input and output transfers with different frequency . For this case I would suggest you to use two different dmautils context for input and output channels. Configure first context with EDMA_UTILS_TRANSFER_IN and configure second context with EDMA_UTILS_TRANSFER_INOUT and give number of input channels as 0. Then you will not need to call global reset for the output transfer. Regards, anshu