stepper: Ensure minimum time between step pin and dir pin change

Commit 8faed8d9 made it possible to utilize stepper_event_full() while
utilizing tmc "step on both edges" optimation.  That commit would
ensure a minimum step pulse duration, but it did not ensure a minimum
duration between step pin and dir pin changes.  Commits 0d27195f and
554ae78d optimized the gpio handling on stm32h7 chips, which could
potentially cause a very small amount of time between step pin and dir
pin changes.

Enforce a minimum time after a step pin update before updating the dir
pin.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2025-05-07 21:02:33 -04:00
parent efabe63357
commit 885f63cff0

View File

@ -109,6 +109,10 @@ stepper_load_next(struct stepper *s)
shutdown("Stepper too far in past");
s->time.waketime = min_next_time;
}
if (was_active && need_dir_change && s->flags & SF_SINGLE_SCHED)
// Must ensure minimum time between step change and dir change
while (timer_is_before(timer_read_time(), min_next_time))
;
}
// Set new direction (if needed)