MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / audioOutLoop

Function audioOutLoop

modules/pins/i2s/audioout.c:1475–1689  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1473#endif
1474
1475void 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;

Callers

nothing calls this directly

Calls 2

audioMixFunction · 0.85
modGPIOWriteFunction · 0.50

Tested by

no test coverage detected