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.

Cofiguring different DMA channels for each serialer of McASP in DM648

We are using McASP port of DM648 and we need to use 4 serializers.Currently we are using one DMA channel(channel 15) to tranfer data from the McASp receive register to DDR.We need to receive 4 different channels through
the serializers and their ACNT,BCNT and CCNT will be different.Is it possible to
use 4 different DMA channels with different configurationst to transfer data and if
yes what are the channel numbers.

we observe only channel 15 is tied to McASp receive event.

  • You are correct that there is only the AREVT event from the McASP, which signals the EDMA that the four serializers are all ready to be serviced. However, you could setup three additional DMA channels from the unused list (let's pick 61, 62, and 63 for now) and chain between them to do the transfers you want to do.

    While it is true that there is a fixed relationship between the different peripheral events and the EDMA channels, if any EDMA channel is not used for servicing its associated peripheral/event (EER/EERH bit =0) then that channel can be used for chaining or manual trigger (ESR/ESRH). In this case, I chose 61-63 because my guess is those are the least likely to be used in a system I know nothing about. You could choose any three unused channels.

    At every AREVT event, you would immediately trigger channel AREVT (15). Configure it to transfer exactly one sample for your first serializer using ASYNC (SYNCDIM=0) and set both ITCCHEN=1 and TCCHEN=1 so this channel will chain to your next serializer channel, 61, by setting TCC=61.

    Configure channel 61 to again transfer exactly one sample for your second serializer using ASYNC (SYNCDIM=0) and set both ITCCHEN=1 and TCCHEN=1. This channel will chain to your next serializer channel, 62, by setting TCC=62.

    Configure channel 62 to transfer exactly one sample for your third serializer using ASYNC (SYNCDIM=0) and set both ITCCHEN=1 and TCCHEN=1. This channel will chain to your next serializer channel, 63, by setting TCC=63.

    Configure channel 63 to transfer exactly one sample for your third serializer using ASYNC (SYNCDIM=0) but set both ITCCHEN=0 and TCCHEN=0 to end the chaining sequence for this sample period. If you want an interrupt after all four samples have been stored, you could set ITCINTEN=1.

    All four channels can have different BCNT and CCNT values, but they will all need to have ACNT=sample size.

    If BCNT*CCNT will be different for the four channels, then be sure to have LINK tables for each channel to make sure they stay active and valid. Otherwise a chaining sequence might get broken.