I'd like to expand the CSL example provided for the C6457 that performs loopback mode on the McBSP using the DMA to transfer data. When I run the example, it works great. When I try to perform a manual trigger, the interrupt no longer fires.
I am using the C6457, CCS v.5.1, and the PDK that comes with MCSDK 1.08, which includes the CSL examples.
// Start TI supplied code.
/* wait for Transmit complete Interrupt */
// end TI supplied code.
// Added to cause manual trigger of data.
what am I missing? Do I need to reload the channel information?
Thanks in advance.
This is probably a sequencing problem with how the McBSP interacts with the other components through its event and interrupt signalling and hand-shaking.
But it is not clear whether your interrupts come from the EDMA3 or the McBSP, or what the states are for the flags and events out of the EDMA3 and the McBSP.
Prior to the CHANNEL_SET command, please check the status flags of the McBSP to see what its signalling is and whether the buffers are full or empty. Also, check the values in the following EDMA registers, including the ones with H when there are two 32-bit registers: EMR, ER, CER, EER, SER, IER, IPR, and the active and link PaRAM for the channels you are using. Which DMA channels are you using for the McBSP operations?
Search for answers, Ask a question, click Verify when complete, Help others, Learn more.
I'm using the TI supplied example. There wasn't any changes to the McBSP(0) configuration. I did have to setup the linked param sets, which were not in my original code.
After adding in linked channels, I'm currently seeing a TCC Interrupt but, not the RX receive interrupt (McBSP is in loopback mode). The param set looks like --> DMA channel 12 for transmit, DMA channel 64 for the reload paramset for transmit. I only open one channel, and let the linked paramset happen naturally by setting the linkBCntrld register:
myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPing,0);
myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPong,0);
How do I check with is the active and linked paramset currently being used for those channels?
In the Training section of TI.com, there is a training video set for the C6474. It is a different device, but the EDMA3 is the same, other than the possibility that the number of channels and such might vary. The EDMA/QDMA/IDMA Module will help get us in sync with the same terms and will help you understand things like active and link PARAM sets. You can find the complete video set at http://focus.ti.com/docs/training/catalog/events/event.jhtml?sku=OLT110002 .
My guess is that what you really want to do is to get continuous data going out the Tx side of McBSP0 and coming in on the Rx side of McBSP0. The mcbsp_edma example does not get you very close to that, and the way to get there is not doing a manual trigger after every 16 samples. I think the video will help a lot.
All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.
TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs andembedded processors, along with software, tools and the industry’s largest sales/support staff.