I use audio codec having 4 channels ADC. Samples are send in TDM 4 channels mode.
I want to use block SIMD mode for FIR filters implementation, so the samples from every ADC have to be in separate circular buffers.
As I see, I can use chained DMA mode in which the modifier in TCB may equal to single buffer length, so single TDM frame may be serviced this, 2D way. But, the next frame will need +4 starting index, so for N samples block N chained TCBs are needed. I will use channel buffers having 2N length (circular buffers must have a minimum length of N+taps), but may I implement such a 2D structure in a simpler way ?
I do not also understand, why index in TCB is so complicated:
(taken from initSPORT01_TDM_mode.c (Block-based Talkthrough) example for ADDS_21479_EzKit)
TCB_RxBlock_A0 = (((unsigned int) TCB_RxBlock_A1 + 3)& OFFSET_MASK)|PCI ;
Could you explain ?
P.S. A presentation with drawings explaining DMA modes (simple, ping-pong, etc.) would help me and others.