Gast
#5911610
Hallo! Ich beschäftige mich gerade etwas mit I2S und dem DMA. Dabei bin ich auf ein paar Verständnisprobleme gestoßen. Im Setup ist ein STM32F4 mit einem Audio Codec verbunden. Der Audio Codec schickt dabei die Daten über die I2S Leitung an den STM32. Dieser verarbeitet die Daten und sendet sie zurück n den Audio Codec. Dabei verstehe ich aber nicht, wie die eingehenden Daten gespeichert werden. HAL_I2SEx_TransmitReceive_DMA(&handler_i2s, buf_out, buf_in, sizeof(buf_out)/2); Ich finde die Beschreibung der Funktion etwas dürftig: pTxData a 16-bit pointer to the Transmit data buffer. pRxData a 16-bit pointer to the Receive data buffer. Füllt der DMA nun selbstständig den buf_in mit Daten? Dabei gibt es noch die beiden Interrupt-Routinen HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) In diesen Funktionen wird das verarbeiten der Daten angestoßen. Korrekterweiße steht in der Beschreibung auch: "Tx Transfer completed callbacks." Sollte es aber nicht eigentlich so sein, dass der Codec die Daten per I2S an den STM sendet und dieser die Daten direkt in den buf_in schreibt. Nun werden beim befüllen zwei Interrupts ausgelöst: HAL_I2S_RxHalfCpltCallback und HAL_I2S_RxCpltCallback (Rx statt Tx) In diesen Funktionen werden die buf_in Daten verarbeitet, in den buf_out geschrieben und der DMA gibt es an dieser Stelle per I2S wieder an den Codec. Irgendwie wird wir die Vorgehensweise nicht ganz klar und leider ist die Dokumentation echt nicht soo toll bzw. ich kann damit eher weniger anfangen. Grüße Fabian!