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.

aic3106test程序



最近在做音频的项目,参考evmc6747中aic3106test例程,有个问题没弄明白,例程中这里

for ( sec = 0 ; sec < 5 ; sec++ )
{
for ( msec = 0 ; msec < 1000 ; msec++ )
{
for ( sample = 0 ; sample < 48 ; sample++ )
{
/* Send a sample to the left channel */
while ( ! ( MCASP1_SRCTL5 & 0x10 ) );
MCASP1_XBUF5_32BIT = (sinetable[sample] << 15) | 0x00000000;
/* Send a sample to the right channel */
while ( ! ( MCASP1_SRCTL5 & 0x10 ) );
MCASP1_XBUF5_32BIT = (sinetable[sample] << 15) | 0x00000000;

}
}
}

因为McASP和芯片都设置成I2S方式,那么每采样放出的帧信号不就应该是左右两个slot了吗?这里为什么要写两次呢?

还有就是我觉得例程中给的正弦波数组应该是Q15格式的吧?这里的<<15|0x00000000是干嘛用的呢?结果是Q31数据?请大家多指教!谢谢!

  • I2S左右通道是独立的事件。比如以EDMA事件来说:

    Yu Wang22 说:
    这里的<<15|0x00000000是干嘛用的呢?

    因为配置的是高16位有效,而原始数据就是16bit,所以右移16bit,不然输出就全是0了。

    /* TX */
    mcasp->regs->XMASK = 0xffffffff; // No padding used
    mcasp->regs->XFMT = 0x00008078; // MSB 16bit, 0-delay, no pad, CFGBus

  • 您好,感谢您的回答,我理解您的意思了。还有两个小问题想请教您。

    1.您看,datasheet这里说

    那XFMT的 XDATDLY位不应该是1h吗?这里XFMT=0x00008078是不是有些问题?

    2.想问一下您这里McASP和AIC3106数据传递一直都是Q15格式吗?如果我需要将采得的音频数据进行运算,还需要转换成浮点数吗?如果需要,有没有这样的转换函数可以直接用呢?非常感谢!