Hi all:
这是我们公司一个音频的项目,用的omap-138+一块音频codec
1. mcasp是标准I2s协议,2个声道。DSP做主时钟,数据,同步三个信号内部生成给codec;
2. codec的有效数据是左对齐,时长16个bit,没有延时位;codec的时序如下
上电调试的时候用逻辑分析仪抓取,coedc工作,左对齐,0bit delay,上升沿触发。
我DSP的配置是DSP做主。发送帧X是下降沿触发,位时钟下降沿触发。
但是接收的数据描点后非常奇怪,都是这样的数据不论怎么调音量都不变。
我们公司这个项目之前用的是ti的aic3106做codec,也是mcasp模块进行接收发送,用到了DMA,音乐播放采集都很正常。唯一不同就是之前是codec做主,DSP做从。
请问一下ti的工程师我的配置那里有问题。
这个问题我已经在6748单核和音频两个模块都发帖了,但是一直没有人回复请ti的工程师支持一下。我觉得可能就是那个点没有考虑到。
Shine:
请问换了什么codec,是否和AIC3106一样?如果新的code主,dsp做从也有类似的问题吗?
taoyu:
回复 Shine:
换了logic circus的cs4272,新的codec做不了主,只能外部输入主时钟和位时钟、帧时钟。
taoyu:
回复 Shine:
刚才想了一下,如果我现在用DSP做主,3106做从这样和新的codec对比看看DMA接收的数据。如果3106做从的话是不是只需要把主时钟MCLK接入修改为输入并从硬件引入,bclk和wclk也修改为输入,另外采样频率是否可以不用设置了。我查了一下3106的slave mode,好像只要把bclk和wclk的方向改成input就可以了。
taoyu:
回复 Shine:
我换了DSP做主,3106做从。播放和录音都是正常的,不过3106有1bit的延时,我在写新codec驱动的时候是注意到这一点的。
Shine:
回复 taoyu:
dsp这边也设成0bit 延时了吗?
taoyu:
回复 Shine:
void McASPRxFmtI2SSet(unsigned int baseAddr, unsigned int wordSize, unsigned int slotSize, unsigned int rxMode){ /* Set the mask assuming integer format */ McASPRxFmtMaskSet(baseAddr, (1 << wordSize) – 1);
/* Set the receive format unit for I2S */ McASPRxFmtSet(baseAddr, (MCASP_RX_PAD_WITH_0 | MCASP_RX_BITSTREAM_MSB_FIRST | MCASP_RX_SYNC_DELAY_0BIT | (wordSize >> 2) | ((slotSize/2 -1) << MCASP_RFMT_RSSZ_SHIFT) | rxMode));}
这个我一上来就改了,之前邮件也说了。我看手册的时候特别注意了左右对齐和延时的问题。
user4755476:
想问问楼主,你们是怎么接受双声道的数据的?AFSX/R的的有效沿只能设置一种吧,还是你是把左右声道一起接受,后面再自己分离?
taoyu:
回复 user4755476:
mcasp接收的数据就是一左一右的,DSP处理一下就把两个声道分开了。如果DSP作为主设备的话,AFSX/R这个应该是相反吧,接收和发送设置的边沿触发应该是反的,手册里面我记得说过。
user4755476:
回复 taoyu:
没有,是时钟的有效沿是反的,帧同步的是没反的,所以你每一帧是接收32bit是吗?然后DSP再把数据高低位分开?
taoyu:
回复 user4755476:
对,我是高16bit,低16bit分开解析的。