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.

在EZDSP5515上使用DMA传输I2S音频数据到内部RAM的设置问题

各位工程师,我想使用EZDSP5515实现AIC3204一直采集数据,通过dma传到RAM中处理,然后再播放出来,参考EZDSP_SAMPLE的例程,我是这么设计的,

使用DMA0的通道0,将源地址设为I2S接收寄存器地址(DMA0_CH0_SRC_LSW = 0x282D; )目的起始地址设为pingpongbuffer的地址,然后关闭了I2S的接收中断,打开DMA中断,一旦pingpong填满后,就产生DMA中断,然后CPU在中断函数里处理并读出数据,再一直播放(此时采集并不停止),但是下载程序后发现pingpongbuffer里并没有采集到数据,也就没有DMA中断,请问:

1、将DMA源地址设为I2S寄存器地址,就可以一直采集到数据了吗,SYNC为同步模式,通过设置CH0EVT为I2S接收事件,就可以不用判断接收中断了吗?DMA的传输速度是如何控制的?

2、此外还有什么能实现采集信号并处理后实时播放的问题呢?尝试过不用DMA,在一个采样间隔就处理数据,但是明显处理时间太长,主要是滤波处理

谢谢!

  • 这是我的工程文件,CCS5.4

    EZDSP_Sample.zip
  • 1.用dma的话,不要使能中断,见下面的说明。

    To enable seamless transfers using the DMA, the I2S bus generates data-transfer events to DMA irrespective of the value configured in the I2SINTMASK register. Hence, it is recommended to disable CPU datatransfer interrupts in the I2SINTMASK register when using the DMA for data transfers. 

    1.2.11 DMA Event Support
    http://www.ti.com.cn/cn/lit/ug/sprufx4b/sprufx4b.pdf

    dma源地址设为I2S0接收寄存器地址,当有接收事件发生时,会触发DMA去搬移I2S0接收寄存器的内容到目的地址。

    如果pingpong buffer没数据的话,可以先跟一下程序,看接收事件是否发生?

    2.数据搬移只有DMA最快。

  • 谢谢您的回答。

    请问,是把I2S的接收中断和发送中断都关了吗?这样的话,播放还要经过I2S,不就用不了发送中断了吗(需要判断发送完成中断标志位while((XmitR & I2S0_IR) == 0);  )?

    还是要用两个DMA,一个从I2S接收寄存器读数据,另一个从RAM中处理过的数据读到I2S发送寄存器?

    还有,因为我采集到的数据设置的是左对齐格式,也就是在I2S接收寄存器的高16位,那就是直接把这个地址给DMA的LSW地址吗,还是给MSW地址?

     DMA0_CH0_SRC_LSW = 0x282D;      // is20 transmit  DMA源地址  高位或者低位?

    谢谢

  • 你好,能不能将EZDSP_SAMPLE例程发我一份。谢谢。

  • 留个联系方式吧,最近我也在做EZDSP5515项目,qq1021447147