De-interleaving DMA output from sequentially configured ADCs
I am using all 3 ADCs on an F765 to convert 16 channels of data at 50 ksps. Each ADC is configured to perform a sequence of conversions (5 on ADC1 and ADC2, 6 on ADC3), all triggered from the same timer. I have also configured them to ping-pong the data using the DMA. The ping-pong buffers reside in external SDRAM.
This works fine, but, ofcourse, there is the problem of the data being scrambled, so it has to be de-interleved into linear buffers for each channel so that I can then perform signal processing on each channel.
There is a lot of data to de-interleave (5000x2x2x16 bytes), and 100 ms in which to do all the required processing before the next buffer needs to be serviced. The de-interleaving routine takes about 39 ms after optimisation, so I only have 61 ms for the other filtering operations, which is likely to be a problem.
The DMA doesn't seem to allow clever indexing to de-interleave on the fly...am I missing a trick?
Is there something else I should be considering to get around the problem?
