@@ -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,10 @@ 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;
161162 }
162163 }
163164 }
165+ dma -> dma_result = AUDIO_DMA_OK ;
164166}
165167
166168// Playback should be shutdown before calling this.
@@ -279,8 +281,14 @@ audio_dma_result audio_dma_setup_playback(
279281
280282 // Load the first two blocks up front.
281283 audio_dma_load_next_block (dma , 0 );
284+ if (dma -> dma_result != AUDIO_DMA_OK ) {
285+ return dma -> dma_result ;
286+ }
282287 if (!single_buffer ) {
283288 audio_dma_load_next_block (dma , 1 );
289+ if (dma -> dma_result != AUDIO_DMA_OK ) {
290+ return dma -> dma_result ;
291+ }
284292 }
285293
286294 // Special case the DMA for a single buffer. It's commonly used for a single wave length of sound
@@ -464,7 +472,7 @@ static void dma_callback_fun(void *arg) {
464472void __not_in_flash_func (isr_dma_0 )(void ) {
465473 for (size_t i = 0 ; i < NUM_DMA_CHANNELS ; i ++ ) {
466474 uint32_t mask = 1 << i ;
467- if ((dma_hw -> intr & mask ) == 0 ) {
475+ if ((dma_hw -> ints0 & mask ) == 0 ) {
468476 continue ;
469477 }
470478 // acknowledge interrupt early. Doing so late means that you could lose an
0 commit comments