在线时间13 小时
UID3633657
注册时间2020-4-12
NXP金币0
TA的每日心情 | 奋斗 2020-5-18 11:57 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
注册会员

- 积分
- 152
- 最后登录
- 2020-10-20
|
最近在调KL46Z开发板,通过I2S(SAI)口读AIC3104的MIC数据。因为M0+系列MCU不能直接Fs=44.1KHz对应的MCLK和BCLK,所以让KL46Z输出24MHz给AIC3104,然后AIC3104产生对应的BCLK和WCLK,AIC3104工作在Master模式,KL46Z在Slave模式。
I2C没有问题,可以写并读取寄存器值,但I2S一直读不到任何数据。手边暂时没有示波器,但是我把BCLK,WCLK和Data的数据线接到LED灯上都可以点亮,Data接LED后声音变化闪烁明显,说明AIC3104端工作应该是正常的。各位高手能帮忙分析下是什么原因么?
I2S部分代码如下:
const sai_config_t codec_config = {
.protocol = kSAI_BusI2S, // Uses I2S format.
.syncMode = kSAI_ModeAsync, // Synchronous mode with receiver
.mclkOutputEnable = true, // Master clock output divider enabled
.mclkSource = kSAI_MclkSourceSysclk, // Master clock from the system clock
.bclkSource = kSAI_BclkSourceBusclk, // Unused, BCLK pin is set to be external clock
.masterSlave = kSAI_Slave // Slave mode
};
/* I2S0 Rx transfer format */
sai_transfer_format_t codec_Rx_format = {
.sampleRate_Hz = CODEC_SAMPLERATE, // Sample Rate 44.1KHz
.bitWidth = kSAI_WordWidth16bits, // Bit Width 16 bits
.stereo = kSAI_MonoLeft, // Only left channel have sound.
.masterClockHz = 24000000UL, // 24 MHz
.channel = 0U, // Single channel
.protocol = kSAI_BusI2S, // I2S Mode
.isFrameSyncCompact = true
};
SAI_RxInit(I2S0, &codec_config);
/* Create the SAI Rx transfer handle */
SAI_TransferRxCreateHandle(I2S0, &codec_Rx_handle, NULL, NULL);
/* Initialize SAI Rx transfer format */
SAI_TransferRxSetFormat(I2S0, &codec_Rx_handle, &codec_Rx_format, 24000000UL, 705600UL);
SAI_RxSetDataOrder(I2S0, kSAI_DataMSB); // MSB bit transferred first
SAI_RxSetBitClockPolarity(I2S0, kSAI_PolarityActiveHigh); // Clock active high
SAI_RxEnable(I2S0, true);
SAI_RxSoftwareReset(I2S0, kSAI_ResetAll);
SAI_ReadBlocking(I2S0, codec_channel, codec_bitwidth, buffer, 1024);
执行后一直停在 SAI_ReadBlocking函数的如下位置
/* Wait until data is received */
while (!(base->RCSR & I2S_RCSR_FWF_MASK))
{
}
|
|