@@ -477,17 +477,20 @@ xyze_int8_t Stepper::count_direction{0};
477
477
#define W_APPLY_STEP (v,Q ) W_STEP_WRITE(v)
478
478
#endif
479
479
480
- #define E0_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (0 ) : REV_E_DIR (0 ); }while (0 )
481
- #define E1_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (1 ) : REV_E_DIR (1 ); }while (0 )
482
- #define E2_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (2 ) : REV_E_DIR (2 ); }while (0 )
483
- #define E3_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (3 ) : REV_E_DIR (3 ); }while (0 )
484
- #define E4_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (4 ) : REV_E_DIR (4 ); }while (0 )
485
- #define E5_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (5 ) : REV_E_DIR (5 ); }while (0 )
486
- #define E6_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (6 ) : REV_E_DIR (6 ); }while (0 )
487
- #define E7_APPLY_DIR (REV ) do { (REV) ? FWD_E_DIR (7 ) : REV_E_DIR (7 ); }while (0 )
488
-
489
- #if DISABLED(MIXING_EXTRUDER)
480
+ // #define E0_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(0) : REV_E_DIR(0); }while(0)
481
+ // #define E1_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(1) : REV_E_DIR(1); }while(0)
482
+ // #define E2_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(2) : REV_E_DIR(2); }while(0)
483
+ // #define E3_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(3) : REV_E_DIR(3); }while(0)
484
+ // #define E4_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(4) : REV_E_DIR(4); }while(0)
485
+ // #define E5_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(5) : REV_E_DIR(5); }while(0)
486
+ // #define E6_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(6) : REV_E_DIR(6); }while(0)
487
+ // #define E7_APPLY_DIR(FWD) do{ (FWD) ? FWD_E_DIR(7) : REV_E_DIR(7); }while(0)
488
+
489
+ #if ENABLED(MIXING_EXTRUDER)
490
+ #define E_APPLY_DIR (FWD,Q ) do { if (FWD) { MIXER_STEPPER_LOOP (j) FWD_E_DIR (j); } else { MIXER_STEPPER_LOOP (j) REV_E_DIR (j); } }while (0 )
491
+ #else
490
492
#define E_APPLY_STEP (v,Q ) E_STEP_WRITE(stepper_extruder, v)
493
+ #define E_APPLY_DIR (FWD,Q ) do { if (FWD) { FWD_E_DIR (stepper_extruder); } else { REV_E_DIR (stepper_extruder); } }while (0 )
491
494
#endif
492
495
493
496
#define CYCLES_TO_NS (CYC ) (1000UL * (CYC) / ((F_CPU) / 1000000 ))
@@ -621,36 +624,15 @@ void Stepper::disable_all_steppers() {
621
624
* COREYZ: Y_AXIS=B_AXIS and Z_AXIS=C_AXIS
622
625
*/
623
626
void Stepper::apply_directions () {
624
-
625
627
DIR_WAIT_BEFORE ();
626
628
627
- NUM_AXIS_CODE (
629
+ LOGICAL_AXIS_CODE (
630
+ SET_STEP_DIR (E),
628
631
SET_STEP_DIR (X), SET_STEP_DIR (Y), SET_STEP_DIR (Z), // ABC
629
632
SET_STEP_DIR (I), SET_STEP_DIR (J), SET_STEP_DIR (K),
630
633
SET_STEP_DIR (U), SET_STEP_DIR (V), SET_STEP_DIR (W)
631
634
);
632
635
633
- #if HAS_EXTRUDERS
634
- // Because this is valid for the whole block we don't know
635
- // what E steppers will step. Likely all. Set all.
636
- if (motor_direction (E_AXIS)) {
637
- #if ENABLED(MIXING_EXTRUDER)
638
- MIXER_STEPPER_LOOP (j) REV_E_DIR (j);
639
- #else
640
- REV_E_DIR (stepper_extruder);
641
- #endif
642
- count_direction.e = -1 ;
643
- }
644
- else {
645
- #if ENABLED(MIXING_EXTRUDER)
646
- MIXER_STEPPER_LOOP (j) FWD_E_DIR (j);
647
- #else
648
- FWD_E_DIR (stepper_extruder);
649
- #endif
650
- count_direction.e = 1 ;
651
- }
652
- #endif // HAS_EXTRUDERS
653
-
654
636
DIR_WAIT_AFTER ();
655
637
}
656
638
@@ -2409,29 +2391,16 @@ hal_timer_t Stepper::block_phase_isr() {
2409
2391
if (la_active) {
2410
2392
const uint32_t la_step_rate = la_advance_steps > current_block->final_adv_steps ? current_block->la_advance_rate : 0 ;
2411
2393
if (la_step_rate != step_rate) {
2412
- const bool reverse_e = la_step_rate > step_rate;
2413
- la_interval = calc_timer_interval ((reverse_e ? la_step_rate - step_rate : step_rate - la_step_rate ) >> current_block->la_scaling );
2394
+ const bool forward_e = la_step_rate <= step_rate;
2395
+ la_interval = calc_timer_interval ((forward_e ? step_rate - la_step_rate : la_step_rate - step_rate ) >> current_block->la_scaling );
2414
2396
2415
- if (reverse_e ! = motor_direction (E_AXIS)) {
2397
+ if (forward_e = = motor_direction (E_AXIS)) {
2416
2398
last_direction_bits.toggle (E_AXIS);
2417
2399
count_direction.e = -count_direction.e ;
2418
2400
2419
2401
DIR_WAIT_BEFORE ();
2420
2402
2421
- if (reverse_e) {
2422
- #if ENABLED(MIXING_EXTRUDER)
2423
- MIXER_STEPPER_LOOP (j) REV_E_DIR (j);
2424
- #else
2425
- REV_E_DIR (stepper_extruder);
2426
- #endif
2427
- }
2428
- else {
2429
- #if ENABLED(MIXING_EXTRUDER)
2430
- MIXER_STEPPER_LOOP (j) FWD_E_DIR (j);
2431
- #else
2432
- FWD_E_DIR (stepper_extruder);
2433
- #endif
2434
- }
2403
+ E_APPLY_DIR (forward_e, false );
2435
2404
2436
2405
DIR_WAIT_AFTER ();
2437
2406
}
@@ -3448,36 +3417,36 @@ void Stepper::report_positions() {
3448
3417
#if HAS_Z_AXIS
3449
3418
// Z is handled differently to update the stepper
3450
3419
// counts (needed by Marlin for bed level probing).
3451
- const bool z_dir = TEST (command, FT_BIT_DIR_Z),
3420
+ const bool z_rev = TEST (command, FT_BIT_DIR_Z),
3452
3421
z_step = TEST (command, FT_BIT_STEP_Z);
3453
3422
#endif
3454
3423
3455
3424
if (applyDir) {
3456
- TERN_ (HAS_X_AXIS, X_DIR_WRITE ( TEST (command, FT_BIT_DIR_X)));
3457
- TERN_ (HAS_Y_AXIS, Y_DIR_WRITE ( TEST (command, FT_BIT_DIR_Y)));
3458
- TERN_ (HAS_Z_AXIS, Z_DIR_WRITE (z_dir ));
3459
- TERN_ (HAS_EXTRUDERS, E0_DIR_WRITE ( TEST (command, FT_BIT_DIR_E)));
3425
+ TERN_ (HAS_X_AXIS, X_APPLY_DIR (! TEST (command, FT_BIT_DIR_X), false ));
3426
+ TERN_ (HAS_Y_AXIS, Y_APPLY_DIR (! TEST (command, FT_BIT_DIR_Y), false ));
3427
+ TERN_ (HAS_Z_AXIS, Z_APPLY_DIR (!z_rev, false ));
3428
+ TERN_ (HAS_EXTRUDERS, E_APPLY_DIR (! TEST (command, FT_BIT_DIR_E), false ));
3460
3429
DIR_WAIT_AFTER ();
3461
3430
}
3462
3431
3463
- TERN_ (HAS_X_AXIS, X_STEP_WRITE (TEST (command, FT_BIT_STEP_X)));
3464
- TERN_ (HAS_Y_AXIS, Y_STEP_WRITE (TEST (command, FT_BIT_STEP_Y)));
3465
- TERN_ (HAS_Z_AXIS, Z_STEP_WRITE (z_step));
3466
- TERN_ (HAS_EXTRUDERS, E0_STEP_WRITE (TEST (command, FT_BIT_STEP_E)));
3432
+ TERN_ (HAS_X_AXIS, X_APPLY_STEP (TEST (command, FT_BIT_STEP_X)));
3433
+ TERN_ (HAS_Y_AXIS, Y_APPLY_STEP (TEST (command, FT_BIT_STEP_Y)));
3434
+ TERN_ (HAS_Z_AXIS, Z_APPLY_STEP (z_step));
3435
+ TERN_ (HAS_EXTRUDERS, E_APPLY_STEP (TEST (command, FT_BIT_STEP_E)));
3467
3436
3468
3437
START_TIMED_PULSE ();
3469
3438
3470
3439
#if HAS_Z_AXIS
3471
3440
// Update step counts
3472
- if (z_step) count_position.z += z_dir ? 1 : - 1 ;
3441
+ if (z_step) count_position.z += z_rev ? - 1 : 1 ;
3473
3442
#endif
3474
3443
3475
3444
AWAIT_HIGH_PULSE ();
3476
3445
3477
- X_STEP_WRITE ( 0 );
3478
- TERN_ (HAS_Y_AXIS, Y_STEP_WRITE ( 0 ));
3479
- TERN_ (HAS_Z_AXIS, Z_STEP_WRITE ( 0 ));
3480
- TERN_ (HAS_EXTRUDERS, E0_STEP_WRITE ( 0 ));
3446
+ TERN_ (HAS_X_AXIS, X_APPLY_STEP ( 0 , false ) );
3447
+ TERN_ (HAS_Y_AXIS, Y_APPLY_STEP ( 0 , false ));
3448
+ TERN_ (HAS_Z_AXIS, Z_APPLY_STEP ( 0 , false ));
3449
+ TERN_ (HAS_EXTRUDERS, E_APPLY_STEP ( 0 , false ));
3481
3450
3482
3451
} // Stepper::fxdTiCtrl_stepper
3483
3452
0 commit comments