Hi,
ich bin gerade an einem Projekt mit dem STM32L4 und SAI zu gange.
An einer Stelle komme ich nicht weiter - Wenn ich SAI mit DMA nutzen möchte ist der Puffer im leer "000".
Die Project HW ist ein custom board mit einem WM8904 Codec der via I2S (SAI) angesprochen wird. Der STM32 ist hier der Clock Master.
Die WM8904 Config und auch die SAI Config scheinen in soweit in Ordnung zu sein das ich mit dieser Schleife Daten lesen und schreiben kann. In dem Fall sogar hören ;).
define BLOCK_SAMPLES 64
static uint8_t txbuf[BLOCK_SAMPLES4]; static uint8_t rxbuf[BLOCK_SAMPLES4];
while(1) { stat = HAL_SAI_Receive(&hsai_BlockB1, (uint8_t*) txbuf, sizeof(txbuf) / 2,10); stat = HAL_SAI_Transmit(&hsai_BlockA1, (uint8_t*) txbuf, sizeof(txbuf) / 2,10); }
Soweit so schön.
Wenn ich dann aber auf DMA umbaue: if (HAL_OK != HAL_SAI_Receive_DMA(&hsai_BlockB1, (uint8_t*) rxbuf, sizeof(rxbuf) / 2)) { DebugLog("HAL_SAI_Receive_DMA fail 1\r\n"); Error_Handler(); } if (HAL_OK != HAL_SAI_Transmit_DMA(&hsai_BlockA1, (uint8_t*) txbuf, sizeof(txbuf) / 2)) { DebugLog("HAL_SAI_Transmit_DMA fail 1\r\n"); Error_Handler(); }
Und wenn ich einen Breakpoint in: void HAL_SAI_RxCpltCallback (SAI_HandleTypeDef * hi2s) { UpdatePointer2 = 50; } void HAL_SAI_RxHalfCpltCallback (SAI_HandleTypeDef * hi2s) { UpdatePointer2 = 0; } setze ... wird dieser zwar ausgelöst
Jedoch sind rxbuf und txbuf leer.
Habt ihr eine Idee ? Welche Details werden noch benötigt ?
Grüße, M