diff --git a/libraries/AP_HAL/Scheduler.h b/libraries/AP_HAL/Scheduler.h
index 09cb23cdd1..9a1d444565 100644
--- a/libraries/AP_HAL/Scheduler.h
+++ b/libraries/AP_HAL/Scheduler.h
@@ -22,6 +22,9 @@ public:
                         uint32_t period_us) = 0;
     virtual void     suspend_timer_procs() = 0;
     virtual void     resume_timer_procs() = 0;
+
+    virtual void     begin_atomic() = 0;
+    virtual void     end_atomic() = 0;
 };
 
 #endif // __AP_HAL_SCHEDULER_H__
diff --git a/libraries/AP_HAL_AVR/Scheduler.cpp b/libraries/AP_HAL_AVR/Scheduler.cpp
index 8dbd829cbe..29fb3aac5d 100644
--- a/libraries/AP_HAL_AVR/Scheduler.cpp
+++ b/libraries/AP_HAL_AVR/Scheduler.cpp
@@ -321,3 +321,11 @@ void ArduinoScheduler::_timer_event() {
 
     _in_timer_proc = false;
 }
+
+void ArduinoScheduler::begin_atomic() {
+    cli();
+}
+
+void ArduinoScheduler::end_atomic() {
+    sei();
+}
diff --git a/libraries/AP_HAL_AVR/Scheduler.h b/libraries/AP_HAL_AVR/Scheduler.h
index 272edc41c7..c7e5c52ad3 100644
--- a/libraries/AP_HAL_AVR/Scheduler.h
+++ b/libraries/AP_HAL_AVR/Scheduler.h
@@ -25,6 +25,8 @@ public:
     void     register_timer_failsafe(AP_HAL::TimedProc, uint32_t period_us);
     void     suspend_timer_procs();
     void     resume_timer_procs();
+    void     begin_atomic();
+    void     end_atomic();
 
 private:
     /* Implementation specific methods: */