diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 673968ef..69390481 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -97,6 +97,9 @@ enum analogPins { DT_FOREACH_PROP_ELEM(DT_PATH(zephyr_user), #endif +void interrupts(void); +void noInterrupts(void); + #include #ifdef __cplusplus #include diff --git a/cores/arduino/zephyrCommon.cpp b/cores/arduino/zephyrCommon.cpp index 13611ca2..9eb84dca 100644 --- a/cores/arduino/zephyrCommon.cpp +++ b/cores/arduino/zephyrCommon.cpp @@ -175,6 +175,22 @@ size_t analog_pin_index(pin_size_t pinNumber) { #endif //CONFIG_ADC +static unsigned int irq_key; +static bool interrupts_disabled = false; + +void interrupts(void) { + if (interrupts_disabled) { + irq_unlock(irq_key); + interrupts_disabled = false; + } +} + +void noInterrupts(void) { + if (!interrupts_disabled) { + irq_key = irq_lock(); + interrupts_disabled = true; + } +} } void yield(void) {