|
@@ -1,727 +0,0 @@
|
1
|
|
-/**
|
2
|
|
- * Marlin 3D Printer Firmware
|
3
|
|
- * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
4
|
|
- *
|
5
|
|
- * Based on Sprinter and grbl.
|
6
|
|
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
7
|
|
- *
|
8
|
|
- * This program is free software: you can redistribute it and/or modify
|
9
|
|
- * it under the terms of the GNU General Public License as published by
|
10
|
|
- * the Free Software Foundation, either version 3 of the License, or
|
11
|
|
- * (at your option) any later version.
|
12
|
|
- *
|
13
|
|
- * This program is distributed in the hope that it will be useful,
|
14
|
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
|
- * GNU General Public License for more details.
|
17
|
|
- *
|
18
|
|
- * You should have received a copy of the GNU General Public License
|
19
|
|
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
20
|
|
- *
|
21
|
|
- */
|
22
|
|
-#pragma once
|
23
|
|
-
|
24
|
|
-/**
|
25
|
|
- * stepper_indirection.h
|
26
|
|
- *
|
27
|
|
- * Stepper motor driver indirection to allow some stepper functions to
|
28
|
|
- * be done via SPI/I2c instead of direct pin manipulation.
|
29
|
|
- *
|
30
|
|
- * Copyright (c) 2015 Dominik Wenger
|
31
|
|
- */
|
32
|
|
-
|
33
|
|
-#include "../inc/MarlinConfig.h"
|
34
|
|
-
|
35
|
|
-// TMC26X drivers have STEP/DIR on normal pins, but ENABLE via SPI
|
36
|
|
-#if HAS_DRIVER(TMC26X)
|
37
|
|
- #include <SPI.h>
|
38
|
|
- #if defined(STM32GENERIC) && defined(STM32F7)
|
39
|
|
- #include "../HAL/HAL_STM32_F4_F7/STM32F7/TMC2660.h"
|
40
|
|
- #else
|
41
|
|
- #include <TMC26XStepper.h>
|
42
|
|
- #endif
|
43
|
|
- void tmc26x_init_to_defaults();
|
44
|
|
-#endif
|
45
|
|
-
|
46
|
|
-#if HAS_TRINAMIC
|
47
|
|
- #include <TMCStepper.h>
|
48
|
|
- #include "../feature/tmc_util.h"
|
49
|
|
- #if TMCSTEPPER_VERSION < 0x000405
|
50
|
|
- #error "Update TMCStepper library to 0.4.5 or newer."
|
51
|
|
- #endif
|
52
|
|
-
|
53
|
|
- #define ____TMC_CLASS(MODEL, A, I, E) TMCMarlin<TMC##MODEL##Stepper, A, I, E>
|
54
|
|
- #define ___TMC_CLASS(MODEL, A, I, E) ____TMC_CLASS(MODEL, A, I, E)
|
55
|
|
- #define __TMC_CLASS(MODEL, A, I, E) ___TMC_CLASS(_##MODEL, A, I, E)
|
56
|
|
- #define _TMC_CLASS(MODEL, L, E) __TMC_CLASS(MODEL, L, E)
|
57
|
|
- #define TMC_CLASS(ST, A) _TMC_CLASS(ST##_DRIVER_TYPE, TMC_##ST##_LABEL, A##_AXIS)
|
58
|
|
- #if ENABLED(DISTINCT_E_FACTORS)
|
59
|
|
- #define TMC_CLASS_E(I) TMC_CLASS(E##I, E##I)
|
60
|
|
- #else
|
61
|
|
- #define TMC_CLASS_E(I) TMC_CLASS(E##I, E)
|
62
|
|
- #endif
|
63
|
|
-
|
64
|
|
- typedef struct {
|
65
|
|
- uint8_t toff;
|
66
|
|
- int8_t hend;
|
67
|
|
- uint8_t hstrt;
|
68
|
|
- } chopper_timing_t;
|
69
|
|
-
|
70
|
|
- static constexpr chopper_timing_t chopper_timing = CHOPPER_TIMING;
|
71
|
|
-
|
72
|
|
- #if HAS_TMC220x
|
73
|
|
- void tmc_serial_begin();
|
74
|
|
- #endif
|
75
|
|
-#endif
|
76
|
|
-
|
77
|
|
-// L6470 has STEP on normal pins, but DIR/ENABLE via SPI
|
78
|
|
-#if HAS_DRIVER(L6470)
|
79
|
|
- #include "L6470/L6470_Marlin.h"
|
80
|
|
- #define L6470_WRITE_DIR_COMMAND(STATE,Q) do{ L6470_dir_commands[Q] = (STATE ? dSPIN_STEP_CLOCK_REV : dSPIN_STEP_CLOCK_FWD); }while(0)
|
81
|
|
-#endif
|
82
|
|
-
|
83
|
|
-void restore_stepper_drivers(); // Called by PSU_ON
|
84
|
|
-void reset_stepper_drivers(); // Called by settings.load / settings.reset
|
85
|
|
-
|
86
|
|
-#define AXIS_HAS_SQUARE_WAVE(A) (AXIS_IS_TMC(A) && ENABLED(SQUARE_WAVE_STEPPING))
|
87
|
|
-
|
88
|
|
-// X Stepper
|
89
|
|
-#if AXIS_DRIVER_TYPE_X(L6470)
|
90
|
|
- extern L6470 stepperX;
|
91
|
|
- #define X_ENABLE_INIT NOOP
|
92
|
|
- #define X_ENABLE_WRITE(STATE) NOOP
|
93
|
|
- #define X_ENABLE_READ() (stepperX.getStatus() & STATUS_HIZ)
|
94
|
|
- #define X_DIR_INIT NOOP
|
95
|
|
- #define X_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,X)
|
96
|
|
- #define X_DIR_READ() (stepperX.getStatus() & STATUS_DIR)
|
97
|
|
-#else
|
98
|
|
- #if AXIS_IS_TMC(X)
|
99
|
|
- extern TMC_CLASS(X, X) stepperX;
|
100
|
|
- #endif
|
101
|
|
- #if AXIS_DRIVER_TYPE_X(TMC26X)
|
102
|
|
- extern TMC26XStepper stepperX;
|
103
|
|
- #define X_ENABLE_INIT NOOP
|
104
|
|
- #define X_ENABLE_WRITE(STATE) stepperX.setEnabled(STATE)
|
105
|
|
- #define X_ENABLE_READ() stepperX.isEnabled()
|
106
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X)
|
107
|
|
- #define X_ENABLE_INIT NOOP
|
108
|
|
- #define X_ENABLE_WRITE(STATE) stepperX.toff((STATE)==X_ENABLE_ON ? chopper_timing.toff : 0)
|
109
|
|
- #define X_ENABLE_READ() stepperX.isEnabled()
|
110
|
|
- #else
|
111
|
|
- #define X_ENABLE_INIT SET_OUTPUT(X_ENABLE_PIN)
|
112
|
|
- #define X_ENABLE_WRITE(STATE) WRITE(X_ENABLE_PIN,STATE)
|
113
|
|
- #define X_ENABLE_READ() READ(X_ENABLE_PIN)
|
114
|
|
- #endif
|
115
|
|
- #define X_DIR_INIT SET_OUTPUT(X_DIR_PIN)
|
116
|
|
- #define X_DIR_WRITE(STATE) WRITE(X_DIR_PIN,STATE)
|
117
|
|
- #define X_DIR_READ() READ(X_DIR_PIN)
|
118
|
|
-#endif
|
119
|
|
-#define X_STEP_INIT SET_OUTPUT(X_STEP_PIN)
|
120
|
|
-#if AXIS_HAS_SQUARE_WAVE(X)
|
121
|
|
- #define X_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(X_STEP_PIN); }while(0)
|
122
|
|
-#else
|
123
|
|
- #define X_STEP_WRITE(STATE) WRITE(X_STEP_PIN,STATE)
|
124
|
|
-#endif
|
125
|
|
-#define X_STEP_READ READ(X_STEP_PIN)
|
126
|
|
-
|
127
|
|
-// Y Stepper
|
128
|
|
-#if AXIS_DRIVER_TYPE_Y(L6470)
|
129
|
|
- extern L6470 stepperY;
|
130
|
|
- #define Y_ENABLE_INIT NOOP
|
131
|
|
- #define Y_ENABLE_WRITE(STATE) NOOP
|
132
|
|
- #define Y_ENABLE_READ() (stepperY.getStatus() & STATUS_HIZ)
|
133
|
|
- #define Y_DIR_INIT NOOP
|
134
|
|
- #define Y_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,Y)
|
135
|
|
- #define Y_DIR_READ() (stepperY.getStatus() & STATUS_DIR)
|
136
|
|
-#else
|
137
|
|
- #if AXIS_IS_TMC(Y)
|
138
|
|
- extern TMC_CLASS(Y, Y) stepperY;
|
139
|
|
- #endif
|
140
|
|
- #if AXIS_DRIVER_TYPE_Y(TMC26X)
|
141
|
|
- extern TMC26XStepper stepperY;
|
142
|
|
- #define Y_ENABLE_INIT NOOP
|
143
|
|
- #define Y_ENABLE_WRITE(STATE) stepperY.setEnabled(STATE)
|
144
|
|
- #define Y_ENABLE_READ() stepperY.isEnabled()
|
145
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y)
|
146
|
|
- #define Y_ENABLE_INIT NOOP
|
147
|
|
- #define Y_ENABLE_WRITE(STATE) stepperY.toff((STATE)==Y_ENABLE_ON ? chopper_timing.toff : 0)
|
148
|
|
- #define Y_ENABLE_READ() stepperY.isEnabled()
|
149
|
|
- #else
|
150
|
|
- #define Y_ENABLE_INIT SET_OUTPUT(Y_ENABLE_PIN)
|
151
|
|
- #define Y_ENABLE_WRITE(STATE) WRITE(Y_ENABLE_PIN,STATE)
|
152
|
|
- #define Y_ENABLE_READ() READ(Y_ENABLE_PIN)
|
153
|
|
- #endif
|
154
|
|
- #define Y_DIR_INIT SET_OUTPUT(Y_DIR_PIN)
|
155
|
|
- #define Y_DIR_WRITE(STATE) WRITE(Y_DIR_PIN,STATE)
|
156
|
|
- #define Y_DIR_READ() READ(Y_DIR_PIN)
|
157
|
|
-#endif
|
158
|
|
-#define Y_STEP_INIT SET_OUTPUT(Y_STEP_PIN)
|
159
|
|
-#if AXIS_HAS_SQUARE_WAVE(Y)
|
160
|
|
- #define Y_STEP_WRITE(STATE) do{ if (STATE) TOGGLE(Y_STEP_PIN); }while(0)
|
161
|
|
-#else
|
162
|
|
- #define Y_STEP_WRITE(STATE) WRITE(Y_STEP_PIN,STATE)
|
163
|
|
-#endif
|
164
|
|
-#define Y_STEP_READ READ(Y_STEP_PIN)
|
165
|
|
-
|
166
|
|
-// Z Stepper
|
167
|
|
-#if AXIS_DRIVER_TYPE_Z(L6470)
|
168
|
|
- extern L6470 stepperZ;
|
169
|
|
- #define Z_ENABLE_INIT NOOP
|
170
|
|
- #define Z_ENABLE_WRITE(STATE) NOOP
|
171
|
|
- #define Z_ENABLE_READ() (stepperZ.getStatus() & STATUS_HIZ)
|
172
|
|
- #define Z_DIR_INIT NOOP
|
173
|
|
- #define Z_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,Z)
|
174
|
|
- #define Z_DIR_READ() (stepperZ.getStatus() & STATUS_DIR)
|
175
|
|
-#else
|
176
|
|
- #if AXIS_IS_TMC(Z)
|
177
|
|
- extern TMC_CLASS(Z, Z) stepperZ;
|
178
|
|
- #endif
|
179
|
|
- #if AXIS_DRIVER_TYPE_Z(TMC26X)
|
180
|
|
- extern TMC26XStepper stepperZ;
|
181
|
|
- #define Z_ENABLE_INIT NOOP
|
182
|
|
- #define Z_ENABLE_WRITE(STATE) stepperZ.setEnabled(STATE)
|
183
|
|
- #define Z_ENABLE_READ() stepperZ.isEnabled()
|
184
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z)
|
185
|
|
- #define Z_ENABLE_INIT NOOP
|
186
|
|
- #define Z_ENABLE_WRITE(STATE) stepperZ.toff((STATE)==Z_ENABLE_ON ? chopper_timing.toff : 0)
|
187
|
|
- #define Z_ENABLE_READ() stepperZ.isEnabled()
|
188
|
|
- #else
|
189
|
|
- #define Z_ENABLE_INIT SET_OUTPUT(Z_ENABLE_PIN)
|
190
|
|
- #define Z_ENABLE_WRITE(STATE) WRITE(Z_ENABLE_PIN,STATE)
|
191
|
|
- #define Z_ENABLE_READ() READ(Z_ENABLE_PIN)
|
192
|
|
- #endif
|
193
|
|
- #define Z_DIR_INIT SET_OUTPUT(Z_DIR_PIN)
|
194
|
|
- #define Z_DIR_WRITE(STATE) WRITE(Z_DIR_PIN,STATE)
|
195
|
|
- #define Z_DIR_READ() READ(Z_DIR_PIN)
|
196
|
|
-#endif
|
197
|
|
-#define Z_STEP_INIT SET_OUTPUT(Z_STEP_PIN)
|
198
|
|
-#if AXIS_HAS_SQUARE_WAVE(Z)
|
199
|
|
- #define Z_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(Z_STEP_PIN); }while(0)
|
200
|
|
-#else
|
201
|
|
- #define Z_STEP_WRITE(STATE) WRITE(Z_STEP_PIN,STATE)
|
202
|
|
-#endif
|
203
|
|
-#define Z_STEP_READ READ(Z_STEP_PIN)
|
204
|
|
-
|
205
|
|
-// X2 Stepper
|
206
|
|
-#if HAS_X2_ENABLE
|
207
|
|
- #if AXIS_DRIVER_TYPE_X2(L6470)
|
208
|
|
- extern L6470 stepperX2;
|
209
|
|
- #define X2_ENABLE_INIT NOOP
|
210
|
|
- #define X2_ENABLE_WRITE(STATE) NOOP
|
211
|
|
- #define X2_ENABLE_READ() (stepperX2.getStatus() & STATUS_HIZ)
|
212
|
|
- #define X2_DIR_INIT NOOP
|
213
|
|
- #define X2_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,X2)
|
214
|
|
- #define X2_DIR_READ() (stepperX2.getStatus() & STATUS_DIR)
|
215
|
|
- #else
|
216
|
|
- #if AXIS_IS_TMC(X2)
|
217
|
|
- extern TMC_CLASS(X2, X) stepperX2;
|
218
|
|
- #endif
|
219
|
|
- #if AXIS_DRIVER_TYPE_X2(TMC26X)
|
220
|
|
- extern TMC26XStepper stepperX2;
|
221
|
|
- #define X2_ENABLE_INIT NOOP
|
222
|
|
- #define X2_ENABLE_WRITE(STATE) stepperX2.setEnabled(STATE)
|
223
|
|
- #define X2_ENABLE_READ() stepperX2.isEnabled()
|
224
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X2)
|
225
|
|
- #define X2_ENABLE_INIT NOOP
|
226
|
|
- #define X2_ENABLE_WRITE(STATE) stepperX2.toff((STATE)==X_ENABLE_ON ? chopper_timing.toff : 0)
|
227
|
|
- #define X2_ENABLE_READ() stepperX2.isEnabled()
|
228
|
|
- #else
|
229
|
|
- #define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
|
230
|
|
- #define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
|
231
|
|
- #define X2_ENABLE_READ() READ(X2_ENABLE_PIN)
|
232
|
|
- #endif
|
233
|
|
- #define X2_DIR_INIT SET_OUTPUT(X2_DIR_PIN)
|
234
|
|
- #define X2_DIR_WRITE(STATE) WRITE(X2_DIR_PIN,STATE)
|
235
|
|
- #define X2_DIR_READ() READ(X2_DIR_PIN)
|
236
|
|
- #endif
|
237
|
|
- #define X2_STEP_INIT SET_OUTPUT(X2_STEP_PIN)
|
238
|
|
- #if AXIS_HAS_SQUARE_WAVE(X2)
|
239
|
|
- #define X2_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(X2_STEP_PIN); }while(0)
|
240
|
|
- #else
|
241
|
|
- #define X2_STEP_WRITE(STATE) WRITE(X2_STEP_PIN,STATE)
|
242
|
|
- #endif
|
243
|
|
-
|
244
|
|
- #define X2_STEP_READ READ(X2_STEP_PIN)
|
245
|
|
-#endif
|
246
|
|
-
|
247
|
|
-// Y2 Stepper
|
248
|
|
-#if HAS_Y2_ENABLE
|
249
|
|
- #if AXIS_DRIVER_TYPE_Y2(L6470)
|
250
|
|
- extern L6470 stepperY2;
|
251
|
|
- #define Y2_ENABLE_INIT NOOP
|
252
|
|
- #define Y2_ENABLE_WRITE(STATE) NOOP
|
253
|
|
- #define Y2_ENABLE_READ() (stepperY2.getStatus() & STATUS_HIZ)
|
254
|
|
- #define Y2_DIR_INIT NOOP
|
255
|
|
- #define Y2_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,Y2)
|
256
|
|
- #define Y2_DIR_READ() (stepperY2.getStatus() & STATUS_DIR)
|
257
|
|
- #else
|
258
|
|
- #if AXIS_IS_TMC(Y2)
|
259
|
|
- extern TMC_CLASS(Y2, Y) stepperY2;
|
260
|
|
- #endif
|
261
|
|
- #if AXIS_DRIVER_TYPE_Y2(TMC26X)
|
262
|
|
- extern TMC26XStepper stepperY2;
|
263
|
|
- #define Y2_ENABLE_INIT NOOP
|
264
|
|
- #define Y2_ENABLE_WRITE(STATE) stepperY2.setEnabled(STATE)
|
265
|
|
- #define Y2_ENABLE_READ() stepperY2.isEnabled()
|
266
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y2)
|
267
|
|
- #define Y2_ENABLE_INIT NOOP
|
268
|
|
- #define Y2_ENABLE_WRITE(STATE) stepperY2.toff((STATE)==Y_ENABLE_ON ? chopper_timing.toff : 0)
|
269
|
|
- #define Y2_ENABLE_READ() stepperY2.isEnabled()
|
270
|
|
- #else
|
271
|
|
- #define Y2_ENABLE_INIT SET_OUTPUT(Y2_ENABLE_PIN)
|
272
|
|
- #define Y2_ENABLE_WRITE(STATE) WRITE(Y2_ENABLE_PIN,STATE)
|
273
|
|
- #define Y2_ENABLE_READ() READ(Y2_ENABLE_PIN)
|
274
|
|
- #endif
|
275
|
|
- #define Y2_DIR_INIT SET_OUTPUT(Y2_DIR_PIN)
|
276
|
|
- #define Y2_DIR_WRITE(STATE) WRITE(Y2_DIR_PIN,STATE)
|
277
|
|
- #define Y2_DIR_READ() READ(Y2_DIR_PIN)
|
278
|
|
- #endif
|
279
|
|
- #define Y2_STEP_INIT SET_OUTPUT(Y2_STEP_PIN)
|
280
|
|
- #if AXIS_HAS_SQUARE_WAVE(Y2)
|
281
|
|
- #define Y2_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(Y2_STEP_PIN); }while(0)
|
282
|
|
- #else
|
283
|
|
- #define Y2_STEP_WRITE(STATE) WRITE(Y2_STEP_PIN,STATE)
|
284
|
|
- #endif
|
285
|
|
-
|
286
|
|
- #define Y2_STEP_READ READ(Y2_STEP_PIN)
|
287
|
|
-#else
|
288
|
|
- #define Y2_DIR_WRITE(STATE) NOOP
|
289
|
|
-#endif
|
290
|
|
-
|
291
|
|
-// Z2 Stepper
|
292
|
|
-#if HAS_Z2_ENABLE
|
293
|
|
- #if AXIS_DRIVER_TYPE_Z2(L6470)
|
294
|
|
- extern L6470 stepperZ2;
|
295
|
|
- #define Z2_ENABLE_INIT NOOP
|
296
|
|
- #define Z2_ENABLE_WRITE(STATE) NOOP
|
297
|
|
- #define Z2_ENABLE_READ() (stepperZ2.getStatus() & STATUS_HIZ)
|
298
|
|
- #define Z2_DIR_INIT NOOP
|
299
|
|
- #define Z2_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,Z2)
|
300
|
|
- #define Z2_DIR_READ() (stepperZ2.getStatus() & STATUS_DIR)
|
301
|
|
- #else
|
302
|
|
- #if AXIS_IS_TMC(Z2)
|
303
|
|
- extern TMC_CLASS(Z2, Z) stepperZ2;
|
304
|
|
- #endif
|
305
|
|
- #if AXIS_DRIVER_TYPE_Z2(TMC26X)
|
306
|
|
- extern TMC26XStepper stepperZ2;
|
307
|
|
- #define Z2_ENABLE_INIT NOOP
|
308
|
|
- #define Z2_ENABLE_WRITE(STATE) stepperZ2.setEnabled(STATE)
|
309
|
|
- #define Z2_ENABLE_READ() stepperZ2.isEnabled()
|
310
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2)
|
311
|
|
- #define Z2_ENABLE_INIT NOOP
|
312
|
|
- #define Z2_ENABLE_WRITE(STATE) stepperZ2.toff((STATE)==Z_ENABLE_ON ? chopper_timing.toff : 0)
|
313
|
|
- #define Z2_ENABLE_READ() stepperZ2.isEnabled()
|
314
|
|
- #else
|
315
|
|
- #define Z2_ENABLE_INIT SET_OUTPUT(Z2_ENABLE_PIN)
|
316
|
|
- #define Z2_ENABLE_WRITE(STATE) WRITE(Z2_ENABLE_PIN,STATE)
|
317
|
|
- #define Z2_ENABLE_READ() READ(Z2_ENABLE_PIN)
|
318
|
|
- #endif
|
319
|
|
- #define Z2_DIR_INIT SET_OUTPUT(Z2_DIR_PIN)
|
320
|
|
- #define Z2_DIR_WRITE(STATE) WRITE(Z2_DIR_PIN,STATE)
|
321
|
|
- #define Z2_DIR_READ() READ(Z2_DIR_PIN)
|
322
|
|
- #endif
|
323
|
|
- #define Z2_STEP_INIT SET_OUTPUT(Z2_STEP_PIN)
|
324
|
|
- #if AXIS_HAS_SQUARE_WAVE(Z2)
|
325
|
|
- #define Z2_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(Z2_STEP_PIN); }while(0)
|
326
|
|
- #else
|
327
|
|
- #define Z2_STEP_WRITE(STATE) WRITE(Z2_STEP_PIN,STATE)
|
328
|
|
- #endif
|
329
|
|
-
|
330
|
|
- #define Z2_STEP_READ READ(Z2_STEP_PIN)
|
331
|
|
-#else
|
332
|
|
- #define Z2_DIR_WRITE(STATE) NOOP
|
333
|
|
-#endif
|
334
|
|
-
|
335
|
|
-// Z3 Stepper
|
336
|
|
-#if HAS_Z3_ENABLE
|
337
|
|
- #if AXIS_DRIVER_TYPE_Z3(L6470)
|
338
|
|
- extern L6470 stepperZ3;
|
339
|
|
- #define Z3_ENABLE_INIT NOOP
|
340
|
|
- #define Z3_ENABLE_WRITE(STATE) NOOP
|
341
|
|
- #define Z3_ENABLE_READ() (stepperZ3.getStatus() & STATUS_HIZ)
|
342
|
|
- #define Z3_DIR_INIT NOOP
|
343
|
|
- #define Z3_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,Z3)
|
344
|
|
- #define Z3_DIR_READ() (stepperZ3.getStatus() & STATUS_DIR)
|
345
|
|
- #else
|
346
|
|
- #if AXIS_IS_TMC(Z3)
|
347
|
|
- extern TMC_CLASS(Z3, Z) stepperZ3;
|
348
|
|
- #endif
|
349
|
|
- #if ENABLED(Z3_IS_TMC26X)
|
350
|
|
- extern TMC26XStepper stepperZ3;
|
351
|
|
- #define Z3_ENABLE_INIT NOOP
|
352
|
|
- #define Z3_ENABLE_WRITE(STATE) stepperZ3.setEnabled(STATE)
|
353
|
|
- #define Z3_ENABLE_READ() stepperZ3.isEnabled()
|
354
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z3)
|
355
|
|
- #define Z3_ENABLE_INIT NOOP
|
356
|
|
- #define Z3_ENABLE_WRITE(STATE) stepperZ3.toff((STATE)==Z_ENABLE_ON ? chopper_timing.toff : 0)
|
357
|
|
- #define Z3_ENABLE_READ() stepperZ3.isEnabled()
|
358
|
|
- #else
|
359
|
|
- #define Z3_ENABLE_INIT SET_OUTPUT(Z3_ENABLE_PIN)
|
360
|
|
- #define Z3_ENABLE_WRITE(STATE) WRITE(Z3_ENABLE_PIN,STATE)
|
361
|
|
- #define Z3_ENABLE_READ() READ(Z3_ENABLE_PIN)
|
362
|
|
- #endif
|
363
|
|
- #define Z3_DIR_INIT SET_OUTPUT(Z3_DIR_PIN)
|
364
|
|
- #define Z3_DIR_WRITE(STATE) WRITE(Z3_DIR_PIN,STATE)
|
365
|
|
- #define Z3_DIR_READ() READ(Z3_DIR_PIN)
|
366
|
|
- #endif
|
367
|
|
- #define Z3_STEP_INIT SET_OUTPUT(Z3_STEP_PIN)
|
368
|
|
- #if AXIS_HAS_SQUARE_WAVE(Z3)
|
369
|
|
- #define Z3_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(Z3_STEP_PIN); }while(0)
|
370
|
|
- #else
|
371
|
|
- #define Z3_STEP_WRITE(STATE) WRITE(Z3_STEP_PIN,STATE)
|
372
|
|
- #endif
|
373
|
|
-
|
374
|
|
- #define Z3_STEP_READ READ(Z3_STEP_PIN)
|
375
|
|
-#else
|
376
|
|
- #define Z3_DIR_WRITE(STATE) NOOP
|
377
|
|
-#endif
|
378
|
|
-
|
379
|
|
-// E0 Stepper
|
380
|
|
-#if AXIS_DRIVER_TYPE_E0(L6470)
|
381
|
|
- extern L6470 stepperE0;
|
382
|
|
- #define E0_ENABLE_INIT NOOP
|
383
|
|
- #define E0_ENABLE_WRITE(STATE) NOOP
|
384
|
|
- #define E0_ENABLE_READ() (stepperE0.getStatus() & STATUS_HIZ)
|
385
|
|
- #define E0_DIR_INIT NOOP
|
386
|
|
- #define E0_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E0)
|
387
|
|
- #define E0_DIR_READ() (stepperE0.getStatus() & STATUS_DIR)
|
388
|
|
-#else
|
389
|
|
- #if AXIS_IS_TMC(E0)
|
390
|
|
- extern TMC_CLASS_E(0) stepperE0;
|
391
|
|
- #endif
|
392
|
|
- #if AXIS_DRIVER_TYPE_E0(TMC26X)
|
393
|
|
- extern TMC26XStepper stepperE0;
|
394
|
|
- #define E0_ENABLE_INIT NOOP
|
395
|
|
- #define E0_ENABLE_WRITE(STATE) stepperE0.setEnabled(STATE)
|
396
|
|
- #define E0_ENABLE_READ() stepperE0.isEnabled()
|
397
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0)
|
398
|
|
- #define E0_ENABLE_INIT NOOP
|
399
|
|
- #define E0_ENABLE_WRITE(STATE) stepperE0.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
400
|
|
- #define E0_ENABLE_READ() stepperE0.isEnabled()
|
401
|
|
- #else
|
402
|
|
- #define E0_ENABLE_INIT SET_OUTPUT(E0_ENABLE_PIN)
|
403
|
|
- #define E0_ENABLE_WRITE(STATE) WRITE(E0_ENABLE_PIN,STATE)
|
404
|
|
- #define E0_ENABLE_READ() READ(E0_ENABLE_PIN)
|
405
|
|
- #endif
|
406
|
|
- #define E0_DIR_INIT SET_OUTPUT(E0_DIR_PIN)
|
407
|
|
- #define E0_DIR_WRITE(STATE) WRITE(E0_DIR_PIN,STATE)
|
408
|
|
- #define E0_DIR_READ() READ(E0_DIR_PIN)
|
409
|
|
-#endif
|
410
|
|
-#define E0_STEP_INIT SET_OUTPUT(E0_STEP_PIN)
|
411
|
|
-#if AXIS_HAS_SQUARE_WAVE(E0)
|
412
|
|
- #define E0_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E0_STEP_PIN); }while(0)
|
413
|
|
-#else
|
414
|
|
- #define E0_STEP_WRITE(STATE) WRITE(E0_STEP_PIN,STATE)
|
415
|
|
-#endif
|
416
|
|
-#define E0_STEP_READ READ(E0_STEP_PIN)
|
417
|
|
-
|
418
|
|
-// E1 Stepper
|
419
|
|
-#if AXIS_DRIVER_TYPE_E1(L6470)
|
420
|
|
- extern L6470 stepperE1;
|
421
|
|
- #define E1_ENABLE_INIT NOOP
|
422
|
|
- #define E1_ENABLE_WRITE(STATE) NOOP
|
423
|
|
- #define E1_ENABLE_READ() (stepperE1.getStatus() & STATUS_HIZ)
|
424
|
|
- #define E1_DIR_INIT NOOP
|
425
|
|
- #define E1_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E1)
|
426
|
|
- #define E1_DIR_READ() (stepperE1.getStatus() & STATUS_DIR)
|
427
|
|
-#else
|
428
|
|
- #if AXIS_IS_TMC(E1)
|
429
|
|
- extern TMC_CLASS_E(1) stepperE1;
|
430
|
|
- #endif
|
431
|
|
- #if AXIS_DRIVER_TYPE_E1(TMC26X)
|
432
|
|
- extern TMC26XStepper stepperE1;
|
433
|
|
- #define E1_ENABLE_INIT NOOP
|
434
|
|
- #define E1_ENABLE_WRITE(STATE) stepperE1.setEnabled(STATE)
|
435
|
|
- #define E1_ENABLE_READ() stepperE1.isEnabled()
|
436
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1)
|
437
|
|
- #define E1_ENABLE_INIT NOOP
|
438
|
|
- #define E1_ENABLE_WRITE(STATE) stepperE1.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
439
|
|
- #define E1_ENABLE_READ() stepperE1.isEnabled()
|
440
|
|
- #else
|
441
|
|
- #define E1_ENABLE_INIT SET_OUTPUT(E1_ENABLE_PIN)
|
442
|
|
- #define E1_ENABLE_WRITE(STATE) WRITE(E1_ENABLE_PIN,STATE)
|
443
|
|
- #define E1_ENABLE_READ() READ(E1_ENABLE_PIN)
|
444
|
|
- #endif
|
445
|
|
- #define E1_DIR_INIT SET_OUTPUT(E1_DIR_PIN)
|
446
|
|
- #define E1_DIR_WRITE(STATE) WRITE(E1_DIR_PIN,STATE)
|
447
|
|
- #define E1_DIR_READ() READ(E1_DIR_PIN)
|
448
|
|
-#endif
|
449
|
|
-#define E1_STEP_INIT SET_OUTPUT(E1_STEP_PIN)
|
450
|
|
-#if AXIS_HAS_SQUARE_WAVE(E1)
|
451
|
|
- #define E1_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E1_STEP_PIN); }while(0)
|
452
|
|
-#else
|
453
|
|
- #define E1_STEP_WRITE(STATE) WRITE(E1_STEP_PIN,STATE)
|
454
|
|
-#endif
|
455
|
|
-#define E1_STEP_READ READ(E1_STEP_PIN)
|
456
|
|
-
|
457
|
|
-// E2 Stepper
|
458
|
|
-#if AXIS_DRIVER_TYPE_E2(L6470)
|
459
|
|
- extern L6470 stepperE2;
|
460
|
|
- #define E2_ENABLE_INIT NOOP
|
461
|
|
- #define E2_ENABLE_WRITE(STATE) NOOP
|
462
|
|
- #define E2_ENABLE_READ() (stepperE2.getStatus() & STATUS_HIZ)
|
463
|
|
- #define E2_DIR_INIT NOOP
|
464
|
|
- #define E2_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E2)
|
465
|
|
- #define E2_DIR_READ() (stepperE2.getStatus() & STATUS_DIR)
|
466
|
|
-#else
|
467
|
|
- #if AXIS_IS_TMC(E2)
|
468
|
|
- extern TMC_CLASS_E(2) stepperE2;
|
469
|
|
- #endif
|
470
|
|
- #if AXIS_DRIVER_TYPE_E2(TMC26X)
|
471
|
|
- extern TMC26XStepper stepperE2;
|
472
|
|
- #define E2_ENABLE_INIT NOOP
|
473
|
|
- #define E2_ENABLE_WRITE(STATE) stepperE2.setEnabled(STATE)
|
474
|
|
- #define E2_ENABLE_READ() stepperE2.isEnabled()
|
475
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2)
|
476
|
|
- #define E2_ENABLE_INIT NOOP
|
477
|
|
- #define E2_ENABLE_WRITE(STATE) stepperE2.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
478
|
|
- #define E2_ENABLE_READ() stepperE2.isEnabled()
|
479
|
|
- #else
|
480
|
|
- #define E2_ENABLE_INIT SET_OUTPUT(E2_ENABLE_PIN)
|
481
|
|
- #define E2_ENABLE_WRITE(STATE) WRITE(E2_ENABLE_PIN,STATE)
|
482
|
|
- #define E2_ENABLE_READ() READ(E2_ENABLE_PIN)
|
483
|
|
- #endif
|
484
|
|
- #define E2_DIR_INIT SET_OUTPUT(E2_DIR_PIN)
|
485
|
|
- #define E2_DIR_WRITE(STATE) WRITE(E2_DIR_PIN,STATE)
|
486
|
|
- #define E2_DIR_READ() READ(E2_DIR_PIN)
|
487
|
|
-#endif
|
488
|
|
-#define E2_STEP_INIT SET_OUTPUT(E2_STEP_PIN)
|
489
|
|
-#if AXIS_HAS_SQUARE_WAVE(E2)
|
490
|
|
- #define E2_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E2_STEP_PIN); }while(0)
|
491
|
|
-#else
|
492
|
|
- #define E2_STEP_WRITE(STATE) WRITE(E2_STEP_PIN,STATE)
|
493
|
|
-#endif
|
494
|
|
-#define E2_STEP_READ READ(E2_STEP_PIN)
|
495
|
|
-
|
496
|
|
-// E3 Stepper
|
497
|
|
-#if AXIS_DRIVER_TYPE_E3(L6470)
|
498
|
|
- extern L6470 stepperE3;
|
499
|
|
- #define E3_ENABLE_INIT NOOP
|
500
|
|
- #define E3_ENABLE_WRITE(STATE) NOOP
|
501
|
|
- #define E3_ENABLE_READ() (stepperE3.getStatus() & STATUS_HIZ)
|
502
|
|
- #define E3_DIR_INIT NOOP
|
503
|
|
- #define E3_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E3)
|
504
|
|
- #define E3_DIR_READ() (stepperE3.getStatus() & STATUS_DIR)
|
505
|
|
-#else
|
506
|
|
- #if AXIS_IS_TMC(E3)
|
507
|
|
- extern TMC_CLASS_E(3) stepperE3;
|
508
|
|
- #endif
|
509
|
|
- #if AXIS_DRIVER_TYPE_E3(TMC26X)
|
510
|
|
- extern TMC26XStepper stepperE3;
|
511
|
|
- #define E3_ENABLE_INIT NOOP
|
512
|
|
- #define E3_ENABLE_WRITE(STATE) stepperE3.setEnabled(STATE)
|
513
|
|
- #define E3_ENABLE_READ() stepperE3.isEnabled()
|
514
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3)
|
515
|
|
- #define E3_ENABLE_INIT NOOP
|
516
|
|
- #define E3_ENABLE_WRITE(STATE) stepperE3.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
517
|
|
- #define E3_ENABLE_READ() stepperE3.isEnabled()
|
518
|
|
- #else
|
519
|
|
- #define E3_ENABLE_INIT SET_OUTPUT(E3_ENABLE_PIN)
|
520
|
|
- #define E3_ENABLE_WRITE(STATE) WRITE(E3_ENABLE_PIN,STATE)
|
521
|
|
- #define E3_ENABLE_READ() READ(E3_ENABLE_PIN)
|
522
|
|
- #endif
|
523
|
|
- #define E3_DIR_INIT SET_OUTPUT(E3_DIR_PIN)
|
524
|
|
- #define E3_DIR_WRITE(STATE) WRITE(E3_DIR_PIN,STATE)
|
525
|
|
- #define E3_DIR_READ() READ(E3_DIR_PIN)
|
526
|
|
-#endif
|
527
|
|
-#define E3_STEP_INIT SET_OUTPUT(E3_STEP_PIN)
|
528
|
|
-#if AXIS_HAS_SQUARE_WAVE(E3)
|
529
|
|
- #define E3_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E3_STEP_PIN); }while(0)
|
530
|
|
-#else
|
531
|
|
- #define E3_STEP_WRITE(STATE) WRITE(E3_STEP_PIN,STATE)
|
532
|
|
-#endif
|
533
|
|
-#define E3_STEP_READ READ(E3_STEP_PIN)
|
534
|
|
-
|
535
|
|
-// E4 Stepper
|
536
|
|
-#if AXIS_DRIVER_TYPE_E4(L6470)
|
537
|
|
- extern L6470 stepperE4;
|
538
|
|
- #define E4_ENABLE_INIT NOOP
|
539
|
|
- #define E4_ENABLE_WRITE(STATE) NOOP
|
540
|
|
- #define E4_ENABLE_READ() (stepperE4.getStatus() & STATUS_HIZ)
|
541
|
|
- #define E4_DIR_INIT NOOP
|
542
|
|
- #define E4_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E4)
|
543
|
|
- #define E4_DIR_READ() (stepperE4.getStatus() & STATUS_DIR)
|
544
|
|
-#else
|
545
|
|
- #if AXIS_IS_TMC(E4)
|
546
|
|
- extern TMC_CLASS_E(4) stepperE4;
|
547
|
|
- #endif
|
548
|
|
- #if AXIS_DRIVER_TYPE_E4(TMC26X)
|
549
|
|
- extern TMC26XStepper stepperE4;
|
550
|
|
- #define E4_ENABLE_INIT NOOP
|
551
|
|
- #define E4_ENABLE_WRITE(STATE) stepperE4.setEnabled(STATE)
|
552
|
|
- #define E4_ENABLE_READ() stepperE4.isEnabled()
|
553
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4)
|
554
|
|
- #define E4_ENABLE_INIT NOOP
|
555
|
|
- #define E4_ENABLE_WRITE(STATE) stepperE4.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
556
|
|
- #define E4_ENABLE_READ() stepperE4.isEnabled()
|
557
|
|
- #else
|
558
|
|
- #define E4_ENABLE_INIT SET_OUTPUT(E4_ENABLE_PIN)
|
559
|
|
- #define E4_ENABLE_WRITE(STATE) WRITE(E4_ENABLE_PIN,STATE)
|
560
|
|
- #define E4_ENABLE_READ() READ(E4_ENABLE_PIN)
|
561
|
|
- #endif
|
562
|
|
- #define E4_DIR_INIT SET_OUTPUT(E4_DIR_PIN)
|
563
|
|
- #define E4_DIR_WRITE(STATE) WRITE(E4_DIR_PIN,STATE)
|
564
|
|
- #define E4_DIR_READ() READ(E4_DIR_PIN)
|
565
|
|
-#endif
|
566
|
|
-#define E4_STEP_INIT SET_OUTPUT(E4_STEP_PIN)
|
567
|
|
-#if AXIS_HAS_SQUARE_WAVE(E4)
|
568
|
|
- #define E4_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E4_STEP_PIN); }while(0)
|
569
|
|
-#else
|
570
|
|
- #define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE)
|
571
|
|
-#endif
|
572
|
|
-#define E4_STEP_READ READ(E4_STEP_PIN)
|
573
|
|
-
|
574
|
|
-// E5 Stepper
|
575
|
|
-#if AXIS_DRIVER_TYPE_E5(L6470)
|
576
|
|
- extern L6470 stepperE5;
|
577
|
|
- #define E5_ENABLE_INIT NOOP
|
578
|
|
- #define E5_ENABLE_WRITE(STATE) NOOP
|
579
|
|
- #define E5_ENABLE_READ() (stepperE5.getStatus() & STATUS_HIZ)
|
580
|
|
- #define E5_DIR_INIT NOOP
|
581
|
|
- #define E5_DIR_WRITE(STATE) L6470_WRITE_DIR_COMMAND(STATE,E5)
|
582
|
|
- #define E5_DIR_READ() (stepperE5.getStatus() & STATUS_DIR)
|
583
|
|
-#else
|
584
|
|
- #if AXIS_IS_TMC(E5)
|
585
|
|
- extern TMC_CLASS_E(5) stepperE5;
|
586
|
|
- #endif
|
587
|
|
- #if AXIS_DRIVER_TYPE_E5(TMC26X)
|
588
|
|
- extern TMC26XStepper stepperE5;
|
589
|
|
- #define E5_ENABLE_INIT NOOP
|
590
|
|
- #define E5_ENABLE_WRITE(STATE) stepperE5.setEnabled(STATE)
|
591
|
|
- #define E5_ENABLE_READ() stepperE5.isEnabled()
|
592
|
|
- #elif ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5)
|
593
|
|
- #define E5_ENABLE_INIT NOOP
|
594
|
|
- #define E5_ENABLE_WRITE(STATE) stepperE5.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0)
|
595
|
|
- #define E5_ENABLE_READ() stepperE5.isEnabled()
|
596
|
|
- #else
|
597
|
|
- #define E5_ENABLE_INIT SET_OUTPUT(E5_ENABLE_PIN)
|
598
|
|
- #define E5_ENABLE_WRITE(STATE) WRITE(E5_ENABLE_PIN,STATE)
|
599
|
|
- #define E5_ENABLE_READ() READ(E5_ENABLE_PIN)
|
600
|
|
- #endif
|
601
|
|
- #define E5_DIR_INIT SET_OUTPUT(E5_DIR_PIN)
|
602
|
|
- #define E5_DIR_WRITE(STATE) WRITE(E5_DIR_PIN,STATE)
|
603
|
|
- #define E5_DIR_READ() READ(E5_DIR_PIN)
|
604
|
|
-#endif
|
605
|
|
-#define E5_STEP_INIT SET_OUTPUT(E5_STEP_PIN)
|
606
|
|
-#if AXIS_HAS_SQUARE_WAVE(E5)
|
607
|
|
- #define E5_STEP_WRITE(STATE) do{ if(STATE) TOGGLE(E5_STEP_PIN); }while(0)
|
608
|
|
-#else
|
609
|
|
- #define E5_STEP_WRITE(STATE) WRITE(E5_STEP_PIN,STATE)
|
610
|
|
-#endif
|
611
|
|
-#define E5_STEP_READ READ(E5_STEP_PIN)
|
612
|
|
-
|
613
|
|
-/**
|
614
|
|
- * Extruder indirection for the single E axis
|
615
|
|
- */
|
616
|
|
-#if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
|
617
|
|
- #if EXTRUDERS > 5
|
618
|
|
- #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
|
619
|
|
- #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); case 5: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
620
|
|
- #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); case 5: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
621
|
|
- #elif EXTRUDERS > 4
|
622
|
|
- #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else { E2_STEP_WRITE(V); } }while(0)
|
623
|
|
- #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); break; case 4: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
624
|
|
- #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 4: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
625
|
|
- #elif EXTRUDERS > 3
|
626
|
|
- #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
627
|
|
- #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 3: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
628
|
|
- #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); break; case 3: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
629
|
|
- #elif EXTRUDERS > 2
|
630
|
|
- #define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
631
|
|
- #define NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E0_DIR_WRITE( INVERT_E0_DIR); break; case 2: E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
632
|
|
- #define REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 2: E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
633
|
|
- #else
|
634
|
|
- #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
|
635
|
|
- #define NORM_E_DIR(E) do{ E0_DIR_WRITE(E ? INVERT_E0_DIR : !INVERT_E0_DIR); }while(0)
|
636
|
|
- #define REV_E_DIR(E) do{ E0_DIR_WRITE(E ? !INVERT_E0_DIR : INVERT_E0_DIR); }while(0)
|
637
|
|
- #endif
|
638
|
|
-#elif ENABLED(PRUSA_MMU2)
|
639
|
|
- #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
|
640
|
|
- #define NORM_E_DIR(E) E0_DIR_WRITE(!INVERT_E0_DIR)
|
641
|
|
- #define REV_E_DIR(E) E0_DIR_WRITE( INVERT_E0_DIR)
|
642
|
|
-
|
643
|
|
-#elif ENABLED(MK2_MULTIPLEXER) // One multiplexed stepper driver, reversed on odd index
|
644
|
|
- #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
|
645
|
|
- #define NORM_E_DIR(E) do{ E0_DIR_WRITE(TEST(E, 0) ? !INVERT_E0_DIR: INVERT_E0_DIR); }while(0)
|
646
|
|
- #define REV_E_DIR(E) do{ E0_DIR_WRITE(TEST(E, 0) ? INVERT_E0_DIR: !INVERT_E0_DIR); }while(0)
|
647
|
|
-
|
648
|
|
-#elif E_STEPPERS > 1
|
649
|
|
-
|
650
|
|
- #if E_STEPPERS > 5
|
651
|
|
- #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); case 5: E5_STEP_WRITE(V); } }while(0)
|
652
|
|
- #define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); case 5: E5_DIR_WRITE(!INVERT_E5_DIR); } }while(0)
|
653
|
|
- #define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); case 5: E5_DIR_WRITE( INVERT_E5_DIR); } }while(0)
|
654
|
|
- #elif E_STEPPERS > 4
|
655
|
|
- #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); break; case 4: E4_STEP_WRITE(V); } }while(0)
|
656
|
|
- #define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); break; case 4: E4_DIR_WRITE(!INVERT_E4_DIR); } }while(0)
|
657
|
|
- #define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); break; case 4: E4_DIR_WRITE( INVERT_E4_DIR); } }while(0)
|
658
|
|
- #elif E_STEPPERS > 3
|
659
|
|
- #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); break; case 3: E3_STEP_WRITE(V); } }while(0)
|
660
|
|
- #define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); break; case 3: E3_DIR_WRITE(!INVERT_E3_DIR); } }while(0)
|
661
|
|
- #define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); break; case 3: E3_DIR_WRITE( INVERT_E3_DIR); } }while(0)
|
662
|
|
- #elif E_STEPPERS > 2
|
663
|
|
- #define _E_STEP_WRITE(E,V) do{ switch (E) { case 0: E0_STEP_WRITE(V); break; case 1: E1_STEP_WRITE(V); break; case 2: E2_STEP_WRITE(V); } }while(0)
|
664
|
|
- #define _NORM_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } }while(0)
|
665
|
|
- #define _REV_E_DIR(E) do{ switch (E) { case 0: E0_DIR_WRITE( INVERT_E0_DIR); break; case 1: E1_DIR_WRITE( INVERT_E1_DIR); break; case 2: E2_DIR_WRITE( INVERT_E2_DIR); } }while(0)
|
666
|
|
- #else
|
667
|
|
- #define _E_STEP_WRITE(E,V) do{ if (E == 0) { E0_STEP_WRITE(V); } else { E1_STEP_WRITE(V); } }while(0)
|
668
|
|
- #define _NORM_E_DIR(E) do{ if (E == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
|
669
|
|
- #define _REV_E_DIR(E) do{ if (E == 0) { E0_DIR_WRITE( INVERT_E0_DIR); } else { E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
|
670
|
|
- #endif
|
671
|
|
-
|
672
|
|
- #if HAS_DUPLICATION_MODE
|
673
|
|
-
|
674
|
|
- #if ENABLED(MULTI_NOZZLE_DUPLICATION)
|
675
|
|
- #define _DUPE(N,T,V) do{ if (TEST(duplication_e_mask, N)) E##N##_##T##_WRITE(V); }while(0)
|
676
|
|
- #else
|
677
|
|
- #define _DUPE(N,T,V) E##N##_##T##_WRITE(V)
|
678
|
|
- #endif
|
679
|
|
-
|
680
|
|
- #define NDIR(N) _DUPE(N,DIR,!INVERT_E##N##_DIR)
|
681
|
|
- #define RDIR(N) _DUPE(N,DIR, INVERT_E##N##_DIR)
|
682
|
|
-
|
683
|
|
- #define E_STEP_WRITE(E,V) do{ if (extruder_duplication_enabled) { DUPE(STEP,V); } else _E_STEP_WRITE(E,V); }while(0)
|
684
|
|
-
|
685
|
|
- #if E_STEPPERS > 2
|
686
|
|
- #if E_STEPPERS > 5
|
687
|
|
- #define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); _DUPE(5,T,V); }while(0)
|
688
|
|
- #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); NDIR(5); } else _NORM_E_DIR(E); }while(0)
|
689
|
|
- #define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); RDIR(5); } else _REV_E_DIR(E); }while(0)
|
690
|
|
- #elif E_STEPPERS > 4
|
691
|
|
- #define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); _DUPE(4,T,V); }while(0)
|
692
|
|
- #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); NDIR(4); } else _NORM_E_DIR(E); }while(0)
|
693
|
|
- #define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); RDIR(4); } else _REV_E_DIR(E); }while(0)
|
694
|
|
- #elif E_STEPPERS > 3
|
695
|
|
- #define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); _DUPE(3,T,V); }while(0)
|
696
|
|
- #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); NDIR(3); } else _NORM_E_DIR(E); }while(0)
|
697
|
|
- #define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); RDIR(3); } else _REV_E_DIR(E); }while(0)
|
698
|
|
- #else
|
699
|
|
- #define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); _DUPE(2,T,V); }while(0)
|
700
|
|
- #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); NDIR(2); } else _NORM_E_DIR(E); }while(0)
|
701
|
|
- #define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); RDIR(2); } else _REV_E_DIR(E); }while(0)
|
702
|
|
- #endif
|
703
|
|
- #else
|
704
|
|
- #define DUPE(T,V) do{ _DUPE(0,T,V); _DUPE(1,T,V); }while(0)
|
705
|
|
- #define NORM_E_DIR(E) do{ if (extruder_duplication_enabled) { NDIR(0); NDIR(1); } else _NORM_E_DIR(E); }while(0)
|
706
|
|
- #define REV_E_DIR(E) do{ if (extruder_duplication_enabled) { RDIR(0); RDIR(1); } else _REV_E_DIR(E); }while(0)
|
707
|
|
- #endif
|
708
|
|
-
|
709
|
|
- #else
|
710
|
|
-
|
711
|
|
- #define E_STEP_WRITE(E,V) _E_STEP_WRITE(E,V)
|
712
|
|
- #define NORM_E_DIR(E) _NORM_E_DIR(E)
|
713
|
|
- #define REV_E_DIR(E) _REV_E_DIR(E)
|
714
|
|
-
|
715
|
|
- #endif
|
716
|
|
-
|
717
|
|
-#elif E_STEPPERS
|
718
|
|
- #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
|
719
|
|
- #define NORM_E_DIR(E) E0_DIR_WRITE(!INVERT_E0_DIR)
|
720
|
|
- #define REV_E_DIR(E) E0_DIR_WRITE( INVERT_E0_DIR)
|
721
|
|
-
|
722
|
|
-#else
|
723
|
|
- #define E_STEP_WRITE(E,V) NOOP
|
724
|
|
- #define NORM_E_DIR(E) NOOP
|
725
|
|
- #define REV_E_DIR(E) NOOP
|
726
|
|
-
|
727
|
|
-#endif
|