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.

DSP6748EDMA传输数据至mcasp



大家好,最近调试音频播放程序。主要是将蓝牙接收数据转发到Mcasp。

目前,采用八个缓存池装载数据每个缓存池有18K大小。由于工作时长以及时钟不同步问题,现在将缓存池数目增加到108个。

测试两个缓存池数目差异下的代码发现 :增加到108个缓存池后存在规律性的噪音。八个缓存池测试OK。

怀疑DDR2内存空间存在缓存池的重叠。特修改CMD文件将各个缓存池分配到相应的内存块中。测试发现依旧存在问题。

复查代码N多次,确认代码无问题。目前,无法定位问题出在哪,求各位大侠指点。

万分感谢!!!!!

 

  • 是不是McASP与外面的codec的时钟不同源的原因造成的?

  • 对,是由于时钟不同源造成,这也是我增大缓存区的意义。今天又测试了一遍,发现在缓存区增大到46个以上时,就出现噪音,固定的频率。所有缓存区都在DDR2中。

    目前,还是无法定位问题。

     

  • Codec与McASP口的时钟不同源的话,增加缓冲不能解决问题,这不是数据搬移来不及而增加缓冲就能解决的问题。

    CODEC的DAC的工作时钟与McASP口的发送时钟不同源,会产生累积误差,从而造成固定间隔的噪音。所以CODEC的工作时钟可以从McASPr的AHCLK输出,或者外部加晶振同时送给AHCLK和CODEC。

  • 你好,目前是无法通过匹配时钟解决问题的,所以只能考虑使用代码方面解决。“CODEC的DAC的工作时钟与McASP口的发送时钟不同源,会产生累积误差,从而造成固定间隔的噪音。”这个噪音是收发速度不一致而导致的,我现在采用的是外部音频数据输入到MCbsp接收,然后由EDMA发送至mcasp。我是这样考虑的是增大缓存池数量以及大小都可解决问题。现有两点状态:1、增大缓存池大小,影响的是噪音的持续时间。2、增大缓存区个数目前是只能增大到48个,再大就会有噪音。

    还有一点比较头疼就是在缓存区个数不产生噪音的情况下,增大和减小缓存区大小并不会产生噪声。

    EDMA出发次数引起的么?在我的认知里,这个是不可能的事情。所以这个问题还是无法定位,或者是我哪里还有认识不到的地方。望指正。

  • #1. 请首先确认音频的Codec,即DAC的时钟是不是与McASP输出端口的时钟来源于同一个源?

    #2. 如果是,那么这个问题不是软件能解决的,这是硬件问题。因为音频是连续不断的,McASP按一个时钟在不断输出,DAC用另一个时钟在不断输换,之间不同源,产生向位差,累积起来产生错位,则产生短暂噪声。你也可以判断一下噪声的特点,是不是有规律的隔一会儿出现一下?

    #3. 如果不是,再考虑软件方面的可能性。

  • 你好,MCasp外挂的DA与MCasp是同源的,mcbsp接收到的音频与mcasp时钟是不同源。

     

  • 细节说明:由于接受到的音频数据与MCASP发送端的时钟不同源,所以需要数据缓存机制来解决速度差异。这也是增加缓存区的大小和个数的意义。

    由于实际是在edma发送的,所以,每次发送的数据为一个缓存池。而由于速度的差异发送和接收数据总有相遇的一刻。这也就是缓存区的空满状态。缓存池的大小又决定了噪音的长短。需正确的添加空满判断标志。

    为了尽可能的在一次空满的状态之前,延长使用时间而又不延长噪音的情况下。所以需要扩大缓存区个数。

    在缓存区个数添加的时候就出现了上边提到的问题。

    现在就卡到这里不知下步该怎么走。望指点啊

    万分感谢