@@ -118,6 +118,7 @@ static size_t audio_dma_convert_samples(audio_dma_t *dma, uint8_t *input, uint32
118
118
119
119
// buffer_idx is 0 or 1.
120
120
static void audio_dma_load_next_block (audio_dma_t * dma , size_t buffer_idx ) {
121
+ assert (dma -> channel [buffer_idx ] < NUM_DMA_CHANNELS );
121
122
size_t dma_channel = dma -> channel [buffer_idx ];
122
123
123
124
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) {
128
129
129
130
if (get_buffer_result == GET_BUFFER_ERROR ) {
130
131
audio_dma_stop (dma );
132
+ dma -> dma_result = AUDIO_DMA_SOURCE_ERROR ;
131
133
return ;
132
134
}
133
135
@@ -157,10 +159,11 @@ static void audio_dma_load_next_block(audio_dma_t *dma, size_t buffer_idx) {
157
159
!dma_channel_is_busy (dma -> channel [1 ])) {
158
160
// No data has been read, and both DMA channels have now finished, so it's safe to stop.
159
161
audio_dma_stop (dma );
160
- dma -> playing_in_progress = false ;
162
+ assert ( dma -> channel [ buffer_idx ] < NUM_DMA_CHANNELS ) ;
161
163
}
162
164
}
163
165
}
166
+ dma -> dma_result = AUDIO_DMA_OK ;
164
167
}
165
168
166
169
// Playback should be shutdown before calling this.
@@ -279,8 +282,14 @@ audio_dma_result audio_dma_setup_playback(
279
282
280
283
// Load the first two blocks up front.
281
284
audio_dma_load_next_block (dma , 0 );
285
+ if (dma -> dma_result != AUDIO_DMA_OK ) {
286
+ return dma -> dma_result ;
287
+ }
282
288
if (!single_buffer ) {
283
289
audio_dma_load_next_block (dma , 1 );
290
+ if (dma -> dma_result != AUDIO_DMA_OK ) {
291
+ return dma -> dma_result ;
292
+ }
284
293
}
285
294
286
295
// 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) {
464
473
void __not_in_flash_func (isr_dma_0 )(void ) {
465
474
for (size_t i = 0 ; i < NUM_DMA_CHANNELS ; i ++ ) {
466
475
uint32_t mask = 1 << i ;
467
- if ((dma_hw -> intr & mask ) == 0 ) {
476
+ if ((dma_hw -> ints0 & mask ) == 0 ) {
468
477
continue ;
469
478
}
470
479
// acknowledge interrupt early. Doing so late means that you could lose an
0 commit comments