大家好,最近调试音频播放程序。主要是将蓝牙接收数据转发到Mcasp。
目前,采用八个缓存池装载数据每个缓存池有18K大小。由于工作时长以及时钟不同步问题,现在将缓存池数目增加到108个。
测试两个缓存池数目差异下的代码发现 :增加到108个缓存池后存在规律性的噪音。八个缓存池测试OK。
怀疑DDR2内存空间存在缓存池的重叠。特修改CMD文件将各个缓存池分配到相应的内存块中。测试发现依旧存在问题。
复查代码N多次,确认代码无问题。目前,无法定位问题出在哪,求各位大侠指点。
万分感谢!!!!!
Tony Tang:
是不是McASP与外面的codec的时钟不同源的原因造成的?
join join:
回复 Tony Tang:
对,是由于时钟不同源造成,这也是我增大缓存区的意义。今天又测试了一遍,发现在缓存区增大到46个以上时,就出现噪音,固定的频率。所有缓存区都在DDR2中。
目前,还是无法定位问题。
Tony Tang:
回复 join join:
Codec与McASP口的时钟不同源的话,增加缓冲不能解决问题,这不是数据搬移来不及而增加缓冲就能解决的问题。
CODEC的DAC的工作时钟与McASP口的发送时钟不同源,会产生累积误差,从而造成固定间隔的噪音。所以CODEC的工作时钟可以从McASPr的AHCLK输出,或者外部加晶振同时送给AHCLK和CODEC。
join join:
回复 Tony Tang:
你好,目前是无法通过匹配时钟解决问题的,所以只能考虑使用代码方面解决。“CODEC的DAC的工作时钟与McASP口的发送时钟不同源,会产生累积误差,从而造成固定间隔的噪音。”这个噪音是收发速度不一致而导致的,我现在采用的是外部音频数据输入到MCbsp接收,然后由EDMA发送至mcasp。我是这样考虑的是增大缓存池数量以及大小都可解决问题。现有两点状态:1、增大缓存池大小,影响的是噪音的持续时间。2、增大缓存区个数目前是只能增大到48个,再大就会有噪音。
还有一点比较头疼就是在缓存区个数不产生噪音的情况下,增大和减小缓存区大小并不会产生噪声。
EDMA出发次数引起的么?在我的认知里,这个是不可能的事情。所以这个问题还是无法定位,或者是我哪里还有认识不到的地方。望指正。
join join:
回复 Tony Tang:
你好,MCasp外挂的DA与MCasp是同源的,mcbsp接收到的音频与mcasp时钟是不同源。