前一段时间将TMS320VC5509A这个DSP通过I2S接口接到NUC972上模拟成一个音频codec成功后,就将TMS320VC5509A的MCBSP1接口接了一个TLV320AIC23B这个音频codec做数据采集和播放,再通过MCBSP2接口和NUC972进行音频数据的交互,具体的录音流程是:
TLV320AIC23B ------5509A_MCBSP1-----5509A_MCBSP2-------NUC972
放音流程正好相反:
NUC972-------5509A_MCBSP2-------5509A_MCBSP1--------TLV320AIC23
在这个过程中,DSP5509A的MCBSP1和MCBSP2都作为从设备,分别从TLV320AIC23B和NUC972接收时钟信号,将两个音频的采样率都设置为8Khz,刚开始没有特别注意,音频很正常,但是经过长时间的测试发现一个很奇怪的现象,同样的采样率,NUC972发送给DSP5509A的数据会慢慢的比DSP5509A发送给TLV320AIC23B的数据多,而且会越来越多,而且具有周期性,这个问题难为了我好长时间,怀疑硬件设计的问题,等等等等,都没有解决问题,突然有一天,在TLV320AIC23B的技术手册上看到了下面一句话,顿悟了!第一感觉就是TI太坑爹了!如下图所示:
是不是很坑爹?当使用12M晶振时,不能产生精确的8k、44.1k、88.2k的采样率!!!这也太让人郁闷了,而且字写得那么小!我正好使用的是12M晶振,正好设置的是8k的采样率,所以怎么坑爹的事情就被我遇到了。根据测试结果,我猜测设置成8k的采样率,而实际的采样率要比8k低,根据这个猜测,将采样率设置成8.021k,运行后发现,DSP5509A发送给TLV320AIC23的数据会慢慢的比NUC972发送给DSP5509A的数据要多,这样就解释了上面的问题。TLV320AIC23B对使用主时钟与采样率设置有详细的说明,首先是USB模式,也就是主频率是12M的模式,如下图所示:
其次是正常模式:
由图上可以看出来,如果想产生精确的8k的采样率,只能使用正常模式,不能使用USB模式,而且主时钟频率只能是12.288M和18.432M,使用TLV320AIC23B,而且使用它的时钟(如果不使用它的时钟,可以忽略)的小伙伴,一定要注意了,最后,还是忍不住再说一句:实在是太坑爹了!!!