From 7e96482087632278c3d9e4a5db6bad25374ada8f Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 7 Jun 2023 13:45:27 +1000 Subject: [PATCH] fix shared peripheral interrupts causing hangs --- src/drivers/display.cpp | 9 +++++---- src/drivers/spi.cpp | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/drivers/display.cpp b/src/drivers/display.cpp index 3c0df978..94f27bb6 100644 --- a/src/drivers/display.cpp +++ b/src/drivers/display.cpp @@ -17,6 +17,7 @@ #include "esp_attr.h" #include "esp_err.h" #include "esp_heap_caps.h" +#include "esp_intr_alloc.h" #include "freertos/portable.h" #include "freertos/portmacro.h" #include "freertos/projdefs.h" @@ -126,7 +127,8 @@ auto Display::Create(GpioExpander* expander, ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, 0)); ESP_ERROR_CHECK(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0)); - // ledc_fade_func_install(0); + ledc_fade_func_install(ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED | + ESP_INTR_FLAG_IRAM); // Next, init the SPI device spi_device_interface_config_t spi_cfg = { @@ -194,9 +196,8 @@ auto Display::SetDisplayOn(bool enabled) -> void { display_on_ = enabled; int new_duty = display_on_ ? brightness_ : 0; - // ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, new_duty, - // 250); ledc_fade_start(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, - // LEDC_FADE_NO_WAIT); + ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, new_duty, 250); + ledc_fade_start(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, LEDC_FADE_NO_WAIT); } void Display::SendInitialisationSequence(const uint8_t* data) { diff --git a/src/drivers/spi.cpp b/src/drivers/spi.cpp index 9c112bb5..1e9323ae 100644 --- a/src/drivers/spi.cpp +++ b/src/drivers/spi.cpp @@ -10,6 +10,7 @@ #include "driver/spi_common.h" #include "driver/spi_master.h" #include "esp_err.h" +#include "esp_intr_alloc.h" #include "hal/spi_types.h" namespace drivers { @@ -37,7 +38,8 @@ esp_err_t init_spi(void) { // manages its down use of DMA-capable memory. .max_transfer_sz = 128 * 16 * 2, // TODO: hmm .flags = SPICOMMON_BUSFLAG_MASTER | SPICOMMON_BUSFLAG_IOMUX_PINS, - .intr_flags = 0, + .intr_flags = + ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED | ESP_INTR_FLAG_IRAM, }; if (esp_err_t err = spi_bus_initialize(kSpiHost, &config, SPI_DMA_CH_AUTO)) {