}
-// Called from hi-level stepper interrupt
+// Called from hi-priority stepper interrupt
void spindle_update(power_update_t update) {pwm_update(update);}
-// Called from lo-level stepper interrupt
+// Called from lo-priority stepper interrupt
void spindle_idle() {
if (spindle.sync_speed.dist != -1) {
spindle.sync_speed.dist = -1; // Mark done
switch (status) {
case STAT_NOP: // No move executed, idle
- spindle_idle();
- st.busy = false;
+ if (!st.busy) spindle_idle();
break;
case STAT_AGAIN: continue; // No command executed, try again
}
+/// Step timer interrupt routine.
/// Dwell or dequeue and load next move.
-static void _next_move() {
+ISR(STEP_TIMER_ISR) {
static uint8_t tick = 0;
// Update spindle power on every tick
_request_exec_move();
_end_move();
tick = 0; // Try again in 1ms
+ st.busy = false;
return;
}
}
-/// Step timer interrupt routine.
-ISR(STEP_TIMER_ISR) {_next_move();}
-
-
void st_prep_power(const power_update_t powers[]) {
ESTOP_ASSERT(!st.move_ready, STAT_STEPPER_NOT_READY);
memcpy(st.prep_powers, powers, sizeof(st.prep_powers));