@@ -129,7 +129,7 @@ void audio_dma_load_next_block(audio_dma_t *dma) {
129129 uint8_t * buffer ;
130130 uint32_t buffer_length ;
131131 get_buffer_result = audiosample_get_buffer (dma -> sample ,
132- dma -> single_channel , dma -> audio_channel , & buffer , & buffer_length );
132+ dma -> single_channel_output , dma -> audio_channel , & buffer , & buffer_length );
133133
134134 if (get_buffer_result == GET_BUFFER_ERROR ) {
135135 audio_dma_stop (dma );
@@ -148,7 +148,7 @@ void audio_dma_load_next_block(audio_dma_t *dma) {
148148 dma_channel_set_read_addr (dma_channel , output_buffer , false /* trigger */ );
149149 if (get_buffer_result == GET_BUFFER_DONE ) {
150150 if (dma -> loop ) {
151- audiosample_reset_buffer (dma -> sample , dma -> single_channel , dma -> audio_channel );
151+ audiosample_reset_buffer (dma -> sample , dma -> single_channel_output , dma -> audio_channel );
152152 } else {
153153 // Set channel trigger to ourselves so we don't keep going.
154154 dma_channel_hw_t * c = & dma_hw -> ch [dma_channel ];
@@ -161,13 +161,13 @@ void audio_dma_load_next_block(audio_dma_t *dma) {
161161audio_dma_result audio_dma_setup_playback (audio_dma_t * dma ,
162162 mp_obj_t sample ,
163163 bool loop ,
164- bool single_channel ,
164+ bool single_channel_output ,
165165 uint8_t audio_channel ,
166166 bool output_signed ,
167167 uint8_t output_resolution ,
168168 uint32_t output_register_address ,
169169 uint8_t dma_trigger_source ) {
170- // Use two DMA channels to because the DMA can't wrap to itself without the
170+ // Use two DMA channels to play because the DMA can't wrap to itself without the
171171 // buffer being power of two aligned.
172172 dma -> channel [0 ] = dma_claim_unused_channel (false);
173173 dma -> channel [1 ] = dma_claim_unused_channel (false);
@@ -180,7 +180,7 @@ audio_dma_result audio_dma_setup_playback(audio_dma_t *dma,
180180
181181 dma -> sample = sample ;
182182 dma -> loop = loop ;
183- dma -> single_channel = single_channel ;
183+ dma -> single_channel_output = single_channel_output ;
184184 dma -> audio_channel = audio_channel ;
185185 dma -> signed_to_unsigned = false;
186186 dma -> unsigned_to_signed = false;
@@ -189,12 +189,12 @@ audio_dma_result audio_dma_setup_playback(audio_dma_t *dma,
189189 dma -> first_channel_free = true;
190190 dma -> output_resolution = output_resolution ;
191191 dma -> sample_resolution = audiosample_bits_per_sample (sample );
192- audiosample_reset_buffer (sample , single_channel , audio_channel );
192+ audiosample_reset_buffer (sample , single_channel_output , audio_channel );
193193
194194 bool single_buffer ;
195195 bool samples_signed ;
196196 uint32_t max_buffer_length ;
197- audiosample_get_buffer_structure (sample , single_channel , & single_buffer , & samples_signed ,
197+ audiosample_get_buffer_structure (sample , single_channel_output , & single_buffer , & samples_signed ,
198198 & max_buffer_length , & dma -> sample_spacing );
199199
200200 // Check to see if we have to scale the resolution up.
@@ -227,10 +227,9 @@ audio_dma_result audio_dma_setup_playback(audio_dma_t *dma,
227227 dma -> output_size = 1 ;
228228 }
229229 // Transfer both channels at once.
230- if (!single_channel && audiosample_channel_count (sample ) == 2 ) {
230+ if (!single_channel_output && audiosample_channel_count (sample ) == 2 ) {
231231 dma -> output_size *= 2 ;
232232 }
233-
234233 enum dma_channel_transfer_size dma_size = DMA_SIZE_8 ;
235234 if (dma -> output_size == 2 ) {
236235 dma_size = DMA_SIZE_16 ;
@@ -324,20 +323,19 @@ void audio_dma_stop(audio_dma_t *dma) {
324323// to hold the previous value.
325324void audio_dma_pause (audio_dma_t * dma ) {
326325 dma_hw -> ch [dma -> channel [0 ]].al1_ctrl &= ~DMA_CH0_CTRL_TRIG_EN_BITS ;
327- dma_hw -> ch [dma -> channel [1 ]].al1_ctrl &= ~DMA_CH0_CTRL_TRIG_EN_BITS ;
326+ dma_hw -> ch [dma -> channel [1 ]].al1_ctrl &= ~DMA_CH1_CTRL_TRIG_EN_BITS ;
328327}
329328
330329void audio_dma_resume (audio_dma_t * dma ) {
331330 // Always re-enable the non-busy channel first so it's ready to continue when the busy channel
332331 // finishes and chains to it. (An interrupt could make the time between enables long.)
333- size_t first = 0 ;
334- size_t second = 1 ;
335332 if (dma_channel_is_busy (dma -> channel [0 ])) {
336- first = 1 ;
337- second = 0 ;
333+ dma_hw -> ch [dma -> channel [1 ]].al1_ctrl |= DMA_CH1_CTRL_TRIG_EN_BITS ;
334+ dma_hw -> ch [dma -> channel [0 ]].al1_ctrl |= DMA_CH0_CTRL_TRIG_EN_BITS ;
335+ } else {
336+ dma_hw -> ch [dma -> channel [0 ]].al1_ctrl |= DMA_CH0_CTRL_TRIG_EN_BITS ;
337+ dma_hw -> ch [dma -> channel [1 ]].al1_ctrl |= DMA_CH1_CTRL_TRIG_EN_BITS ;
338338 }
339- dma_hw -> ch [dma -> channel [first ]].al1_ctrl |= DMA_CH0_CTRL_TRIG_EN_BITS ;
340- dma_hw -> ch [dma -> channel [second ]].al1_ctrl |= DMA_CH0_CTRL_TRIG_EN_BITS ;
341339}
342340
343341bool audio_dma_get_paused (audio_dma_t * dma ) {
@@ -378,6 +376,8 @@ bool audio_dma_get_playing(audio_dma_t *dma) {
378376
379377// WARN(tannewt): DO NOT print from here, or anything it calls. Printing calls
380378// background tasks such as this and causes a stack overflow.
379+ // NOTE(dhalbert): I successfully printed from here while debugging.
380+ // So it's possible, but be careful.
381381STATIC void dma_callback_fun (void * arg ) {
382382 audio_dma_t * dma = arg ;
383383 if (dma == NULL ) {
0 commit comments