| 1473 | #endif |
| 1474 | |
| 1475 | void audioOutLoop(void *pvParameter) |
| 1476 | { |
| 1477 | modAudioOut out = pvParameter; |
| 1478 | uint8_t stopped = true; |
| 1479 | |
| 1480 | #if MODDEF_AUDIOOUT_I2S_PDM |
| 1481 | i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER); |
| 1482 | tx_chan_cfg.auto_clear = true; |
| 1483 | |
| 1484 | i2s_pdm_tx_config_t tx_cfg = { |
| 1485 | .clk_cfg = I2S_PDM_TX_CLK_DEFAULT_CONFIG(out->sampleRate), |
| 1486 | .slot_cfg = I2S_PDM_TX_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO), |
| 1487 | .gpio_cfg = { |
| 1488 | .clk = -1, |
| 1489 | .dout = MODDEF_AUDIOOUT_I2S_PDM_PIN, |
| 1490 | .invert_flags = { |
| 1491 | .clk_inv = false, |
| 1492 | }, |
| 1493 | }, |
| 1494 | }; |
| 1495 | i2s_new_channel(&tx_chan_cfg, &out->tx_handle, NULL); |
| 1496 | i2s_channel_init_pdm_tx_mode(out->tx_handle, &tx_cfg); |
| 1497 | |
| 1498 | #elif !MODDEF_AUDIOOUT_I2S_DAC |
| 1499 | // I2S_CHANNEL_DEFAULT_CONFIG(i2s_num, i2s_role) |
| 1500 | i2s_chan_config_t chan_cfg = { |
| 1501 | .id = MODDEF_AUDIOOUT_I2S_NUM, |
| 1502 | .role = I2S_ROLE_MASTER, |
| 1503 | .dma_desc_num = 2, |
| 1504 | .dma_frame_num = sizeof(out->buffer) / out->bytesPerFrame, |
| 1505 | .auto_clear = true, // This is different from I2S_CHANNEL_DEFAULT_CONFIG |
| 1506 | }; |
| 1507 | i2s_new_channel(&chan_cfg, &out->tx_handle, NULL); |
| 1508 | |
| 1509 | i2s_std_config_t i2s_config = { |
| 1510 | .gpio_cfg = { |
| 1511 | .mclk = I2S_GPIO_UNUSED, |
| 1512 | .bclk = MODDEF_AUDIOOUT_I2S_BCK_PIN, |
| 1513 | .ws = MODDEF_AUDIOOUT_I2S_LR_PIN, |
| 1514 | .dout = MODDEF_AUDIOOUT_I2S_DATAOUT_PIN, |
| 1515 | .din = I2S_GPIO_UNUSED, |
| 1516 | .invert_flags = { |
| 1517 | .mclk_inv = false, |
| 1518 | .bclk_inv = false, |
| 1519 | .ws_inv = false, |
| 1520 | }, |
| 1521 | }, |
| 1522 | }; |
| 1523 | |
| 1524 | // I2S_STD_CLK_DEFAULT_CONFIG(sampleRate) (i2s_std.h) |
| 1525 | i2s_config.clk_cfg.sample_rate_hz = out->sampleRate; |
| 1526 | i2s_config.clk_cfg.clk_src = I2S_CLK_SRC_DEFAULT; |
| 1527 | i2s_config.clk_cfg.mclk_multiple = I2S_MCLK_MULTIPLE_256; |
| 1528 | |
| 1529 | // I2S_STD_MSB_SLOT_DEFAULT_CONFIG(bitwidth, mode) (i2s_std.h) |
| 1530 | int msb_right = true; |
| 1531 | #if MODDEF_AUDIOOUT_I2S_BITSPERSAMPLE == 32 |
| 1532 | i2s_config.slot_cfg.data_bit_width = I2S_DATA_BIT_WIDTH_16BIT; |
nothing calls this directly
no test coverage detected