可能是因为您的代码中断了I2S通信,从而导致麦克风和AMB解码器组合被中断。解决此问题的方法是使用I2S中断,并在中断处理程序中读取I2S数据。您可以参考以下示例代码:
// I2S单词长度为32位,根据I2S协议,左声道和右声道分别为16位。 // 因此,我们需要将每个字的左16位和右16位分别分开。
void i2s_interrupt_handler(void) { uint32_t word = I2S0.DATA32IN[0]; int16_t left_channel = word >> 16; // 左声道 int16_t right_channel = word & 0xFFFF; // 右声道
// 在此添加您想要执行的代码,比如说将数据发送到麦克风或AMB解码器等等。 }
void setup() { // 初始化I2S传输 AudioMemory(8); I2S0.begin(I2S_16_BIT, 44100); I2S0.onReceive(i2s_interrupt_handler); }
void loop() { // 在此添加您想要执行的代码 // 请注意,这个函数仅在I2S中断处理程序中调用,因此应仅使用本地变量。 }