|
I tried to modify cyfxbulklpmanmanytoone.
However, It seems that you can create a DMA MultiChannel of "many UIB or PIB to one UIB"
but you can NOT create a DMA MultiChannel of "UIB or PIB + CPU to one UIB"
Is it really a limitation? Or there is something wrong with my DMA channel configuration?
Here is my code and results:
CASE 1 - Create DMA MultiChannel Success: PIB + UIB to one UIB
/* Create a DMA MANUAL_MANY_TO_ONE channel between
* the producer and consumer sockets of the U port.
* DMA size is set based on the USB speed. */
dmaCfg_multi.size = size;
dmaCfg_multi.count = CY_FX_BULKLP_DMA_BUF_COUNT;
dmaCfg_multi.validSckCount = 2;
dmaCfg_multi.prodSckId[0] = CY_U3P_PIB_SOCKET_0;
dmaCfg_multi.prodSckId[1] = CY_U3P_UIB_SOCKET_PROD_1;
//dmaCfg_multi.prodSckId[1] = CY_U3P_CPU_SOCKET_PROD;
dmaCfg_multi.consSckId[0] = CY_U3P_UIB_SOCKET_CONS_2;
dmaCfg_multi.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg_multi.notification = CY_U3P_DMA_CB_PROD_EVENT;
dmaCfg_multi.cb = CyFxBulkLpDmaCallback;
dmaCfg_multi.prodHeader = 0;
dmaCfg_multi.prodFooter = 0;
dmaCfg_multi.consHeader = 0;
dmaCfg_multi.prodAvailCount = 0;
apiRetStatus = CyU3PDmaMultiChannelCreate (&glChHandleBulkLp,
CY_U3P_DMA_TYPE_MANUAL_MANY_TO_ONE, &dmaCfg_multi);
CASE 2 - Create DMA MultiChannel Fail: UIB + CPU to one UIB => Debug message: CyU3PDmaMultiChannelCreate failed, Error code = 64
/* Create a DMA MANUAL_MANY_TO_ONE channel between
* the producer and consumer sockets of the U port.
* DMA size is set based on the USB speed. */
dmaCfg_multi.size = size;
dmaCfg_multi.count = CY_FX_BULKLP_DMA_BUF_COUNT;
dmaCfg_multi.validSckCount = 2;
dmaCfg_multi.prodSckId[0] = CY_U3P_PIB_SOCKET_0;
//dmaCfg_multi.prodSckId[1] = CY_U3P_UIB_SOCKET_PROD_1;
dmaCfg_multi.prodSckId[1] = CY_U3P_CPU_SOCKET_PROD;
dmaCfg_multi.consSckId[0] = CY_U3P_UIB_SOCKET_CONS_2;
dmaCfg_multi.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg_multi.notification = CY_U3P_DMA_CB_PROD_EVENT;
dmaCfg_multi.cb = CyFxBulkLpDmaCallback;
dmaCfg_multi.prodHeader = 0;
dmaCfg_multi.prodFooter = 0;
dmaCfg_multi.consHeader = 0;
dmaCfg_multi.prodAvailCount = 0;
apiRetStatus = CyU3PDmaMultiChannelCreate (&glChHandleBulkLp,
CY_U3P_DMA_TYPE_MANUAL_MANY_TO_ONE, &dmaCfg_multi);
|