Merge pull request #3121 from thinkyhead/rc_stepper_cleanup

Reduce code in stepper.cpp with some macros
2.0.x
Scott Lahteine 9 years ago
commit 70a41a8532

@ -286,17 +286,15 @@ void checkHitEndstops() {
} }
} }
#if ENABLED(COREXY) || ENABLED(COREXZ) #if ENABLED(COREXY)
#if ENABLED(COREXY)
#define CORE_AXIS_2 B_AXIS #define CORE_AXIS_2 B_AXIS
#else #elif ENABLED(COREXZ)
#define CORE_AXIS_2 C_AXIS #define CORE_AXIS_2 C_AXIS
#endif
#endif #endif
void enable_endstops(bool check) { check_endstops = check; } void enable_endstops(bool check) { check_endstops = check; }
// Check endstops - called from ISR! // Check endstops - Called from ISR!
inline void update_endstops() { inline void update_endstops() {
#if ENABLED(Z_DUAL_ENDSTOPS) #if ENABLED(Z_DUAL_ENDSTOPS)
@ -543,32 +541,19 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
*/ */
void set_stepper_direction() { void set_stepper_direction() {
if (TEST(out_bits, X_AXIS)) { // A_AXIS #define SET_STEP_DIR(AXIS) \
X_APPLY_DIR(INVERT_X_DIR, 0); if (TEST(out_bits, AXIS ##_AXIS)) { \
count_direction[X_AXIS] = -1; AXIS ##_APPLY_DIR(INVERT_## AXIS ##_DIR, false); \
} count_direction[AXIS ##_AXIS] = -1; \
else { } \
X_APPLY_DIR(!INVERT_X_DIR, 0); else { \
count_direction[X_AXIS] = 1; AXIS ##_APPLY_DIR(!INVERT_## AXIS ##_DIR, false); \
} count_direction[AXIS ##_AXIS] = 1; \
if (TEST(out_bits, Y_AXIS)) { // B_AXIS
Y_APPLY_DIR(INVERT_Y_DIR, 0);
count_direction[Y_AXIS] = -1;
}
else {
Y_APPLY_DIR(!INVERT_Y_DIR, 0);
count_direction[Y_AXIS] = 1;
} }
if (TEST(out_bits, Z_AXIS)) { // C_AXIS SET_STEP_DIR(X); // A
Z_APPLY_DIR(INVERT_Z_DIR, 0); SET_STEP_DIR(Y); // B
count_direction[Z_AXIS] = -1; SET_STEP_DIR(Z); // C
}
else {
Z_APPLY_DIR(!INVERT_Z_DIR, 0);
count_direction[Z_AXIS] = 1;
}
#if DISABLED(ADVANCE) #if DISABLED(ADVANCE)
if (TEST(out_bits, E_AXIS)) { if (TEST(out_bits, E_AXIS)) {
@ -787,65 +772,32 @@ ISR(TIMER1_COMPA_vect) {
ISR(TIMER0_COMPA_vect) { ISR(TIMER0_COMPA_vect) {
old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz) old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
OCR0A = old_OCR0A; OCR0A = old_OCR0A;
// Set E direction (Depends on E direction + advance)
for (unsigned char i = 0; i < 4; i++) { #define STEP_E_ONCE(INDEX) \
if (e_steps[0] != 0) { if (e_steps[INDEX] != 0) { \
E0_STEP_WRITE(INVERT_E_STEP_PIN); E## INDEX ##_STEP_WRITE(INVERT_E_STEP_PIN); \
if (e_steps[0] < 0) { if (e_steps[INDEX] < 0) { \
E0_DIR_WRITE(INVERT_E0_DIR); E## INDEX ##_DIR_WRITE(INVERT_E## INDEX ##_DIR); \
e_steps[0]++; e_steps[INDEX]++; \
E0_STEP_WRITE(!INVERT_E_STEP_PIN); } \
} else if (e_steps[INDEX] > 0) { \
else if (e_steps[0] > 0) { E## INDEX ##_DIR_WRITE(!INVERT_E## INDEX ##_DIR); \
E0_DIR_WRITE(!INVERT_E0_DIR); e_steps[INDEX]--; \
e_steps[0]--; } \
E0_STEP_WRITE(!INVERT_E_STEP_PIN); E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); \
}
} }
// Step all E steppers that have steps, up to 4 steps per interrupt
for (unsigned char i = 0; i < 4; i++) {
STEP_E_ONCE(0);
#if EXTRUDERS > 1 #if EXTRUDERS > 1
if (e_steps[1] != 0) { STEP_E_ONCE(1);
E1_STEP_WRITE(INVERT_E_STEP_PIN);
if (e_steps[1] < 0) {
E1_DIR_WRITE(INVERT_E1_DIR);
e_steps[1]++;
E1_STEP_WRITE(!INVERT_E_STEP_PIN);
}
else if (e_steps[1] > 0) {
E1_DIR_WRITE(!INVERT_E1_DIR);
e_steps[1]--;
E1_STEP_WRITE(!INVERT_E_STEP_PIN);
}
}
#endif
#if EXTRUDERS > 2 #if EXTRUDERS > 2
if (e_steps[2] != 0) { STEP_E_ONCE(2);
E2_STEP_WRITE(INVERT_E_STEP_PIN);
if (e_steps[2] < 0) {
E2_DIR_WRITE(INVERT_E2_DIR);
e_steps[2]++;
E2_STEP_WRITE(!INVERT_E_STEP_PIN);
}
else if (e_steps[2] > 0) {
E2_DIR_WRITE(!INVERT_E2_DIR);
e_steps[2]--;
E2_STEP_WRITE(!INVERT_E_STEP_PIN);
}
}
#endif
#if EXTRUDERS > 3 #if EXTRUDERS > 3
if (e_steps[3] != 0) { STEP_E_ONCE(3);
E3_STEP_WRITE(INVERT_E_STEP_PIN); #endif
if (e_steps[3] < 0) { #endif
E3_DIR_WRITE(INVERT_E3_DIR);
e_steps[3]++;
E3_STEP_WRITE(!INVERT_E_STEP_PIN);
}
else if (e_steps[3] > 0) {
E3_DIR_WRITE(!INVERT_E3_DIR);
e_steps[3]--;
E3_STEP_WRITE(!INVERT_E_STEP_PIN);
}
}
#endif #endif
} }
} }

Loading…
Cancel
Save