Forum: Mikrocontroller und Digitale Elektronik STM32L4 - DMA Puffer Leer


von MSR (m_s_r)


Lesenswert?

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_SAMPLES*4];
static  uint8_t  rxbuf[BLOCK_SAMPLES*4];

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

von MSR (m_s_r)


Lesenswert?

... ah es handelt sich um einen Circular DMA - Half Word.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.