This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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函数有问题 ,最好编写自己的设置函数 具体参考一下:
    有关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);这句话写入之后,最好再读取一下看看读取的数值和写入的一样不一样,,看看有没有真正的写入进去。