Fix PWM not stopping at end of program
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Tue, 18 Dec 2018 23:02:12 +0000 (15:02 -0800)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Tue, 18 Dec 2018 23:02:12 +0000 (15:02 -0800)
src/avr/src/spindle.c
src/avr/src/stepper.c

index 48b5801659fa32be5cd14f5bc772664214a5f2e8..693de48bc7ba0a1edbf441aec99c1f0c2214fef1 100644 (file)
@@ -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
index 3f96521e7100e6d7827affb771d95c83c3bb3951..ad277e82e040b813874db2a7ad3ea1f86f0831b7 100644 (file)
@@ -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));