微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > aic23b左右声道问题

aic23b左右声道问题

时间:10-02 整理:3721RD 点击:

你好,我想分别控制aic23b的左右声道,我就用了下面三条语句,

aic23data = MCBSP_read32(hMcbsp);

temp=aic23data&0x0000ffff;

MCBSP_write32(hMcbsp,temp);

这时候左右声道都有声音。我再换成下面三条语句,

aic23data = MCBSP_read32(hMcbsp);

temp=aic23data&0xffff0000;

MCBSP_write32(hMcbsp,temp);

这时候左右声道都没声音了。

左声道和右声道的数据不是分别存在高16位和低16位吗,是不是我理解出了问题?

怎么样才能单独控制左右声道呢?期待有人能够解答我的疑惑。

 

你好:

如果数据位是16bit,那么应该是整个16bit都是左声道数据,然后下一个16bit数据是右声道数据,依次交替。

单独控制左右声道,寄存器0000000~0000011都有音量或者mute的控制,可以通过MCU写寄存器设置达到相应的目的。

你好,我现在的理解是往DXR1里面写的数据就是左声道的数据,往DXR2里面写的数据就是右声道的数据。

请问我的理解有问题吗?

如果我的理解不对,那么除了通过控制音量的方法,我怎样才能只写右声道数据(或者左声道),从而只有一个耳机能听到声音呢?

你好:

你说所说的DXR1和DXR2是指什么?没有看见相关的内容。

控制音量或者分别mute各个通道就能实现分别控制左右通道,只有一个耳机能听到声音。

 

你好,如上图所示,DXR1和DXR2是发送数据的两个寄存器,都是16位的。我的理解是往DXR1里写的数据就

对应左声道的数据,往DXR2里面写的数据就是右声道的数据。请问我的理解有问题吗?

 

你好:

请发到DSP板块进一步确认,这个不是我们datasheet里的内容,所以你需要进一步确认或者通过实验确认。

 

好的,谢谢。

你的前三条语句中temp=aic23data&0x0000ffff;取的是aic23data的后16位;左右声道都有声音

你的前三条语句中temp=aic23data&0xffff0000;;取的是aic23data的前16位;左右声道都没声音

这就说明了数据不是存在高16位和低16位的。

假设即使是存在高16位和低16位的,那么temp=aic23data&0x0000ffff也只应该一个声道有声音,而非左右声道都有声音啊。

还是仔细 阅读datasheet吧。

 

如果数据位是16bit,那么应该是整个16bit都是左声道数据,然后下一个16bit数据是右声道数据,依次交替。

单独控制左右声道,寄存器0000000~0000011都有音量或者mute的控制,可以通过MCU写寄存器设置达到相应的目的。

至于使用AIC23b

aic23b传输过程先传输左声道数据在传输右声道数据,并且设置为先传MSB

2、传输速率都有AIC23B决定,并且要特别注意 AIC23B的时钟模式 我使用的是 normal 模式

3、DMA设置为自动初始化方式,每次加载一样的设置到工作寄存器,要特别注意当传输产生中断时要特别注意要清空DMA的中断的状态寄存器,否则就只会发生一次中断

4、I2C的csl API函数有问题 ,最好编写自己的设置函数 具体参考一下:

有关I2C:http://www.61ic.com/Article/C5000/C55X/201107/36005.html

有关McBsp:

MCBSP_Config Mcbsp1Config = {

 //设置串口控制寄存器1()

 MCBSP_SPCR1_RMK

 //设置串口控制寄存器2()

 MCBSP_SPCR2_RMK

 //设置接收帧格式(接收帧段1每帧1个字,段1每个字长32bit)  

 //单数据段,接收字长度为32位,每段1个字,接收延迟1bit

 MCBSP_RCR1_RMK

 MCBSP_RCR2_RMK

 //设置发送帧格式(发送帧段1每帧1个字,段1每个字长32bit)  

 //单数据段,发生字长度为32位,每段1个字,发送延迟1bit

 MCBSP_XCR1_RMK

 MCBSP_XCR2_RMK

……………………………………

 //设置引脚控制寄存器(设置不产生帧同步信号,并且外部通过CLKX引脚提供发送时钟

 //帧同步信号高有效,CLKX下降沿发送信号,CLKRP作为输出时钟信号)

 MCBSP_PCR_RMK

…………………………………………

单独控制左右声道,寄存器0000000~0000011都有音量或者mute的控制,可以通过MCU写寄存器设置达到相应的目的。

至于使用AIC23b

MCBSP_write32(hMcbsp,temp);这句话写入之后,最好再读取一下看看读取的数值和写入的一样不一样,,看看有没有真正的写入进去。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top