From 92dbeebf40ab7c3529b034fd44bb23694f4591b0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 23 Dec 2016 18:43:23 -0800 Subject: [PATCH] Define ADV_NEVER, ADV_RATE --- Marlin/stepper.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index d07d62044..932b1e9ca 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -91,9 +91,11 @@ volatile uint32_t Stepper::step_events_completed = 0; // The number of step even #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE) + constexpr uint16_t ADV_NEVER = 65535; + uint16_t Stepper::nextMainISR = 0, - Stepper::nextAdvanceISR = 65535, - Stepper::eISR_Rate = 65535; + Stepper::nextAdvanceISR = ADV_NEVER, + Stepper::eISR_Rate = ADV_NEVER; #if ENABLED(LIN_ADVANCE) volatile int Stepper::e_steps[E_STEPPERS]; @@ -107,6 +109,9 @@ volatile uint32_t Stepper::step_events_completed = 0; // The number of step even Stepper::advance_rate, Stepper::advance; #endif + + #define ADV_RATE(T, L) (e_steps[TOOL_E_INDEX] ? (T) * (L) / abs(e_steps[TOOL_E_INDEX]) : ADV_NEVER) + #endif long Stepper::acceleration_time, Stepper::deceleration_time; @@ -632,7 +637,7 @@ void Stepper::isr() { #endif // ADVANCE or LIN_ADVANCE #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE) - eISR_Rate = !e_steps[TOOL_E_INDEX] ? 65535 : timer * step_loops / abs(e_steps[TOOL_E_INDEX]); + eISR_Rate = ADV_RATE(timer, step_loops); #endif } else if (step_events_completed > (uint32_t)current_block->decelerate_after) { @@ -683,7 +688,7 @@ void Stepper::isr() { #endif // ADVANCE or LIN_ADVANCE #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE) - eISR_Rate = !e_steps[TOOL_E_INDEX] ? 65535 : timer * step_loops / abs(e_steps[TOOL_E_INDEX]); + eISR_Rate = ADV_RATE(timer, step_loops); #endif } else { @@ -693,7 +698,7 @@ void Stepper::isr() { if (current_block->use_advance_lead) current_estep_rate[TOOL_E_INDEX] = final_estep_rate; - eISR_Rate = !e_steps[TOOL_E_INDEX] ? 65535 : OCR1A_nominal * step_loops_nominal / abs(e_steps[TOOL_E_INDEX]); + eISR_Rate = ADV_RATE(OCR1A_nominal, step_loops_nominal); #endif @@ -812,7 +817,7 @@ void Stepper::isr() { // The next main ISR comes first OCR1A = nextMainISR; // New interval for the next advance ISR, if any - if (nextAdvanceISR && nextAdvanceISR != 65535) + if (nextAdvanceISR && nextAdvanceISR != ADV_NEVER) nextAdvanceISR -= nextMainISR; // Will call Stepper::isr on the next interrupt nextMainISR = 0;