|
@@ -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
|
}
|