From aad10ea1c7c1aac37d83c3d8537b4040f6f0e259 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 30 Mar 2025 14:58:16 +1300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20E=20DIR=20init=20(#27770)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to add72fd045 --- Marlin/src/module/stepper.cpp | 10 +- Marlin/src/module/stepper/indirection.h | 240 +++++++++++++----------- 2 files changed, 137 insertions(+), 113 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 1ec82ba340..a86a33dda3 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2958,11 +2958,19 @@ void Stepper::init() { TERN_(HAS_Z3_DIR, Z3_DIR_INIT()); TERN_(HAS_Z4_DIR, Z4_DIR_INIT()); TERN_(HAS_I_DIR, I_DIR_INIT()); - TERN_(HAS_K_DIR, K_DIR_INIT()); + TERN_(HAS_J_DIR, J_DIR_INIT()); TERN_(HAS_K_DIR, K_DIR_INIT()); TERN_(HAS_U_DIR, U_DIR_INIT()); TERN_(HAS_V_DIR, V_DIR_INIT()); TERN_(HAS_W_DIR, W_DIR_INIT()); + TERN_(HAS_E0_DIR, E0_DIR_INIT()); + TERN_(HAS_E1_DIR, E1_DIR_INIT()); + TERN_(HAS_E2_DIR, E2_DIR_INIT()); + TERN_(HAS_E3_DIR, E3_DIR_INIT()); + TERN_(HAS_E4_DIR, E4_DIR_INIT()); + TERN_(HAS_E5_DIR, E5_DIR_INIT()); + TERN_(HAS_E6_DIR, E6_DIR_INIT()); + TERN_(HAS_E7_DIR, E7_DIR_INIT()); // Init Enable Pins - steppers default to disabled. #if HAS_X_ENABLE diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h index d18fe830cc..e55b8ac45d 100644 --- a/Marlin/src/module/stepper/indirection.h +++ b/Marlin/src/module/stepper/indirection.h @@ -353,140 +353,156 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #endif // E0 Stepper -#ifndef E0_ENABLE_INIT - #define E0_ENABLE_INIT() SET_OUTPUT(E0_ENABLE_PIN) - #define E0_ENABLE_WRITE(STATE) WRITE(E0_ENABLE_PIN,STATE) - #define E0_ENABLE_READ() bool(READ(E0_ENABLE_PIN)) +#if E_STEPPERS > 0 + #ifndef E0_ENABLE_INIT + #define E0_ENABLE_INIT() SET_OUTPUT(E0_ENABLE_PIN) + #define E0_ENABLE_WRITE(STATE) WRITE(E0_ENABLE_PIN,STATE) + #define E0_ENABLE_READ() bool(READ(E0_ENABLE_PIN)) + #endif + #ifndef E0_DIR_INIT + #define E0_DIR_INIT() SET_OUTPUT(E0_DIR_PIN) + #define E0_DIR_WRITE(STATE) WRITE(E0_DIR_PIN,INVERT_DIR(E0, STATE)) + #define E0_DIR_READ() INVERT_DIR(E0, bool(READ(E0_DIR_PIN))) + #endif + #define E0_STEP_INIT() SET_OUTPUT(E0_STEP_PIN) + #ifndef E0_STEP_WRITE + #define E0_STEP_WRITE(STATE) WRITE(E0_STEP_PIN,STATE) + #endif + #define E0_STEP_READ() bool(READ(E0_STEP_PIN)) #endif -#ifndef E0_DIR_INIT - #define E0_DIR_INIT() SET_OUTPUT(E0_DIR_PIN) - #define E0_DIR_WRITE(STATE) WRITE(E0_DIR_PIN,INVERT_DIR(E0, STATE)) - #define E0_DIR_READ() INVERT_DIR(E0, bool(READ(E0_DIR_PIN))) -#endif -#define E0_STEP_INIT() SET_OUTPUT(E0_STEP_PIN) -#ifndef E0_STEP_WRITE - #define E0_STEP_WRITE(STATE) WRITE(E0_STEP_PIN,STATE) -#endif -#define E0_STEP_READ() bool(READ(E0_STEP_PIN)) // E1 Stepper -#ifndef E1_ENABLE_INIT - #define E1_ENABLE_INIT() SET_OUTPUT(E1_ENABLE_PIN) - #define E1_ENABLE_WRITE(STATE) WRITE(E1_ENABLE_PIN,STATE) - #define E1_ENABLE_READ() bool(READ(E1_ENABLE_PIN)) +#if E_STEPPERS > 1 || ENABLED(E_DUAL_STEPPER_DRIVERS) + #ifndef E1_ENABLE_INIT + #define E1_ENABLE_INIT() SET_OUTPUT(E1_ENABLE_PIN) + #define E1_ENABLE_WRITE(STATE) WRITE(E1_ENABLE_PIN,STATE) + #define E1_ENABLE_READ() bool(READ(E1_ENABLE_PIN)) + #endif + #ifndef E1_DIR_INIT + #define E1_DIR_INIT() SET_OUTPUT(E1_DIR_PIN) + #define E1_DIR_WRITE(STATE) WRITE(E1_DIR_PIN,INVERT_DIR(E1, STATE)) + #define E1_DIR_READ() INVERT_DIR(E1, bool(READ(E1_DIR_PIN))) + #endif + #define E1_STEP_INIT() SET_OUTPUT(E1_STEP_PIN) + #ifndef E1_STEP_WRITE + #define E1_STEP_WRITE(STATE) WRITE(E1_STEP_PIN,STATE) + #endif + #define E1_STEP_READ() bool(READ(E1_STEP_PIN)) #endif -#ifndef E1_DIR_INIT - #define E1_DIR_INIT() SET_OUTPUT(E1_DIR_PIN) - #define E1_DIR_WRITE(STATE) WRITE(E1_DIR_PIN,INVERT_DIR(E1, STATE)) - #define E1_DIR_READ() INVERT_DIR(E1, bool(READ(E1_DIR_PIN))) -#endif -#define E1_STEP_INIT() SET_OUTPUT(E1_STEP_PIN) -#ifndef E1_STEP_WRITE - #define E1_STEP_WRITE(STATE) WRITE(E1_STEP_PIN,STATE) -#endif -#define E1_STEP_READ() bool(READ(E1_STEP_PIN)) // E2 Stepper -#ifndef E2_ENABLE_INIT - #define E2_ENABLE_INIT() SET_OUTPUT(E2_ENABLE_PIN) - #define E2_ENABLE_WRITE(STATE) WRITE(E2_ENABLE_PIN,STATE) - #define E2_ENABLE_READ() bool(READ(E2_ENABLE_PIN)) +#if E_STEPPERS > 2 + #ifndef E2_ENABLE_INIT + #define E2_ENABLE_INIT() SET_OUTPUT(E2_ENABLE_PIN) + #define E2_ENABLE_WRITE(STATE) WRITE(E2_ENABLE_PIN,STATE) + #define E2_ENABLE_READ() bool(READ(E2_ENABLE_PIN)) + #endif + #ifndef E2_DIR_INIT + #define E2_DIR_INIT() SET_OUTPUT(E2_DIR_PIN) + #define E2_DIR_WRITE(STATE) WRITE(E2_DIR_PIN,INVERT_DIR(E2, STATE)) + #define E2_DIR_READ() INVERT_DIR(E2, bool(READ(E2_DIR_PIN))) + #endif + #define E2_STEP_INIT() SET_OUTPUT(E2_STEP_PIN) + #ifndef E2_STEP_WRITE + #define E2_STEP_WRITE(STATE) WRITE(E2_STEP_PIN,STATE) + #endif + #define E2_STEP_READ() bool(READ(E2_STEP_PIN)) #endif -#ifndef E2_DIR_INIT - #define E2_DIR_INIT() SET_OUTPUT(E2_DIR_PIN) - #define E2_DIR_WRITE(STATE) WRITE(E2_DIR_PIN,INVERT_DIR(E2, STATE)) - #define E2_DIR_READ() INVERT_DIR(E2, bool(READ(E2_DIR_PIN))) -#endif -#define E2_STEP_INIT() SET_OUTPUT(E2_STEP_PIN) -#ifndef E2_STEP_WRITE - #define E2_STEP_WRITE(STATE) WRITE(E2_STEP_PIN,STATE) -#endif -#define E2_STEP_READ() bool(READ(E2_STEP_PIN)) // E3 Stepper -#ifndef E3_ENABLE_INIT - #define E3_ENABLE_INIT() SET_OUTPUT(E3_ENABLE_PIN) - #define E3_ENABLE_WRITE(STATE) WRITE(E3_ENABLE_PIN,STATE) - #define E3_ENABLE_READ() bool(READ(E3_ENABLE_PIN)) +#if E_STEPPERS > 3 + #ifndef E3_ENABLE_INIT + #define E3_ENABLE_INIT() SET_OUTPUT(E3_ENABLE_PIN) + #define E3_ENABLE_WRITE(STATE) WRITE(E3_ENABLE_PIN,STATE) + #define E3_ENABLE_READ() bool(READ(E3_ENABLE_PIN)) + #endif + #ifndef E3_DIR_INIT + #define E3_DIR_INIT() SET_OUTPUT(E3_DIR_PIN) + #define E3_DIR_WRITE(STATE) WRITE(E3_DIR_PIN,INVERT_DIR(E3, STATE)) + #define E3_DIR_READ() INVERT_DIR(E3, bool(READ(E3_DIR_PIN))) + #endif + #define E3_STEP_INIT() SET_OUTPUT(E3_STEP_PIN) + #ifndef E3_STEP_WRITE + #define E3_STEP_WRITE(STATE) WRITE(E3_STEP_PIN,STATE) + #endif + #define E3_STEP_READ() bool(READ(E3_STEP_PIN)) #endif -#ifndef E3_DIR_INIT - #define E3_DIR_INIT() SET_OUTPUT(E3_DIR_PIN) - #define E3_DIR_WRITE(STATE) WRITE(E3_DIR_PIN,INVERT_DIR(E3, STATE)) - #define E3_DIR_READ() INVERT_DIR(E3, bool(READ(E3_DIR_PIN))) -#endif -#define E3_STEP_INIT() SET_OUTPUT(E3_STEP_PIN) -#ifndef E3_STEP_WRITE - #define E3_STEP_WRITE(STATE) WRITE(E3_STEP_PIN,STATE) -#endif -#define E3_STEP_READ() bool(READ(E3_STEP_PIN)) // E4 Stepper -#ifndef E4_ENABLE_INIT - #define E4_ENABLE_INIT() SET_OUTPUT(E4_ENABLE_PIN) - #define E4_ENABLE_WRITE(STATE) WRITE(E4_ENABLE_PIN,STATE) - #define E4_ENABLE_READ() bool(READ(E4_ENABLE_PIN)) +#if E_STEPPERS > 4 + #ifndef E4_ENABLE_INIT + #define E4_ENABLE_INIT() SET_OUTPUT(E4_ENABLE_PIN) + #define E4_ENABLE_WRITE(STATE) WRITE(E4_ENABLE_PIN,STATE) + #define E4_ENABLE_READ() bool(READ(E4_ENABLE_PIN)) + #endif + #ifndef E4_DIR_INIT + #define E4_DIR_INIT() SET_OUTPUT(E4_DIR_PIN) + #define E4_DIR_WRITE(STATE) WRITE(E4_DIR_PIN,INVERT_DIR(E4, STATE)) + #define E4_DIR_READ() INVERT_DIR(E4, bool(READ(E4_DIR_PIN))) + #endif + #define E4_STEP_INIT() SET_OUTPUT(E4_STEP_PIN) + #ifndef E4_STEP_WRITE + #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE) + #endif + #define E4_STEP_READ() bool(READ(E4_STEP_PIN)) #endif -#ifndef E4_DIR_INIT - #define E4_DIR_INIT() SET_OUTPUT(E4_DIR_PIN) - #define E4_DIR_WRITE(STATE) WRITE(E4_DIR_PIN,INVERT_DIR(E4, STATE)) - #define E4_DIR_READ() INVERT_DIR(E4, bool(READ(E4_DIR_PIN))) -#endif -#define E4_STEP_INIT() SET_OUTPUT(E4_STEP_PIN) -#ifndef E4_STEP_WRITE - #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE) -#endif -#define E4_STEP_READ() bool(READ(E4_STEP_PIN)) // E5 Stepper -#ifndef E5_ENABLE_INIT - #define E5_ENABLE_INIT() SET_OUTPUT(E5_ENABLE_PIN) - #define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE) - #define E5_ENABLE_READ() bool(READ(E5_ENABLE_PIN)) +#if E_STEPPERS > 5 + #ifndef E5_ENABLE_INIT + #define E5_ENABLE_INIT() SET_OUTPUT(E5_ENABLE_PIN) + #define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE) + #define E5_ENABLE_READ() bool(READ(E5_ENABLE_PIN)) + #endif + #ifndef E5_DIR_INIT + #define E5_DIR_INIT() SET_OUTPUT(E5_DIR_PIN) + #define E5_DIR_WRITE(STATE) WRITE(E5_DIR_PIN,INVERT_DIR(E5, STATE)) + #define E5_DIR_READ() INVERT_DIR(E5, bool(READ(E5_DIR_PIN))) + #endif + #define E5_STEP_INIT() SET_OUTPUT(E5_STEP_PIN) + #ifndef E5_STEP_WRITE + #define E5_STEP_WRITE(STATE) WRITE(E5_STEP_PIN,STATE) + #endif + #define E5_STEP_READ() bool(READ(E5_STEP_PIN)) #endif -#ifndef E5_DIR_INIT - #define E5_DIR_INIT() SET_OUTPUT(E5_DIR_PIN) - #define E5_DIR_WRITE(STATE) WRITE(E5_DIR_PIN,INVERT_DIR(E5, STATE)) - #define E5_DIR_READ() INVERT_DIR(E5, bool(READ(E5_DIR_PIN))) -#endif -#define E5_STEP_INIT() SET_OUTPUT(E5_STEP_PIN) -#ifndef E5_STEP_WRITE - #define E5_STEP_WRITE(STATE) WRITE(E5_STEP_PIN,STATE) -#endif -#define E5_STEP_READ() bool(READ(E5_STEP_PIN)) // E6 Stepper -#ifndef E6_ENABLE_INIT - #define E6_ENABLE_INIT() SET_OUTPUT(E6_ENABLE_PIN) - #define E6_ENABLE_WRITE(STATE) WRITE(E6_ENABLE_PIN,STATE) - #define E6_ENABLE_READ() bool(READ(E6_ENABLE_PIN)) +#if E_STEPPERS > 6 + #ifndef E6_ENABLE_INIT + #define E6_ENABLE_INIT() SET_OUTPUT(E6_ENABLE_PIN) + #define E6_ENABLE_WRITE(STATE) WRITE(E6_ENABLE_PIN,STATE) + #define E6_ENABLE_READ() bool(READ(E6_ENABLE_PIN)) + #endif + #ifndef E6_DIR_INIT + #define E6_DIR_INIT() SET_OUTPUT(E6_DIR_PIN) + #define E6_DIR_WRITE(STATE) WRITE(E6_DIR_PIN,INVERT_DIR(E6, STATE)) + #define E6_DIR_READ() INVERT_DIR(E6, bool(READ(E6_DIR_PIN))) + #endif + #define E6_STEP_INIT() SET_OUTPUT(E6_STEP_PIN) + #ifndef E6_STEP_WRITE + #define E6_STEP_WRITE(STATE) WRITE(E6_STEP_PIN,STATE) + #endif + #define E6_STEP_READ() bool(READ(E6_STEP_PIN)) #endif -#ifndef E6_DIR_INIT - #define E6_DIR_INIT() SET_OUTPUT(E6_DIR_PIN) - #define E6_DIR_WRITE(STATE) WRITE(E6_DIR_PIN,INVERT_DIR(E6, STATE)) - #define E6_DIR_READ() INVERT_DIR(E6, bool(READ(E6_DIR_PIN))) -#endif -#define E6_STEP_INIT() SET_OUTPUT(E6_STEP_PIN) -#ifndef E6_STEP_WRITE - #define E6_STEP_WRITE(STATE) WRITE(E6_STEP_PIN,STATE) -#endif -#define E6_STEP_READ() bool(READ(E6_STEP_PIN)) // E7 Stepper -#ifndef E7_ENABLE_INIT - #define E7_ENABLE_INIT() SET_OUTPUT(E7_ENABLE_PIN) - #define E7_ENABLE_WRITE(STATE) WRITE(E7_ENABLE_PIN,STATE) - #define E7_ENABLE_READ() bool(READ(E7_ENABLE_PIN)) +#if E_STEPPERS > 7 + #ifndef E7_ENABLE_INIT + #define E7_ENABLE_INIT() SET_OUTPUT(E7_ENABLE_PIN) + #define E7_ENABLE_WRITE(STATE) WRITE(E7_ENABLE_PIN,STATE) + #define E7_ENABLE_READ() bool(READ(E7_ENABLE_PIN)) + #endif + #ifndef E7_DIR_INIT + #define E7_DIR_INIT() SET_OUTPUT(E7_DIR_PIN) + #define E7_DIR_WRITE(STATE) WRITE(E7_DIR_PIN,INVERT_DIR(E7, STATE)) + #define E7_DIR_READ() INVERT_DIR(E7, bool(READ(E7_DIR_PIN))) + #endif + #define E7_STEP_INIT() SET_OUTPUT(E7_STEP_PIN) + #ifndef E7_STEP_WRITE + #define E7_STEP_WRITE(STATE) WRITE(E7_STEP_PIN,STATE) + #endif + #define E7_STEP_READ() bool(READ(E7_STEP_PIN)) #endif -#ifndef E7_DIR_INIT - #define E7_DIR_INIT() SET_OUTPUT(E7_DIR_PIN) - #define E7_DIR_WRITE(STATE) WRITE(E7_DIR_PIN,INVERT_DIR(E7, STATE)) - #define E7_DIR_READ() INVERT_DIR(E7, bool(READ(E7_DIR_PIN))) -#endif -#define E7_STEP_INIT() SET_OUTPUT(E7_STEP_PIN) -#ifndef E7_STEP_WRITE - #define E7_STEP_WRITE(STATE) WRITE(E7_STEP_PIN,STATE) -#endif -#define E7_STEP_READ() bool(READ(E7_STEP_PIN)) /** * Extruder indirection for the single E axis