Есть STM32F407, есть WM8731 со своим кварцем (то есть мастерклок приходит не от процессора). Хочу наладить обмен по I2S в режиме 8000 Гц 16 бит, но получается какая-то ерунда.
Если сделать процессор мастером, то звук ходит в обе стороны, но периодически появляются артефакты, так как у каждого своя синхра. Если сделать кодек мастером, то работать вообще перестает, точнее прерывания от DMA начинают приходить в 12 раз чаще. Данный кодек, генерит BCLK равный 64x(base frequency, в данном случае 64x48000), то есть 3.072 МГц при любой частоте выдачи семплов. То есть, при переключении частоты семплирования, у него меняется только частота на L/RCK линии, и STM такое не переваривает, так как ждет 8000 * 16 * 2 = 256000 Гц;
Получается L/RCK у меня переключается как надо, с частотой 8000 Гц, а BCLK - 3.072 МГц (замерил осциллом).
Собственно у меня вопрос, для slave I2S'а в STM'е, приходящий битклок должен быть строго Fs x nof_bits x nof_channels или нет?
|