ti的工程师:
我们公司一个音频的项目,基本架构是c6748加AIC3106。后来换了一个codec,这个新的codec是cs4272,这是一个24bit的codec,前一段时间问了芯片原厂,原厂建议暂时用16bit进行数据传输。我配置codec'后基本的数据结构如下图。16bit ,i2s格式,左对齐,没有延时位。
帧时钟上升沿触发,位时钟也是上升沿触发,没有延时位,只进行单通道放音时我用逻辑分析仪抓了图。可以看出抓的数据和手册描述一致,且只有一个声道有数据。
DSP的配置,DSP做主。接收帧R是上升沿触发,位时钟上升沿触发。发送帧X是下降沿触发,位时钟下降沿触发。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<strong> //接收端 </strong>
// 初始化帧同步,TDM 格式使用 slot 个数,对齐帧同步信号的上升沿 0428 修改为mcasp内部驱动
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_RX_FS_WIDTH_WORD, MCASP_RX_FS_INT_BEGIN_ON_RIS_EDGE); // 初始化接收时钟,使用内部时钟,时钟上升沿有效 0528 48kHz
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 7, 1); McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32, 0x00, 0xFF); ...... ...... <strong> //发送端</strong>
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_TX_FS_WIDTH_WORD, MCASP_TX_FS_INT_BEGIN_ON_FALL_EDGE); // 初始化发送时钟,使用内部时钟,时钟下降沿有效 0528
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 7, 1); McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32, 0x00, 0xFF); |
但是经过DMA接收的数据明显不对,应该是0xXXXX 0x0000这样才对,用扬声器播放出来的都是杂音。我第一感觉是哪里没有对齐导致数据全部错了。
我换成原来的AIC3106做了对比,这里接收的数据是0xXXXX 0x0000格式,播放和录音也正常了。
现在两个codec的配置不同的地方如下:之前是3106做主,DSP做从。现在的配置DSP做主帧时钟、位时钟、都是DSP发到codec的,其他的格式我按照手册都对了,asp的接收发送的边沿触发也换了好几次都不对,请问一下还有哪里需要注意的。
Mickey Zhang:
请问您现在用的音频 codec是哪个型号?cs4272非TI产品,如您是有关于cs4272的问题,建议您咨询该芯片厂家。
如您是对DSP有疑问,请在“信号处理器DSP ARM微处理器”版块发帖,我们相应的工程师会回复您。
taoyu:
回复 Mickey Zhang:
cs4272不是ti的产品,这个芯片我们去人已经工作了,我主要是问下6748的asp做主的时候一些配置问题。相同的帖子我在单核DSP也发了,但是没有人回复我就把帖子转到音频这个版块又发了一遍。