I2S ist eigentlich synchron und besteht im Grunde aus Bit-Clock, Input,
Output und L/R-Clock. Letzteres gilt als Kennzeichen, wann ein
übertragenes Wort beginnt. Und übertragen wird (nicht immer, aber
zumeist) ein Block aus 32 Bit für links und 32 Bit für rechts. Macht 64
Bit aus, gelle.
Guck dir den/die I2S-Core(s) im Referenzmanual an und versuche zunächst
zu verstehen, wie dort die Peripherie funktioniert. Bei den STM32 ist
die Peripherie an vielen Stellen noch immer 16 bittig und das, was man
gelegentlich als I2S angepriesen kriegt, ist dann nur ein etwas
erweitertes SPI, was dann aber ebne auch 16 bittig bedient sein will.
Da sowas per Interrupt (mit der 4fachen Frequenz wie die Samplerate,
4*16-->64 Bit) ausgesprochen unangenehm ist und solche popligen
I2S-Cores keine Fifos haben, kommt da eben DMA ins Spiel, was die ganze
Sache weiter verkompliziert.
Schau im RefMan auch mal nach einem SAI-Core, das steht für serielles
audio interface und ist sozusagen die bessere Variante von I2S. Wenn
vorhanden, nimm dieses SAI als I2S-Anschluß. Zumeist haben diese SAI
auch Fifo's.
Ich würde an deiner Stelle einen Chip mit SAI nehmen, dieses SAI dann
zunächst mit Interrupts bedienen, bis das Ding, was du damit bauen
willst wenigstens prinzipiell funktioniert und dann zusehen, wie die
Interruptfunktion direkt am SAI per DMA ersetzt und entschärft werden
kann.
Wenn du alles zugleich machen willst, dann hast du nix, worauf du dich
zunächst verlassen kannst - und Herumdebuggen bei einem Interface, was
mit 48 oder 96 oder 192 kSamples/s durchläuft und eigentlich nicht
anhaltbar ist, macht gewiß keine Freude.
W.S.