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:
parent
c08f37da96
commit
fb5f09da6d
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user