Browse Source

Merge pull request #3121 from thinkyhead/rc_stepper_cleanup

Reduce code in stepper.cpp with some macros
Scott Lahteine 8 years ago
parent
commit
70a41a8532
1 changed files with 41 additions and 89 deletions
  1. 41
    89
      Marlin/stepper.cpp

+ 41
- 89
Marlin/stepper.cpp View File

@@ -286,17 +286,15 @@ void checkHitEndstops() {
286 286
   }
287 287
 }
288 288
 
289
-#if ENABLED(COREXY) || ENABLED(COREXZ)
290
-  #if ENABLED(COREXY)
291
-    #define CORE_AXIS_2 B_AXIS
292
-  #else
293
-    #define CORE_AXIS_2 C_AXIS
294
-  #endif
289
+#if ENABLED(COREXY)
290
+  #define CORE_AXIS_2 B_AXIS
291
+#elif ENABLED(COREXZ)
292
+  #define CORE_AXIS_2 C_AXIS
295 293
 #endif
296 294
 
297 295
 void enable_endstops(bool check) { check_endstops = check; }
298 296
 
299
-// Check endstops - called from ISR!
297
+// Check endstops - Called from ISR!
300 298
 inline void update_endstops() {
301 299
 
302 300
   #if ENABLED(Z_DUAL_ENDSTOPS)
@@ -543,32 +541,19 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
543 541
  */
544 542
 void set_stepper_direction() {
545 543
 
546
-  if (TEST(out_bits, X_AXIS)) { // A_AXIS
547
-    X_APPLY_DIR(INVERT_X_DIR, 0);
548
-    count_direction[X_AXIS] = -1;
549
-  }
550
-  else {
551
-    X_APPLY_DIR(!INVERT_X_DIR, 0);
552
-    count_direction[X_AXIS] = 1;
553
-  }
554
-
555
-  if (TEST(out_bits, Y_AXIS)) { // B_AXIS
556
-    Y_APPLY_DIR(INVERT_Y_DIR, 0);
557
-    count_direction[Y_AXIS] = -1;
558
-  }
559
-  else {
560
-    Y_APPLY_DIR(!INVERT_Y_DIR, 0);
561
-    count_direction[Y_AXIS] = 1;
562
-  }
544
+  #define SET_STEP_DIR(AXIS) \
545
+    if (TEST(out_bits, AXIS ##_AXIS)) { \
546
+      AXIS ##_APPLY_DIR(INVERT_## AXIS ##_DIR, false); \
547
+      count_direction[AXIS ##_AXIS] = -1; \
548
+    } \
549
+    else { \
550
+      AXIS ##_APPLY_DIR(!INVERT_## AXIS ##_DIR, false); \
551
+      count_direction[AXIS ##_AXIS] = 1; \
552
+    }
563 553
 
564
-  if (TEST(out_bits, Z_AXIS)) { // C_AXIS
565
-    Z_APPLY_DIR(INVERT_Z_DIR, 0);
566
-    count_direction[Z_AXIS] = -1;
567
-  }
568
-  else {
569
-    Z_APPLY_DIR(!INVERT_Z_DIR, 0);
570
-    count_direction[Z_AXIS] = 1;
571
-  }
554
+  SET_STEP_DIR(X); // A
555
+  SET_STEP_DIR(Y); // B
556
+  SET_STEP_DIR(Z); // C
572 557
 
573 558
   #if DISABLED(ADVANCE)
574 559
     if (TEST(out_bits, E_AXIS)) {
@@ -787,65 +772,32 @@ ISR(TIMER1_COMPA_vect) {
787 772
   ISR(TIMER0_COMPA_vect) {
788 773
     old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
789 774
     OCR0A = old_OCR0A;
790
-    // Set E direction (Depends on E direction + advance)
791
-    for (unsigned char i = 0; i < 4; i++) {
792
-      if (e_steps[0] != 0) {
793
-        E0_STEP_WRITE(INVERT_E_STEP_PIN);
794
-        if (e_steps[0] < 0) {
795
-          E0_DIR_WRITE(INVERT_E0_DIR);
796
-          e_steps[0]++;
797
-          E0_STEP_WRITE(!INVERT_E_STEP_PIN);
798
-        }
799
-        else if (e_steps[0] > 0) {
800
-          E0_DIR_WRITE(!INVERT_E0_DIR);
801
-          e_steps[0]--;
802
-          E0_STEP_WRITE(!INVERT_E_STEP_PIN);
803
-        }
775
+
776
+    #define STEP_E_ONCE(INDEX) \
777
+      if (e_steps[INDEX] != 0) { \
778
+        E## INDEX ##_STEP_WRITE(INVERT_E_STEP_PIN); \
779
+        if (e_steps[INDEX] < 0) { \
780
+          E## INDEX ##_DIR_WRITE(INVERT_E## INDEX ##_DIR); \
781
+          e_steps[INDEX]++; \
782
+        } \
783
+        else if (e_steps[INDEX] > 0) { \
784
+          E## INDEX ##_DIR_WRITE(!INVERT_E## INDEX ##_DIR); \
785
+          e_steps[INDEX]--; \
786
+        } \
787
+        E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); \
804 788
       }
789
+
790
+    // Step all E steppers that have steps, up to 4 steps per interrupt
791
+    for (unsigned char i = 0; i < 4; i++) {
792
+      STEP_E_ONCE(0);
805 793
       #if EXTRUDERS > 1
806
-        if (e_steps[1] != 0) {
807
-          E1_STEP_WRITE(INVERT_E_STEP_PIN);
808
-          if (e_steps[1] < 0) {
809
-            E1_DIR_WRITE(INVERT_E1_DIR);
810
-            e_steps[1]++;
811
-            E1_STEP_WRITE(!INVERT_E_STEP_PIN);
812
-          }
813
-          else if (e_steps[1] > 0) {
814
-            E1_DIR_WRITE(!INVERT_E1_DIR);
815
-            e_steps[1]--;
816
-            E1_STEP_WRITE(!INVERT_E_STEP_PIN);
817
-          }
818
-        }
819
-      #endif
820
-      #if EXTRUDERS > 2
821
-        if (e_steps[2] != 0) {
822
-          E2_STEP_WRITE(INVERT_E_STEP_PIN);
823
-          if (e_steps[2] < 0) {
824
-            E2_DIR_WRITE(INVERT_E2_DIR);
825
-            e_steps[2]++;
826
-            E2_STEP_WRITE(!INVERT_E_STEP_PIN);
827
-          }
828
-          else if (e_steps[2] > 0) {
829
-            E2_DIR_WRITE(!INVERT_E2_DIR);
830
-            e_steps[2]--;
831
-            E2_STEP_WRITE(!INVERT_E_STEP_PIN);
832
-          }
833
-        }
834
-      #endif
835
-      #if EXTRUDERS > 3
836
-        if (e_steps[3] != 0) {
837
-          E3_STEP_WRITE(INVERT_E_STEP_PIN);
838
-          if (e_steps[3] < 0) {
839
-            E3_DIR_WRITE(INVERT_E3_DIR);
840
-            e_steps[3]++;
841
-            E3_STEP_WRITE(!INVERT_E_STEP_PIN);
842
-          }
843
-          else if (e_steps[3] > 0) {
844
-            E3_DIR_WRITE(!INVERT_E3_DIR);
845
-            e_steps[3]--;
846
-            E3_STEP_WRITE(!INVERT_E_STEP_PIN);
847
-          }
848
-        }
794
+        STEP_E_ONCE(1);
795
+        #if EXTRUDERS > 2
796
+          STEP_E_ONCE(2);
797
+          #if EXTRUDERS > 3
798
+            STEP_E_ONCE(3);
799
+          #endif
800
+        #endif
849 801
       #endif
850 802
     }
851 803
   }

Loading…
Cancel
Save