From: Ing. Jaroslav Šafka Date: Fri, 2 Mar 2018 21:56:41 +0000 (+0100) Subject: rmt: Fix LoadProhibited on RX END X-Git-Tag: v3.1-beta1~282^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3d89c8ba749db2643040ffac9291ef96dbedda5d;p=esp-idf rmt: Fix LoadProhibited on RX END Fixes exceptions LoadProhibited, when rmt tries read variable p_rmt on RX END which can be 0. It happens after esp_reset() (OTA) and the rmt is not probably stopped by it. In other words the routine rmt_driver_isr_default was called before second rx channel was registered. scenario: register tx channel register rx channel reboot register tx channel -> exception (because rx channel is accessed) Merges https://github.com/espressif/esp-idf/pull/1671 --- diff --git a/components/driver/rmt.c b/components/driver/rmt.c index 8e7b2a1d01..046b634ca9 100644 --- a/components/driver/rmt.c +++ b/components/driver/rmt.c @@ -540,6 +540,10 @@ static void IRAM_ATTR rmt_driver_isr_default(void* arg) if(intr_st & BIT(i)) { channel = i / 3; rmt_obj_t* p_rmt = p_rmt_obj[channel]; + if(NULL == p_rmt) { + RMT.int_clr.val = BIT(i); + continue; + } switch(i % 3) { //TX END case 0: