diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d4b4307b05..73073762f1 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2268,6 +2268,8 @@ #define ADC_BUTTON_DEBOUNCE_DELAY 16 // (count) Increase if buttons bounce or repeat too fast #endif +//#define FAST_BUTTON_POLLING // Poll buttons at ~1kHz on 8-bit AVR. Set to 'false' for slow polling on 32-bit. + // @section safety /** diff --git a/Marlin/src/inc/Conditionals-5-post.h b/Marlin/src/inc/Conditionals-5-post.h index 9b16f515d6..380e8e6071 100644 --- a/Marlin/src/inc/Conditionals-5-post.h +++ b/Marlin/src/inc/Conditionals-5-post.h @@ -3557,6 +3557,10 @@ #define HAS_ROTARY_ENCODER 1 #endif +#if defined(CPU_32_BIT) && !defined(FAST_BUTTON_POLLING) + #define FAST_BUTTON_POLLING +#endif + #if PIN_EXISTS(SAFE_POWER) && DISABLED(DISABLE_DRIVER_SAFE_POWER_PROTECT) #define HAS_DRIVER_SAFE_POWER_PROTECT 1 #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 169d86a72f..5c9f122067 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -4283,10 +4283,15 @@ void Temperature::isr() { #endif // SLOW_PWM_HEATERS // - // Update lcd buttons 488 times per second + // Update lcd buttons at ~488Hz or ~976Hz // - static bool do_buttons; - if ((do_buttons ^= true)) ui.update_buttons(); + #if ENABLED(FAST_BUTTON_POLLING) + constexpr bool do_buttons = true; + #else + static bool do_buttons; + do_buttons ^= true; + #endif + if (do_buttons) ui.update_buttons(); /** * One sensor is sampled on every other call of the ISR.