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.

McASP+AFIFO+EDMA3 scenario. Confirmation needed!

Dear Gentle(wo)men,

I plan to implement a combination of McASP, AFIFO and EDMA3.

The data frames consist of two sub-frames, which have different data layout. So I would prefer to organize the data transfer as follows:

- AB-synced data transfer, one transfer request per frame;

- AFIFO as a DMA event pacer, AFIFO should content all of one frame data;

- Two chained EDMA3 channels, one channel per sub-frame;

- Different values of ACNT, BCNT, BIDX, CIDX for every of two chained channels.

Unfortunately, as I’ve understood from here:

http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/p/153541/558221.aspx#558221,

the BCNT value should be ever equal WFIFOCTL.WNUMEVT/RFIFOCTL.RNUMEVT, that will mean impossibility of my scenario.

Now is the question: Is this condition really obligatory?
BCNT =WFIFOCTL.WNUMEVT/RFIFOCTL.RNUMEVT

Thanks in advance

GenPol

  • Hi,

    Thanks for your post.

    Yes. it is mandatory with AB-sync transfer type and BCNT should be set to WNUMEVT/RNUMEVT as per Tx/Rx DMA event pacer logic of AFIFO

    Also, if you require Tx event pacing, WFIFOCTL.WNUMEVT should be set to a non-zero integer multiple of the value in WFIFOCTL.WNUMDMA. Likewise, for Rx. event pacing, RFIFOCTL.RNUMEVT should be set to a non-zero integer multiple of the value in RFIFOCTL.RNUMDMA

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    -------------------------------------------------------------------------------------------------------

     

  • Hi Sivaraj,

    Thanks for the answer.

    It’s absolutely correct and obviously, if we’re speaking about 32-bit transfer.
    For example, with the following frame parameter:
    SLOT_SIZE = 4 (bytes),
    SERIAL_NUM = 4,
    FRAME_SIZE = 6, we get frame volume 96 bytes and in turn
    WNUMDMA/RNUMDMA = SERIAL_NUM = 4,
    RNUMEVT/RNUMEVT = FRAME_SIZE*SERIAL_NUM = 24.

    Assuming AB-sync and ACNT=4 we get BCNT = RNUMEVT/RNUMEVT = 24.
    But why not to use e.g. ACNT=2 (bytes) and BCNT=48?

    Data transfer of 2-byte words (ACNT=2) using AFIFO is described here:
    http://processors.wiki.ti.com/index.php/McASP_Tips

    Regards

    GenPol