summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp8266/esp_mphal.c15
-rw-r--r--ports/esp8266/mpconfigport.h8
2 files changed, 20 insertions, 3 deletions
diff --git a/ports/esp8266/esp_mphal.c b/ports/esp8266/esp_mphal.c
index 7606bd4f6..06502e85c 100644
--- a/ports/esp8266/esp_mphal.c
+++ b/ports/esp8266/esp_mphal.c
@@ -166,6 +166,21 @@ void mp_hal_signal_dupterm_input(void) {
system_os_post(DUPTERM_TASK_ID, 0, 0);
}
+// this bit is unused in the Xtensa PS register
+#define ETS_LOOP_ITER_BIT (12)
+
+uint32_t esp_disable_irq(void) {
+ uint32_t state = disable_irq();
+ state = (state & ~(1 << ETS_LOOP_ITER_BIT)) | (ets_loop_iter_disable << ETS_LOOP_ITER_BIT);
+ ets_loop_iter_disable = 1;
+ return state;
+}
+
+void esp_enable_irq(uint32_t state) {
+ ets_loop_iter_disable = (state >> ETS_LOOP_ITER_BIT) & 1;
+ enable_irq(state & ~(1 << ETS_LOOP_ITER_BIT));
+}
+
// Get pointer to esf_buf bookkeeping structure
void *ets_get_esf_buf_ctlblk(void) {
// Get literal ptr before start of esf_rx_buf_alloc func
diff --git a/ports/esp8266/mpconfigport.h b/ports/esp8266/mpconfigport.h
index 1925fc3e7..ec36291ed 100644
--- a/ports/esp8266/mpconfigport.h
+++ b/ports/esp8266/mpconfigport.h
@@ -126,9 +126,8 @@
#define MICROPY_VM_HOOK_LOOP MICROPY_VM_HOOK_POLL
#define MICROPY_VM_HOOK_RETURN MICROPY_VM_HOOK_POLL
-#include "xtirq.h"
-#define MICROPY_BEGIN_ATOMIC_SECTION() disable_irq()
-#define MICROPY_END_ATOMIC_SECTION(state) enable_irq(state)
+#define MICROPY_BEGIN_ATOMIC_SECTION() esp_disable_irq()
+#define MICROPY_END_ATOMIC_SECTION(state) esp_enable_irq(state)
// type definitions for the specific machine
@@ -173,3 +172,6 @@ extern const struct _mp_print_t mp_debug_print;
#define WDEV_HWRNG ((volatile uint32_t *)0x3ff20e44)
#define _assert(expr) ((expr) ? (void)0 : __assert_func(__FILE__, __LINE__, __func__, #expr))
+
+uint32_t esp_disable_irq(void);
+void esp_enable_irq(uint32_t state);