AnsweredAssumed Answered

HAL_SAI_Transmit_DMA buffer size?

Question asked by Jeremy Vance on Nov 7, 2017
Latest reply on Nov 7, 2017 by waclawek.jan

So, I have 5 TDM data slots being used in my SAI1 master TX using circular DMA.  I have a buffer that is 10240 bytes in size (5*1024*2).  So, to start the TDM signal, I call: 

HAL_SAI_Transmit_DMA(&hsai_BlockA1, &DMABuffer[0], DMA_BUFFER_SIZE);

Where:

#define DMA_BUFFER_SIZE (NUMBER_OF_CHANNELS * CHANNEL_BUFFER_SIZE * 2)

static uint8_t DMABuffer[DMA_BUFFER_SIZE];

memset(&DMABuffer[0], 0, DMA_BUFFER_SIZE); //clear out DMA Buffer

 

In my head I would assume that the circular DMA would loop through the DMABuffer data while triggering half and complete interrupts (which do trigger).  However, when I capture the data going out the data line, I see the attached plot.  I should see all zero's but there is enormous amounts with a little downtime (about 20%).  If I change the above line to 

HAL_SAI_Transmit_DMA(&hsai_BlockA1, &DMABuffer[0], DMA_BUFFER_SIZE / 5);

I do see the expected all zeros.

 

So, what am I missing?  Is the size parameter in HAL_SAI_Transmit_DMA supposed to be the buffer size or the buffer size divided by the number of active data slots?

 

Thanks,

Jeremy

Outcomes