@@ -103,6 +103,7 @@ void audioout_reset(void) {
103103void audioout_background (void ) {
104104 if (MP_STATE_VM (audioout_block_counter ) != NULL &&
105105 active_audioout != NULL &&
106+ active_audioout -> second_buffer != NULL &&
106107 active_audioout -> last_loaded_block < tc_get_count_value (MP_STATE_VM (audioout_block_counter ))) {
107108 uint8_t * buffer ;
108109 if (tc_get_count_value (MP_STATE_VM (audioout_block_counter )) % 2 == 1 ) {
@@ -132,6 +133,7 @@ void audioout_background(void) {
132133 descriptor = active_audioout -> second_descriptor ;
133134 }
134135 descriptor -> BTCNT .reg = length_read / active_audioout -> bytes_per_sample ;
136+ descriptor -> SRCADDR .reg = ((uint32_t ) buffer ) + length_read ;
135137 descriptor -> DESCADDR .reg = 0 ;
136138 }
137139 }
@@ -348,7 +350,8 @@ static void shared_construct(audioio_audioout_obj_t* self, const mcu_pin_obj_t*
348350void common_hal_audioio_audioout_construct_from_buffer (audioio_audioout_obj_t * self ,
349351 const mcu_pin_obj_t * pin ,
350352 uint16_t * buffer ,
351- uint32_t len ) {
353+ uint32_t len ,
354+ uint8_t bytes_per_sample ) {
352355 self -> pin = pin ;
353356 if (pin != & pin_PA02 ) {
354357 mp_raise_ValueError ("Invalid pin" );
@@ -360,8 +363,8 @@ void common_hal_audioio_audioout_construct_from_buffer(audioio_audioout_obj_t* s
360363
361364 self -> buffer = (uint8_t * ) buffer ;
362365 self -> second_buffer = NULL ;
363- // Input len is a count. Internal len is in bytes.
364- self -> len = 2 * len ;
366+ self -> bytes_per_sample = bytes_per_sample ;
367+ self -> len = len ;
365368 self -> frequency = 8000 ;
366369}
367370
0 commit comments