From 0add5c7ae19c166d06325e0998f12549aa720d95 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Tue, 18 Dec 2018 15:02:12 -0800 Subject: [PATCH] Fix PWM not stopping at end of program --- src/avr/src/spindle.c | 4 ++-- src/avr/src/stepper.c | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/avr/src/spindle.c b/src/avr/src/spindle.c index 48b5801..693de48 100644 --- a/src/avr/src/spindle.c +++ b/src/avr/src/spindle.c @@ -191,11 +191,11 @@ void spindle_load_power_updates(power_update_t updates[], float minD, } -// 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 diff --git a/src/avr/src/stepper.c b/src/avr/src/stepper.c index 3f96521..ad277e8 100644 --- a/src/avr/src/stepper.c +++ b/src/avr/src/stepper.c @@ -112,8 +112,7 @@ ISR(STEP_LOW_LEVEL_ISR) { 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 @@ -152,8 +151,9 @@ static void _update_power() { } +/// 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 @@ -174,6 +174,7 @@ static void _next_move() { _request_exec_move(); _end_move(); tick = 0; // Try again in 1ms + st.busy = false; return; } @@ -205,10 +206,6 @@ static void _next_move() { } -/// 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)); -- 2.27.0