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.

请问ti工程师mcasp总线接入多路i2s后的EDMA配置方式?

请问一下TI的工程师:

       我们公司之前的音频处理方案是使用C6748的mcasp接一路I2Scodec,mcbsp接一路PCM格式的codec。最后分别通过edma的asp和bsp总线进行数据搬运,然后做运算。现在我们的方案要改一下,需要外接6~8个mic所以现在只用mcasp总线连接3~4个codec,而且都用i2s连接。

       我评估了一下主要的修改在asp的驱动上,需要把pinset和axr0~axr7的通道再重新分配一下。dma这块我检查了一下好像不需要怎么改动。唯一不太确定是是dma的buf数据排列和事件触发的机制。首先说下时间触发机制。我的edma目前只绑定了mcasp的Tx和Rx两个事件,但是我的接收通道接了4路codec,那么每次事件更新是其中一路codec的数据更新了还是4个一起都更新了传递到DSP?

       第二个是DMA里面buf的数据排列,之前只接收一路I2S的时候比较清楚,buf里面就是I2S的左右通道数据像下面这样:L1|R1(L1 表示第一路i2s左通道数据)

 现在我接了4路I2S的dma里面的buf是不是4个通道i2s这样排序的?

 L1|R1|L2|R2|L3|R3|L4|R4|

 我只需要把每次搬运的数据量乘以4就可以了,其他的事件触发和链可以不修改。

 因为我们新的板子还在打板,要清明后一周才能回来,所以想在硬件邮寄回来之前把问题搞清楚。请ti了解这个工程师帮我看看。

  • yu tao3 说:

    现在我接了4路I2S的dma里面的buf是不是4个通道i2s这样排序的?

     L1|R1|L2|R2|L3|R3|L4|R4|

    不是,应该是 L1|L2|L3|L4|R1|R2|R3|R4|

    对于McASP来说,帧同步等同于事件,在帧同步启动接收或发送后,各数据线在同样的CLK下采样移位数据到各自的数据寄存器。所以,所有通道的数据是在同一个同步接收到的,或者发送出去的。

    DMA往McASP FIFO读/写数据的顺序按使能的数据线号的顺序排放.

  • 谢谢tony,那是我理解错了。这样的话一个通道的帧同步和4个通道的帧同步其实一样都是1个事件。我只需要把buf取值的数据调整一下,再把buf扩大4倍就可以了,其他的dma的设置不需要修改。
  • 是的。一个事件一定要把MCASP FIFO里的数据读完。比如你用的4条RX,那么一个接收事件,就要读4个数。
    另外,你会用到McASP的FIFO吗?

  • case MCASP_MODE_DMA:
    // 使能 FIFO
    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);

    // 设置接收 word 和 slot 的大小
    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize,
    MCASP_RX_MODE_DMA);

    唐工:
    fifo使能了,这里没有改过。