This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6457 CSL McBSP - EDMA single shot Interrupt only

Hi, 

     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. 

e.g.

// Start TI supplied code.

WAIT_FOR_1_CLK;

/* wait for Transmit complete Interrupt */

while (!intFlag);

/* wait for Transmit complete Interrupt */

while (!rxintFlag);

// end TI supplied code.

// Added to cause manual trigger of data. 

CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);

 

what am I missing?  Do I need to reload the channel information?  

Thanks in advance.  

Bill  

  • Bill,

    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?

    Regards,
    RandyP

  • Hi Randy,

         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.   

    C:\ti\pdk_c64x_1_00_00_06\packages\ti\csl\c6457\csl_c6457\example\mcbsp\mcbsp_edma\

    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);

    and

    How do I check with is the active and linked paramset currently being used for those channels?   

  • William,

    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.

    Regards,
    RandyP