forked from espressif/esp-idf
i2s_legacy_test: fix the clock test issue
This commit is contained in:
@@ -804,6 +804,8 @@ static esp_err_t i2s_calculate_clock(i2s_port_t i2s_num, i2s_hal_clock_info_t *c
|
|||||||
|
|
||||||
/* Calculate clock for common mode */
|
/* Calculate clock for common mode */
|
||||||
ESP_RETURN_ON_ERROR(i2s_calculate_common_clock(i2s_num, clk_info), TAG, "Common clock calculate failed");
|
ESP_RETURN_ON_ERROR(i2s_calculate_common_clock(i2s_num, clk_info), TAG, "Common clock calculate failed");
|
||||||
|
ESP_LOGD(TAG, "[sclk] %d [mclk] %d [mclk_div] %d [bclk] %d [bclk_div] %d",
|
||||||
|
clk_info->sclk, clk_info->mclk, clk_info->mclk_div, clk_info->bclk, clk_info->bclk_div);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -367,7 +367,7 @@ TEST_CASE("I2S_thread_concurrent_safety_test", "[i2s]")
|
|||||||
static uint32_t get_start_index(uint16_t *buf, uint32_t len, uint32_t start_val)
|
static uint32_t get_start_index(uint16_t *buf, uint32_t len, uint32_t start_val)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 100; i < len; i++) {
|
||||||
if (buf[i] == start_val) {
|
if (buf[i] == start_val) {
|
||||||
printf("%d %d %d %d %d %d %d %d\n",
|
printf("%d %d %d %d %d %d %d %d\n",
|
||||||
buf[i], buf[i+1], buf[i+2], buf[i+3],
|
buf[i], buf[i+1], buf[i+2], buf[i+3],
|
||||||
@@ -394,6 +394,8 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
|||||||
i2s_chan_handle_t tx_handle;
|
i2s_chan_handle_t tx_handle;
|
||||||
i2s_chan_handle_t rx_handle;
|
i2s_chan_handle_t rx_handle;
|
||||||
|
|
||||||
|
bool is_failed = false;
|
||||||
|
|
||||||
i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER);
|
i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER);
|
||||||
chan_cfg.dma_desc_num = 8;
|
chan_cfg.dma_desc_num = 8;
|
||||||
chan_cfg.dma_frame_num = 128;
|
chan_cfg.dma_frame_num = 128;
|
||||||
@@ -454,7 +456,11 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
|||||||
printf("Data start index: %d\n", index);
|
printf("Data start index: %d\n", index);
|
||||||
TEST_ASSERT(index < READ_BUF_LEN / 2 - 50);
|
TEST_ASSERT(index < READ_BUF_LEN / 2 - 50);
|
||||||
for (int16_t j = 1; j < 100; j += 2) {
|
for (int16_t j = 1; j < 100; j += 2) {
|
||||||
TEST_ASSERT_EQUAL_INT16(r_buf[index++], j);
|
if (r_buf[index++] != j) {
|
||||||
|
printf("rx right mono test failed\n");
|
||||||
|
is_failed = true;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("rx right mono test passed\n");
|
printf("rx right mono test passed\n");
|
||||||
|
|
||||||
@@ -483,7 +489,11 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
|||||||
printf("Data start index: %d\n", index);
|
printf("Data start index: %d\n", index);
|
||||||
TEST_ASSERT(index < READ_BUF_LEN / 2 - 50);
|
TEST_ASSERT(index < READ_BUF_LEN / 2 - 50);
|
||||||
for (int16_t j = 2; j < 100; j += 2) {
|
for (int16_t j = 2; j < 100; j += 2) {
|
||||||
TEST_ASSERT_EQUAL_INT16(r_buf[index++], j);
|
if (r_buf[index++] != j) {
|
||||||
|
printf("rx left mono test failed\n");
|
||||||
|
is_failed = true;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("rx left mono test passed\n");
|
printf("rx left mono test passed\n");
|
||||||
|
|
||||||
@@ -506,7 +516,11 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
|||||||
printf("Data start index: %d\n", index);
|
printf("Data start index: %d\n", index);
|
||||||
TEST_ASSERT(index < READ_BUF_LEN / 2 - 100);
|
TEST_ASSERT(index < READ_BUF_LEN / 2 - 100);
|
||||||
for (int16_t j = 1; j < 100; j ++) {
|
for (int16_t j = 1; j < 100; j ++) {
|
||||||
TEST_ASSERT_EQUAL_INT16(r_buf[index++], j); // receive all number
|
if (r_buf[index++] != j) {
|
||||||
|
printf("tx/rx stereo test failed\n");
|
||||||
|
is_failed = true;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("tx/rx stereo test passed\n");
|
printf("tx/rx stereo test passed\n");
|
||||||
|
|
||||||
@@ -528,19 +542,30 @@ TEST_CASE("I2S_mono_stereo_loopback_test", "[i2s]")
|
|||||||
}
|
}
|
||||||
printf("Data start index: %d\n", index);
|
printf("Data start index: %d\n", index);
|
||||||
TEST_ASSERT(index < READ_BUF_LEN / 2 - 200);
|
TEST_ASSERT(index < READ_BUF_LEN / 2 - 200);
|
||||||
for (int16_t j = 1; j < 100; j ++) {
|
for (int16_t j = 1; j < 100; j ++, index += 2) {
|
||||||
TEST_ASSERT_EQUAL_INT16(r_buf[index], j);
|
if (r_buf[index] != j) {
|
||||||
index += 2;
|
printf("tx mono rx stereo test failed\n");
|
||||||
|
is_failed = true;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("tx mono rx stereo test passed\n");
|
printf("tx mono rx stereo test passed\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
err:
|
||||||
|
if (is_failed) {
|
||||||
|
for (int i = 0; i < READ_BUF_LEN / 2; i++) {
|
||||||
|
printf("%x ", r_buf[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
free(w_buf);
|
free(w_buf);
|
||||||
free(r_buf);
|
free(r_buf);
|
||||||
TEST_ESP_OK(i2s_channel_disable(tx_handle));
|
TEST_ESP_OK(i2s_channel_disable(tx_handle));
|
||||||
TEST_ESP_OK(i2s_channel_disable(rx_handle));
|
TEST_ESP_OK(i2s_channel_disable(rx_handle));
|
||||||
TEST_ESP_OK(i2s_del_channel(tx_handle));
|
TEST_ESP_OK(i2s_del_channel(tx_handle));
|
||||||
TEST_ESP_OK(i2s_del_channel(rx_handle));
|
TEST_ESP_OK(i2s_del_channel(rx_handle));
|
||||||
|
TEST_ASSERT_FALSE(is_failed);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("I2S_memory_leak_test", "[i2s]")
|
TEST_CASE("I2S_memory_leak_test", "[i2s]")
|
||||||
|
@@ -29,6 +29,9 @@
|
|||||||
#include "driver/pulse_cnt.h"
|
#include "driver/pulse_cnt.h"
|
||||||
#include "soc/pcnt_periph.h"
|
#include "soc/pcnt_periph.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
|
#include "esp_pm.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../../test_inc/test_i2s.h"
|
#include "../../test_inc/test_i2s.h"
|
||||||
|
|
||||||
@@ -854,6 +857,14 @@ static void i2s_test_common_sample_rate(i2s_port_t id)
|
|||||||
32000, 44100, 48000, 64000, 88200, 96000,
|
32000, 44100, 48000, 64000, 88200, 96000,
|
||||||
128000, 144000, 196000};
|
128000, 144000, 196000};
|
||||||
int real_pulse = 0;
|
int real_pulse = 0;
|
||||||
|
|
||||||
|
// Acquire the PM lock incase Dynamic Frequency Scaling(DFS) lower the frequency
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
|
esp_pm_lock_handle_t pm_lock;
|
||||||
|
esp_pm_lock_type_t pm_type = ESP_PM_APB_FREQ_MAX;
|
||||||
|
TEST_ESP_OK(esp_pm_lock_create(pm_type, 0, "legacy_i2s_test", &pm_lock));
|
||||||
|
esp_pm_lock_acquire(pm_lock);
|
||||||
|
#endif
|
||||||
for (int i = 0; i < 15; i++) {
|
for (int i = 0; i < 15; i++) {
|
||||||
int expt_pulse = (int16_t)((float)test_freq[i] * (TEST_I2S_PERIOD_MS / 1000.0));
|
int expt_pulse = (int16_t)((float)test_freq[i] * (TEST_I2S_PERIOD_MS / 1000.0));
|
||||||
TEST_ESP_OK(i2s_set_clk(id, test_freq[i], SAMPLE_BITS, I2S_CHANNEL_STEREO));
|
TEST_ESP_OK(i2s_set_clk(id, test_freq[i], SAMPLE_BITS, I2S_CHANNEL_STEREO));
|
||||||
@@ -868,6 +879,10 @@ static void i2s_test_common_sample_rate(i2s_port_t id)
|
|||||||
// Check if the error between real pulse number and expected pulse number is within 1%
|
// Check if the error between real pulse number and expected pulse number is within 1%
|
||||||
TEST_ASSERT_INT_WITHIN(expt_pulse * 0.01, expt_pulse, real_pulse);
|
TEST_ASSERT_INT_WITHIN(expt_pulse * 0.01, expt_pulse, real_pulse);
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
|
esp_pm_lock_release(pm_lock);
|
||||||
|
esp_pm_lock_delete(pm_lock);
|
||||||
|
#endif
|
||||||
TEST_ESP_OK(pcnt_del_channel(pcnt_chan));
|
TEST_ESP_OK(pcnt_del_channel(pcnt_chan));
|
||||||
TEST_ESP_OK(pcnt_unit_stop(pcnt_unit));
|
TEST_ESP_OK(pcnt_unit_stop(pcnt_unit));
|
||||||
TEST_ESP_OK(pcnt_unit_disable(pcnt_unit));
|
TEST_ESP_OK(pcnt_unit_disable(pcnt_unit));
|
||||||
|
@@ -3,4 +3,3 @@ CONFIG_FREERTOS_USE_TICKLESS_IDLE=y
|
|||||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
||||||
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
|
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
|
||||||
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
|
||||||
CONFIG_I2S_ISR_IRAM_SAFE=y
|
|
||||||
|
Reference in New Issue
Block a user