From cdd610cadcbda37dbd8effb8d12e1196d0d453b1 Mon Sep 17 00:00:00 2001 From: wanlei Date: Thu, 24 Nov 2022 11:16:27 +0800 Subject: [PATCH] spi_slave: fix io re-config issue --- components/driver/spi/gpspi/spi_slave.c | 3 +++ .../driver/test_apps/spi/slave/main/test_app_main.c | 4 ++-- .../driver/test_apps/spi/slave/main/test_spi_slave.c | 8 +------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/components/driver/spi/gpspi/spi_slave.c b/components/driver/spi/gpspi/spi_slave.c index b087238be9..ef5c4f3597 100644 --- a/components/driver/spi/gpspi/spi_slave.c +++ b/components/driver/spi/gpspi/spi_slave.c @@ -50,6 +50,7 @@ static const char *SPI_TAG = "spi_slave"; typedef struct { int id; + spi_bus_config_t bus_config; spi_slave_interface_config_t cfg; intr_handle_t intr; spi_slave_hal_context_t hal; @@ -156,6 +157,7 @@ esp_err_t spi_slave_initialize(spi_host_device_t host, const spi_bus_config_t *b } memset(spihost[host], 0, sizeof(spi_slave_t)); memcpy(&spihost[host]->cfg, slave_config, sizeof(spi_slave_interface_config_t)); + memcpy(&spihost[host]->bus_config, bus_config, sizeof(spi_bus_config_t)); spihost[host]->id = host; bool use_dma = (dma_chan != SPI_DMA_DISABLED); @@ -301,6 +303,7 @@ esp_err_t spi_slave_free(spi_host_device_t host) if (spihost[host]->dma_enabled) { spicommon_dma_chan_free(host); } + spicommon_bus_free_io_cfg(&spihost[host]->bus_config); free(spihost[host]->hal.dmadesc_tx); free(spihost[host]->hal.dmadesc_rx); esp_intr_free(spihost[host]->intr); diff --git a/components/driver/test_apps/spi/slave/main/test_app_main.c b/components/driver/test_apps/spi/slave/main/test_app_main.c index c3ebfbbe74..dda2dbbcd4 100644 --- a/components/driver/test_apps/spi/slave/main/test_app_main.c +++ b/components/driver/test_apps/spi/slave/main/test_app_main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -8,7 +8,7 @@ #include "unity_test_utils.h" #include "esp_heap_caps.h" -#define TEST_MEMORY_LEAK_THRESHOLD (100) +#define TEST_MEMORY_LEAK_THRESHOLD (120) static size_t before_free_8bit; static size_t before_free_32bit; diff --git a/components/driver/test_apps/spi/slave/main/test_spi_slave.c b/components/driver/test_apps/spi/slave/main/test_spi_slave.c index 0989453c7f..658259018d 100644 --- a/components/driver/test_apps/spi/slave/main/test_spi_slave.c +++ b/components/driver/test_apps/spi/slave/main/test_spi_slave.c @@ -736,14 +736,8 @@ TEST_CASE("test_slave_isr_pin_to_core","[spi]") slave_expect = 0; for (int i = 0; i < TEST_ISR_CNT; i++) { TEST_ESP_OK(spi_slave_initialize(TEST_SPI_HOST, &buscfg, &slvcfg, SPI_DMA_CH_AUTO)); - TEST_ESP_OK(spi_slave_queue_trans(TEST_SPI_HOST, &trans_cfg, portMAX_DELAY)); - // This two delay used for hardware to activate a interrupt after invoke - vTaskDelay(1); - // to invoke a trans_done intr for spi slave without a master - spi_ll_set_int_stat(SPI_LL_GET_HW(TEST_SPI_HOST)); - vTaskDelay(1); - + vTaskDelay(1); // Waiting ISR on core 1 to be done. TEST_ESP_OK(spi_slave_free(TEST_SPI_HOST)); } printf("Test Slave ISR Assign CPU1: %d : %ld\n", TEST_ISR_CNT, slave_expect);