@@ -55,6 +55,7 @@ class I2SDriverSTM32 {
55
55
}
56
56
57
57
setupDefaultI2SParameters ();
58
+ setupPins ();
58
59
result = use_dma ? startI2SDMA () : startI2S ();
59
60
this ->active = result;
60
61
return result;
@@ -323,6 +324,48 @@ class I2SDriverSTM32 {
323
324
i2s_stm32.ref = this ;
324
325
}
325
326
327
+ void setupPins (){
328
+ if (cfg.pin_bck != -1 || cfg.pin_ws != -1 || cfg.pin_data != -1 ) {
329
+ LOGW (" pins ignored: used from stm32-i2s" );
330
+ } else {
331
+ LOGI (" setting up pins for stm32-i2s" );
332
+ i2s_stm32.hardware_config .pins [0 ].function = stm32_i2s::mclk;
333
+ i2s_stm32.hardware_config .pins [0 ].pin = digitalPinToPinName (cfg.pin_mck );
334
+ i2s_stm32.hardware_config .pins [0 ].altFunction = cfg.pin_alt_function ;
335
+
336
+ i2s_stm32.hardware_config .pins [1 ].function = stm32_i2s::bck;
337
+ i2s_stm32.hardware_config .pins [1 ].pin = digitalPinToPinName (cfg.pin_bck );
338
+ i2s_stm32.hardware_config .pins [1 ].altFunction = cfg.pin_alt_function ;
339
+
340
+ i2s_stm32.hardware_config .pins [2 ].function = stm32_i2s::ws;
341
+ i2s_stm32.hardware_config .pins [2 ].pin = digitalPinToPinName (cfg.pin_ws );
342
+ i2s_stm32.hardware_config .pins [2 ].altFunction = cfg.pin_alt_function ;
343
+
344
+ switch (cfg.rx_tx_mode ) {
345
+ case TX_MODE:
346
+ i2s_stm32.hardware_config .pins [3 ].function = stm32_i2s::data_out;
347
+ i2s_stm32.hardware_config .pins [3 ].pin = digitalPinToPinName (cfg.pin_data );
348
+ i2s_stm32.hardware_config .pins [3 ].altFunction = cfg.pin_alt_function ;
349
+ break ;
350
+ case RX_MODE:
351
+ i2s_stm32.hardware_config .pins [4 ].function = stm32_i2s::data_in;
352
+ i2s_stm32.hardware_config .pins [4 ].pin = digitalPinToPinName (cfg.pin_data );
353
+ i2s_stm32.hardware_config .pins [4 ].altFunction = cfg.pin_alt_function ;
354
+ break ;
355
+ case RXTX_MODE:
356
+ i2s_stm32.hardware_config .pins [3 ].function = stm32_i2s::data_out;
357
+ i2s_stm32.hardware_config .pins [3 ].pin = digitalPinToPinName (cfg.pin_data );
358
+ i2s_stm32.hardware_config .pins [3 ].altFunction = cfg.pin_alt_function ;
359
+
360
+ i2s_stm32.hardware_config .pins [4 ].function = stm32_i2s::data_in;
361
+ i2s_stm32.hardware_config .pins [4 ].pin = digitalPinToPinName (cfg.pin_data );
362
+ i2s_stm32.hardware_config .pins [4 ].altFunction = cfg.pin_alt_function ;
363
+ break ;
364
+ };
365
+
366
+ }
367
+ }
368
+
326
369
uint32_t getMode (I2SConfigStd &cfg) {
327
370
if (cfg.is_master ) {
328
371
switch (cfg.rx_tx_mode ) {
0 commit comments