aic23b左右声道问题
你好,我想分别控制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);这句话写入之后,最好再读取一下看看读取的数值和写入的一样不一样,,看看有没有真正的写入进去。