- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I am trying to modify the 2bit addr slavefifo sync example to have a multi channel DMA with two GPIF producer sockets instead of a single channel DMA with one GPIF producer socket. The consumer socket is still the same (UIB socket 1).
I have modified all the occurrences of glChHandleSlFifoPtoU to match the "CyU3PDmaMultiChannel" type and have the following configuration for the multi channel DMA:
dmaCfgManyToOne.size = DMA_BUF_SIZE*size; //increase buffer size for higher performance
dmaCfgManyToOne.count = 1;//CY_FX_SLFIFO_DMA_BUF_COUNT_P_2_U; // increase buffer count for higher performance
dmaCfgManyToOne.validSckCount = 2;
dmaCfgManyToOne.prodSckId[0] = CY_FX_PRODUCER_PPORT_SOCKET0;
dmaCfgManyToOne.prodSckId[1] = CY_FX_PRODUCER_PPORT_SOCKET1;
dmaCfgManyToOne.consSckId[0] = CY_FX_CONSUMER_USB_SOCKET;
dmaCfgManyToOne.consSckId[1] = 0;
dmaCfgManyToOne.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfgManyToOne.notification = 0;
dmaCfgManyToOne.cb = NULL;
dmaCfgManyToOne.prodHeader = 0;
dmaCfgManyToOne.prodFooter = 0;
dmaCfgManyToOne.consHeader = 0;
dmaCfgManyToOne.prodAvailCount = 0;
apiRetStatus = CyU3PDmaMultiChannelCreate (&glChHandleSlFifoPtoU, CY_U3P_DMA_TYPE_AUTO_MANY_TO_ONE, &dmaCfgManyToOne);
CyU3PDmaMultiChannelCreate() fails with "CY_U3P_ERROR_BAD_ARGUMENT". Any suggestions?
As a side note, another single channel DMA between a UIB producer socket and a PIB consumer socket is created successfully before attempting to create the multi channel DMA.
Also, the GPIF state machine was modified to indicate the current thread level in FLAG A & B instead of thread 0 level. An additional call to initialize the socket has been added:
CyU3PGpifSocketConfigure (0,CY_U3P_PIB_SOCKET_1,6,CyFalse,1);
I should also mention that I went through the Cypress SDK source code in "cyu3multichannel.c" and searched for all the conditions in CyU3PDmaMultiChannelCreate() that return this argument. Everything seems legit so I must be missing something.
Thanks in advance,
Eyal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
1) Did you change the channel handle glChHandleSlFifoPtoU type from CyU3PDmaChannel to CyU3PDmaMultiChannel.
2) Did you change the type of dmaCfgManyToOne from CyU3PDmaChannelConfig_t to CyU3PDmaMultiChannelConfig_t
3) Please comment out the line dmaCfgManyToOne.consSckId[1] = 0; as this is not necessary.
Regards,
- Madhu Sudhan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes, did all that stuff, but it still fails.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Please attach your firmware for us to look into it