@@ -118,6 +118,7 @@ static size_t audio_dma_convert_samples(audio_dma_t *dma, uint8_t *input, uint32
118118
119119// buffer_idx is 0 or 1.
120120static void audio_dma_load_next_block (audio_dma_t * dma , size_t buffer_idx ) {
121+ assert (dma -> channel [buffer_idx ] < NUM_DMA_CHANNELS );
121122 size_t dma_channel = dma -> channel [buffer_idx ];
122123
123124 audioio_get_buffer_result_t get_buffer_result ;
@@ -128,6 +129,7 @@ static void audio_dma_load_next_block(audio_dma_t *dma, size_t buffer_idx) {
128129
129130 if (get_buffer_result == GET_BUFFER_ERROR ) {
130131 audio_dma_stop (dma );
132+ dma -> dma_result = AUDIO_DMA_SOURCE_ERROR ;
131133 return ;
132134 }
133135
@@ -157,10 +159,11 @@ static void audio_dma_load_next_block(audio_dma_t *dma, size_t buffer_idx) {
157159 !dma_channel_is_busy (dma -> channel [1 ])) {
158160 // No data has been read, and both DMA channels have now finished, so it's safe to stop.
159161 audio_dma_stop (dma );
160- dma -> playing_in_progress = false ;
162+ assert ( dma -> channel [ buffer_idx ] < NUM_DMA_CHANNELS ) ;
161163 }
162164 }
163165 }
166+ dma -> dma_result = AUDIO_DMA_OK ;
164167}
165168
166169// Playback should be shutdown before calling this.
@@ -279,8 +282,14 @@ audio_dma_result audio_dma_setup_playback(
279282
280283 // Load the first two blocks up front.
281284 audio_dma_load_next_block (dma , 0 );
285+ if (dma -> dma_result != AUDIO_DMA_OK ) {
286+ return dma -> dma_result ;
287+ }
282288 if (!single_buffer ) {
283289 audio_dma_load_next_block (dma , 1 );
290+ if (dma -> dma_result != AUDIO_DMA_OK ) {
291+ return dma -> dma_result ;
292+ }
284293 }
285294
286295 // Special case the DMA for a single buffer. It's commonly used for a single wave length of sound
@@ -464,7 +473,7 @@ static void dma_callback_fun(void *arg) {
464473void __not_in_flash_func (isr_dma_0 )(void ) {
465474 for (size_t i = 0 ; i < NUM_DMA_CHANNELS ; i ++ ) {
466475 uint32_t mask = 1 << i ;
467- if ((dma_hw -> intr & mask ) == 0 ) {
476+ if ((dma_hw -> ints0 & mask ) == 0 ) {
468477 continue ;
469478 }
470479 // acknowledge interrupt early. Doing so late means that you could lose an
0 commit comments