|  |  | @ -528,33 +528,69 @@ void Stepper::isr() { | 
			
		
	
		
		
			
				
					
					|  |  |  |         _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS),0); \ |  |  |  |         _APPLY_STEP(AXIS)(_INVERT_STEP_PIN(AXIS),0); \ | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /**
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * Estimate the number of cycles that the stepper logic already takes | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * up between the start and stop of the X stepper pulse. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * Currently this uses very modest estimates of around 5 cycles. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * True values may be derived by careful testing. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * Once any delay is added, the cost of the delay code itself | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * may be subtracted from this value to get a more accurate delay. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * Delays under 20 cycles (1.25µs) will be very accurate, using NOPs. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * Longer delays use a loop. The resolution is 8 cycles. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if HAS_X_STEP |  |  |  |     #if HAS_X_STEP | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_1 1 |  |  |  |       #define _CYCLE_APPROX_1 5 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #else |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_1 0 |  |  |  |       #define _CYCLE_APPROX_1 0 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #if ENABLED(X_DUAL_STEPPER_DRIVERS) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_2 _CYCLE_APPROX_1 + 4 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_2 _CYCLE_APPROX_1 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if HAS_Y_STEP |  |  |  |     #if HAS_Y_STEP | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_2 _COUNT_STEPPERS_1 + 1 |  |  |  |       #define _CYCLE_APPROX_3 _CYCLE_APPROX_2 + 5 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_3 _CYCLE_APPROX_2 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #if ENABLED(Y_DUAL_STEPPER_DRIVERS) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_4 _CYCLE_APPROX_3 + 4 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #else |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_2 _COUNT_STEPPERS_1 |  |  |  |       #define _CYCLE_APPROX_4 _CYCLE_APPROX_3 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if HAS_Z_STEP |  |  |  |     #if HAS_Z_STEP | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_3 _COUNT_STEPPERS_2 + 1 |  |  |  |       #define _CYCLE_APPROX_5 _CYCLE_APPROX_4 + 5 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_5 _CYCLE_APPROX_4 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #if ENABLED(Z_DUAL_STEPPER_DRIVERS) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #define _CYCLE_APPROX_6 _CYCLE_APPROX_5 + 4 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #else |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_3 _COUNT_STEPPERS_2 |  |  |  |       #define _CYCLE_APPROX_6 _CYCLE_APPROX_5 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if DISABLED(ADVANCE) && DISABLED(LIN_ADVANCE) |  |  |  |     #if DISABLED(ADVANCE) && DISABLED(LIN_ADVANCE) | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_4 _COUNT_STEPPERS_3 + 1 |  |  |  |       #if ENABLED(MIXING_EXTRUDER) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         #define _CYCLE_APPROX_7 _CYCLE_APPROX_6 + (MIXING_STEPPERS) * 6 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         #define _CYCLE_APPROX_7 _CYCLE_APPROX_6 + 5 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |     #else |  |  |  |     #else | 
			
		
	
		
		
			
				
					
					|  |  |  |       #define _COUNT_STEPPERS_4 _COUNT_STEPPERS_3 |  |  |  |       #define _CYCLE_APPROX_7 _CYCLE_APPROX_6 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #define CYCLES_EATEN_XYZE ((_COUNT_STEPPERS_4) * 5) |  |  |  |     #define CYCLES_EATEN_XYZE _CYCLE_APPROX_7 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #define EXTRA_CYCLES_XYZE (STEP_PULSE_CYCLES - (CYCLES_EATEN_XYZE)) |  |  |  |     #define EXTRA_CYCLES_XYZE (STEP_PULSE_CYCLES - (CYCLES_EATEN_XYZE)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // If a minimum pulse time was specified get the timer 0 value
 |  |  |  |     /**
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     // which increments every 4µs on 16MHz and every 3.2µs on 20MHz.
 |  |  |  |      * If a minimum pulse time was specified get the timer 0 value. | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     // Two or 3 counts of TCNT0 should be a sufficient delay.
 |  |  |  |      * | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * TCNT0 has an 8x prescaler, so it increments every 8 cycles.  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * That's every 0.5µs on 16MHz and every 0.4µs on 20MHz. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 20 counts of TCNT0 -by itself- is a good pulse delay. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 10µs = 160 or 200 cycles. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if EXTRA_CYCLES_XYZE > 20 |  |  |  |     #if EXTRA_CYCLES_XYZE > 20 | 
			
		
	
		
		
			
				
					
					|  |  |  |       uint32_t pulse_start = TCNT0; |  |  |  |       uint32_t pulse_start = TCNT0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
	
		
		
			
				
					|  |  | @ -627,7 +663,7 @@ void Stepper::isr() { | 
			
		
	
		
		
			
				
					
					|  |  |  |       break; |  |  |  |       break; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // For minimum pulse time wait before stopping pulses
 |  |  |  |     // For minimum pulse time wait after stopping pulses also
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #if EXTRA_CYCLES_XYZE > 20 |  |  |  |     #if EXTRA_CYCLES_XYZE > 20 | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (i) while (EXTRA_CYCLES_XYZE > (uint32_t)(TCNT0 - pulse_start) * (INT0_PRESCALER)) { /* nada */ } |  |  |  |       if (i) while (EXTRA_CYCLES_XYZE > (uint32_t)(TCNT0 - pulse_start) * (INT0_PRESCALER)) { /* nada */ } | 
			
		
	
		
		
			
				
					
					|  |  |  |     #elif EXTRA_CYCLES_XYZE > 0 |  |  |  |     #elif EXTRA_CYCLES_XYZE > 0 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |