AIC23音频芯片,为什么无法实时调整音量?

我想通过写AIC23的左右耳机输出音量控制寄存器Left channel headphone volume control和 Right channel headphone volume control,实时调整输出音量大小,可是在我在程序某处加入语句 AIC23_Write(AIC23_LT_HP_CTL, 0x7F);  结果发现没有语音输出,而是输出“嘟------”的声音,我跟踪了一下程序,发现程序卡在 I2C_Write函数里的红色部分。

// Transmit data
for (i = 0; i < count ; i++) {
Write(pI2C -> icdxr, bytedata[i]);
while(!(pI2C -> icstr & ICSTR_ICXRDY));
}

请问AIC23运行过程中不能够通过改变此寄存器实时调整音量吗?还是我哪一个环节出问题了?

2 个回复

  • 注意, 你把 RLS, LRS 置0了, 看一下手册吧
  • 回复 Airwill:

    前段时间忙别的工作了,今天按照您说的将LRS和RLS置“1”,发现还是没有解决问题,我感觉貌似AIC23的寄存器不能在循环里连续写,不知道是否是哪里设置的不对。


    可能我没说明白我的情况,是这样的:我现在想做如下实验:


    设定一个计数次数,连续播放音频,然后再调整音量,以新的音量播放音频,不停的循环下去。
    for(; ;)
    {
    AIC23_Write(AIC23_LT_HP_CTL, 0x7F);
    AIC23_Write(AIC23_RT_HP_CTL, 0x7F);

    for(i=0;i<COUNT1;i++)
    {
    音频播放代码;
    }

    AIC23_Write(AIC23_LT_HP_CTL, 0x50); //改变左声道音量大小
    AIC23_Write(AIC23_RT_HP_CTL, 0x50); //改变右声道音量大小

    for(i=0;i<COUNT2;i++)
    {
    音频播放代码;
    }
    ......
    }


    结果就会出现改变音量时,卡在I2C总线控制AIC23的过程中。