49
49
void common_hal_audiobusio_i2sout_construct (audiobusio_i2sout_obj_t * self ,
50
50
const mcu_pin_obj_t * bit_clock , const mcu_pin_obj_t * word_select ,
51
51
const mcu_pin_obj_t * data , const mcu_pin_obj_t * main_clock , bool left_justified ) {
52
- if (main_clock != NULL ) {
53
- mp_raise_NotImplementedError_varg (MP_ERROR_TEXT ("%q" ), MP_QSTR_main_clock );
54
- }
55
52
port_i2s_allocate_init (& self -> i2s , left_justified );
56
53
57
54
i2s_std_config_t i2s_config = {
58
55
.clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG (48000 ),
59
56
.slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG (I2S_DATA_BIT_WIDTH_16BIT , I2S_SLOT_MODE_STEREO ),
60
57
.gpio_cfg = {
61
- .mclk = I2S_GPIO_UNUSED ,
58
+ .mclk = main_clock != NULL ? main_clock -> number : I2S_GPIO_UNUSED ,
62
59
.bclk = bit_clock -> number ,
63
60
.ws = word_select -> number ,
64
61
.dout = data -> number ,
@@ -68,6 +65,7 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t *self,
68
65
CHECK_ESP_RESULT (i2s_channel_init_std_mode (self -> i2s .handle , & i2s_config ));
69
66
self -> bit_clock = bit_clock ;
70
67
self -> word_select = word_select ;
68
+ self -> mclk = main_clock ;
71
69
self -> data = data ;
72
70
claim_pin (bit_clock );
73
71
claim_pin (word_select );
@@ -97,6 +95,11 @@ void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t *self) {
97
95
}
98
96
self -> word_select = NULL ;
99
97
98
+ if (self -> mclk ) {
99
+ reset_pin_number (self -> mclk -> number );
100
+ }
101
+ self -> mclk = NULL ;
102
+
100
103
if (self -> data ) {
101
104
reset_pin_number (self -> data -> number );
102
105
}
0 commit comments