@@ -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,10 @@ 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;
161
162
}
162
163
}
163
164
}
165
+ dma -> dma_result = AUDIO_DMA_OK ;
164
166
}
165
167
166
168
// Playback should be shutdown before calling this.
@@ -279,8 +281,14 @@ audio_dma_result audio_dma_setup_playback(
279
281
280
282
// Load the first two blocks up front.
281
283
audio_dma_load_next_block (dma , 0 );
284
+ if (dma -> dma_result != AUDIO_DMA_OK ) {
285
+ return dma -> dma_result ;
286
+ }
282
287
if (!single_buffer ) {
283
288
audio_dma_load_next_block (dma , 1 );
289
+ if (dma -> dma_result != AUDIO_DMA_OK ) {
290
+ return dma -> dma_result ;
291
+ }
284
292
}
285
293
286
294
// 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) {
464
472
void __not_in_flash_func (isr_dma_0 )(void ) {
465
473
for (size_t i = 0 ; i < NUM_DMA_CHANNELS ; i ++ ) {
466
474
uint32_t mask = 1 << i ;
467
- if ((dma_hw -> intr & mask ) == 0 ) {
475
+ if ((dma_hw -> ints0 & mask ) == 0 ) {
468
476
continue ;
469
477
}
470
478
// acknowledge interrupt early. Doing so late means that you could lose an
0 commit comments