mirror of
https://github.com/espressif/esp-idf.git
synced 2025-12-16 04:22:22 +00:00
i2s: add slot sequence table
Closes: https://github.com/espressif/esp-idf/issues/9208 When I2S is configured into different modes, the slot sequence varies. This commit updates slot sequence tables and corresponding descriptions in (both code and programming guide).
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | ESP32-H2 |
|
||||
| ----------------- | ----- | -------- | -------- | -------- | -------- |
|
||||
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
|
||||
| ----------------- | ----- | -------- | -------- | -------- |
|
||||
|
||||
@@ -3,5 +3,4 @@ set(srcs "test_app_main.c"
|
||||
"test_i2s_iram.c")
|
||||
|
||||
idf_component_register(SRCS ${srcs}
|
||||
PRIV_INCLUDE_DIRS "../../"
|
||||
WHOLE_ARCHIVE)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#include "soc/pcnt_periph.h"
|
||||
#endif
|
||||
|
||||
#include "test_inc/test_i2s.h"
|
||||
#include "../../test_inc/test_i2s.h"
|
||||
|
||||
#define I2S_TEST_MODE_SLAVE_TO_MASTER 0
|
||||
#define I2S_TEST_MODE_MASTER_TO_SLAVE 1
|
||||
@@ -416,7 +416,7 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
||||
};
|
||||
i2s_std_config_t rx_std_cfg = tx_std_cfg;
|
||||
rx_std_cfg.slot_cfg.slot_mode = I2S_SLOT_MODE_MONO;
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_ONLY_RIGHT;
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_RIGHT;
|
||||
|
||||
/* TX channel basic test */
|
||||
TEST_ESP_OK(i2s_new_channel(&chan_cfg, &tx_handle, &rx_handle));
|
||||
@@ -463,7 +463,7 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
||||
* rx receive: 0x00[R] 0x02[R] ... */
|
||||
TEST_ESP_OK(i2s_channel_disable(tx_handle));
|
||||
TEST_ESP_OK(i2s_channel_disable(rx_handle));
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_ONLY_LEFT;
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT;
|
||||
TEST_ESP_OK(i2s_channel_reconfig_std_slot(rx_handle, &rx_std_cfg.slot_cfg));
|
||||
TEST_ESP_OK(i2s_channel_enable(tx_handle));
|
||||
TEST_ESP_OK(i2s_channel_enable(rx_handle));
|
||||
@@ -493,7 +493,7 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
||||
TEST_ESP_OK(i2s_channel_disable(tx_handle));
|
||||
TEST_ESP_OK(i2s_channel_disable(rx_handle));
|
||||
rx_std_cfg.slot_cfg.slot_mode = I2S_SLOT_MODE_STEREO;
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_LEFT_RIGHT;
|
||||
rx_std_cfg.slot_cfg.slot_mask = I2S_STD_SLOT_BOTH;
|
||||
TEST_ESP_OK(i2s_channel_reconfig_std_slot(rx_handle, &rx_std_cfg.slot_cfg));
|
||||
TEST_ESP_OK(i2s_channel_enable(tx_handle));
|
||||
TEST_ESP_OK(i2s_channel_enable(rx_handle));
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include "soc/soc_caps.h"
|
||||
#include "esp_private/i2s_platform.h"
|
||||
#include "esp_private/spi_flash_os.h"
|
||||
#include "test_inc/test_i2s.h"
|
||||
#include "../../test_inc/test_i2s.h"
|
||||
|
||||
#if CONFIG_I2S_ISR_IRAM_SAFE
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | ESP32-H2 |
|
||||
| ----------------- | ----- | -------- | -------- | -------- | -------- |
|
||||
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
|
||||
| ----------------- | ----- | -------- | -------- | -------- |
|
||||
|
||||
@@ -2,5 +2,4 @@ set(srcs "test_app_main.c"
|
||||
"test_legacy_i2s.c")
|
||||
|
||||
idf_component_register(SRCS ${srcs}
|
||||
PRIV_INCLUDE_DIRS "../../"
|
||||
WHOLE_ARCHIVE)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#include "soc/pcnt_periph.h"
|
||||
#endif
|
||||
|
||||
#include "test_inc/test_i2s.h"
|
||||
#include "../../test_inc/test_i2s.h"
|
||||
|
||||
#define PERCENT_DIFF 0.0001
|
||||
|
||||
@@ -254,9 +254,9 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s_legacy]")
|
||||
TEST_ESP_OK(i2s_stop(I2S_NUM_0));
|
||||
/* Config TX as stereo channel directly, because legacy driver can't support config tx&rx separately */
|
||||
#if SOC_I2S_HW_VERSION_1
|
||||
i2s_ll_tx_select_slot(&I2S0, I2S_STD_SLOT_LEFT_RIGHT, true);
|
||||
i2s_ll_tx_select_std_slot(&I2S0, I2S_STD_SLOT_BOTH, false);
|
||||
#else
|
||||
i2s_ll_tx_select_slot(&I2S0, I2S_STD_SLOT_LEFT_RIGHT);
|
||||
i2s_ll_tx_select_std_slot(&I2S0, I2S_STD_SLOT_BOTH);
|
||||
#endif
|
||||
i2s_ll_tx_enable_mono_mode(&I2S0, false);
|
||||
|
||||
@@ -352,9 +352,9 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s_legacy]")
|
||||
TEST_ESP_OK(i2s_driver_install(I2S_NUM_0, &master_i2s_config, 0, NULL));
|
||||
TEST_ESP_OK(i2s_stop(I2S_NUM_0));
|
||||
#if SOC_I2S_HW_VERSION_1
|
||||
i2s_ll_tx_select_slot(&I2S0, I2S_STD_SLOT_LEFT_RIGHT, true);
|
||||
i2s_ll_tx_select_std_slot(&I2S0, I2S_STD_SLOT_BOTH, false);
|
||||
#else
|
||||
i2s_ll_tx_select_slot(&I2S0, I2S_STD_SLOT_LEFT_RIGHT);
|
||||
i2s_ll_tx_select_std_slot(&I2S0, I2S_STD_SLOT_BOTH);
|
||||
#endif
|
||||
i2s_ll_tx_enable_mono_mode(&I2S0, false);
|
||||
|
||||
@@ -676,7 +676,7 @@ TEST_CASE("I2S_write_and_read_test_master_rx_and_slave_tx", "[i2s_legacy]")
|
||||
TEST_CASE("I2S_memory_leaking_test", "[i2s_legacy]")
|
||||
{
|
||||
i2s_config_t master_i2s_config = {
|
||||
.mode = I2S_MODE_MASTER | I2S_MODE_RX,
|
||||
.mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_TX,
|
||||
.sample_rate = SAMPLE_RATE,
|
||||
.bits_per_sample = SAMPLE_BITS,
|
||||
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
|
||||
@@ -701,20 +701,33 @@ TEST_CASE("I2S_memory_leaking_test", "[i2s_legacy]")
|
||||
.data_out_num = -1,
|
||||
.data_in_num = DATA_IN_IO
|
||||
};
|
||||
uint8_t *w_buf = calloc(1, 2000);
|
||||
TEST_ASSERT(w_buf);
|
||||
uint8_t *r_buf = calloc(1, 2000);
|
||||
TEST_ASSERT(r_buf);
|
||||
size_t w_bytes = 0;
|
||||
size_t r_bytes = 0;
|
||||
|
||||
TEST_ESP_OK(i2s_driver_install(I2S_NUM_0, &master_i2s_config, 0, NULL));
|
||||
TEST_ESP_OK(i2s_set_pin(I2S_NUM_0, &master_pin_config));
|
||||
TEST_ESP_OK(i2s_write(I2S_NUM_0, w_buf, 2000, &w_bytes, portMAX_DELAY));
|
||||
TEST_ESP_OK(i2s_read(I2S_NUM_0, r_buf, 2000, &r_bytes, portMAX_DELAY));
|
||||
i2s_driver_uninstall(I2S_NUM_0);
|
||||
int initial_size = esp_get_free_heap_size();
|
||||
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int i = 0; i < 50; i++) {
|
||||
TEST_ESP_OK(i2s_driver_install(I2S_NUM_0, &master_i2s_config, 0, NULL));
|
||||
TEST_ESP_OK(i2s_set_pin(I2S_NUM_0, &master_pin_config));
|
||||
TEST_ESP_OK(i2s_write(I2S_NUM_0, w_buf, 2000, &w_bytes, portMAX_DELAY));
|
||||
TEST_ESP_OK(i2s_read(I2S_NUM_0, r_buf, 2000, &r_bytes, portMAX_DELAY));
|
||||
i2s_driver_uninstall(I2S_NUM_0);
|
||||
TEST_ASSERT(initial_size == esp_get_free_heap_size());
|
||||
}
|
||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||
TEST_ASSERT(initial_size == esp_get_free_heap_size());
|
||||
|
||||
free(w_buf);
|
||||
free(r_buf);
|
||||
}
|
||||
|
||||
#if SOC_I2S_SUPPORTS_APLL
|
||||
|
||||
Reference in New Issue
Block a user