Fix incorrect precedence for retraction phase

The logic was inverted, causing the fastest isr to always retract
instead of counter-balance the acceleration properly.
This commit is contained in:
Yuri D'Elia 2020-07-16 17:47:48 +02:00
parent c08f37da96
commit fb5f09da6d

View File

@ -883,13 +883,13 @@ FORCE_INLINE void isr() {
advance_spread(main_Rate); advance_spread(main_Rate);
if (LA_phase >= 0) { if (LA_phase >= 0) {
if (step_loops == e_step_loops) if (step_loops == e_step_loops)
LA_phase = (current_block->advance_rate > main_Rate); LA_phase = (current_block->advance_rate < main_Rate);
else { else {
// avoid overflow through division. warning: we need to _guarantee_ step_loops // avoid overflow through division. warning: we need to _guarantee_ step_loops
// and e_step_loops are <= 4 due to fastdiv's limit // and e_step_loops are <= 4 due to fastdiv's limit
auto adv_rate_n = fastdiv(current_block->advance_rate, step_loops); auto adv_rate_n = fastdiv(current_block->advance_rate, step_loops);
auto main_rate_n = fastdiv(main_Rate, e_step_loops); auto main_rate_n = fastdiv(main_Rate, e_step_loops);
LA_phase = (adv_rate_n > main_rate_n); LA_phase = (adv_rate_n < main_rate_n);
} }
} }
} }