Hi,
I'm trying to setup a Column2Row transformation using appUdma API, as depicted below:
As you can see, I'm using dicnt0 = 4, while icnt0 = 1. This does not work. However, if I use dicnt0=1, dicnt1=4, ddim1=1, then it works.
I haven't seen documented anywhere that dicnt0 should always be equal to icnt0. Is this UDMA API quirk?
Here's an approximation of my code:
int32_t Col2Row_4x4(float* src, float* dst) { app_udma_copy_nd_prms_t prms_nd; int32_t ret = 0; /* Set Up the Copy */ appUdmaCopyNDPrms_Init(&prms_nd); prms_nd.copy_mode = 0; prms_nd.eltype = 0; /* Source Params */ prms_nd.icnt0 = sizeof(float; prms_nd.icnt1 = 4; prms_nd.icnt2 = 1; prms_nd.icnt3 = 1; prms_nd.dim1 = sizeof(float); prms_nd.dim2 = 0; prms_nd.dim3 = 0; prms_nd.src_addr = (uint64_t) src; /* Destination Params */ prms_nd.dicnt0 = sizeof(float) * 4; prms_nd.dicnt1 = 1; prms_nd.dicnt2 = 1; prms_nd.dicnt3 = 1; prms_nd.ddim1 = 0; prms_nd.ddim2 = 0; prms_nd.ddim3 = 0; prms_nd.dest_addr = (uint64_t) dst; ret = appUdmaCopyNDInit(udmaCpyCh, prms_nd); if (0 == ret) { ret = appUdmaCopyNDTrigger(udmaCpyCh); if (0 == ret) { ret = appUdmaCopyNDWait(udmaCpyCh); } appUdmaCopyNDDeinit(udmaCpyCh); } return ret; }