diff --git a/dda.c b/dda.c index 2303eab..a3b8aab 100644 --- a/dda.c +++ b/dda.c @@ -482,36 +482,78 @@ void dda_start(DDA *dda) { Finally we de-assert any asserted step pins. */ void dda_step(DDA *dda) { - enum axis_e i; - char to_step_flags = 0; - #if ! defined ACCELERATION_TEMPORAL - for (i = X; i < AXIS_COUNT; i++) { - if (move_state.steps[i]) { - move_state.counter[i] -= dda->delta[i]; - if (move_state.counter[i] < 0) { - to_step_flags |= (0x01 << i); - move_state.steps[i]--; - move_state.counter[i] += dda->total_steps; - } - } - } - #else // ACCELERATION_TEMPORAL - i = dda->axis_to_step; - to_step_flags |= (0x01 << i); - move_state.steps[i]--; - move_state.time[i] += dda->step_interval[i]; - move_state.all_time = move_state.time[i]; - #endif +#if ! defined ACCELERATION_TEMPORAL + if (move_state.steps[X]) { + move_state.counter[X] -= dda->delta[X]; + if (move_state.counter[X] < 0) { + x_step(); + move_state.steps[X]--; + move_state.counter[X] += dda->total_steps; + } + } +#else // ACCELERATION_TEMPORAL + if (dda->axis_to_step == X) { + x_step(); + move_state.steps[X]--; + move_state.time[X] += dda->step_interval[X]; + move_state.all_time = move_state.time[X]; + } +#endif - if (to_step_flags & (0x01 << X)) - x_step(); - if (to_step_flags & (0x01 << Y)) - y_step(); - if (to_step_flags & (0x01 << Z)) - z_step(); - if (to_step_flags & (0x01 << E)) - e_step(); +#if ! defined ACCELERATION_TEMPORAL + if (move_state.steps[Y]) { + move_state.counter[Y] -= dda->delta[Y]; + if (move_state.counter[Y] < 0) { + y_step(); + move_state.steps[Y]--; + move_state.counter[Y] += dda->total_steps; + } + } +#else // ACCELERATION_TEMPORAL + if (dda->axis_to_step == Y) { + y_step(); + move_state.steps[Y]--; + move_state.time[Y] += dda->step_interval[Y]; + move_state.all_time = move_state.time[Y]; + } +#endif + +#if ! defined ACCELERATION_TEMPORAL + if (move_state.steps[Z]) { + move_state.counter[Z] -= dda->delta[Z]; + if (move_state.counter[Z] < 0) { + z_step(); + move_state.steps[Z]--; + move_state.counter[Z] += dda->total_steps; + } + } +#else // ACCELERATION_TEMPORAL + if (dda->axis_to_step == Z) { + z_step(); + move_state.steps[Z]--; + move_state.time[Z] += dda->step_interval[Z]; + move_state.all_time = move_state.time[Z]; + } +#endif + +#if ! defined ACCELERATION_TEMPORAL + if (move_state.steps[E]) { + move_state.counter[E] -= dda->delta[E]; + if (move_state.counter[E] < 0) { + e_step(); + move_state.steps[E]--; + move_state.counter[E] += dda->total_steps; + } + } +#else // ACCELERATION_TEMPORAL + if (dda->axis_to_step == E) { + e_step(); + move_state.steps[E]--; + move_state.time[E] += dda->step_interval[E]; + move_state.all_time = move_state.time[E]; + } +#endif #if STEP_INTERRUPT_INTERRUPTIBLE && ! defined ACCELERATION_RAMPING // Since we have sent steps to all the motors that will be stepping