28 #if N_GANGED > N_ABC_MOTORS
29 #error "Axis configuration is not supported!"
33 #define SQUARING_ENABLED
37 #define GANGING_ENABLED
41 #define Z_DOUBLED N_ABC_MOTORS
43 #define Y_DOUBLED N_ABC_MOTORS
45 #define X_DOUBLED N_ABC_MOTORS
48 #if Y_GANGED && !defined(Y_DOUBLED)
49 #define Y_DOUBLED (N_ABC_MOTORS - 1)
50 #elif X_GANGED && !defined(X_DOUBLED)
51 #define X_DOUBLED (N_ABC_MOTORS - 1)
54 #if X_GANGED && !defined(X_DOUBLED)
55 #define X_DOUBLED (N_ABC_MOTORS - 2)
61 #error "A-axis motor is used for ganged X motor"
63 #define X2_STEP_PORT M3_STEP_PORT
64 #define X2_STEP_PIN M3_STEP_PIN
65 #define X2_STEP_BIT (1<<M3_STEP_PIN)
66 #define X2_DIRECTION_PORT M3_DIRECTION_PORT
67 #define X2_DIRECTION_PIN M3_DIRECTION_PIN
68 #define X2_DIRECTION_BIT (1<<M3_DIRECTION_PIN)
71 #define X2_HOME_PORT M3_HOME_PORT
72 #define X2_HOME_PIN M3_HOME_PIN
73 #define X2_HOME_BIT (1<<M3_HOME_PIN)
75 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
76 #error "Auto squared X-axis requires second home pin input"
80 #define X2_LIMIT_PORT M3_LIMIT_PORT
81 #define X2_LIMIT_PIN M3_LIMIT_PIN
82 #define X2_LIMIT_BIT (1<<M3_LIMIT_PIN)
83 #elif X_GANGED_LIM_MAX && !defined(M3_LIMIT_PIN_MAX)
84 #define X_LIMIT_PORT_MAX M3_LIMIT_PORT
85 #define X_LIMIT_PIN_MAX M3_LIMIT_PIN
86 #define X_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN)
89 #error "Auto squared X-axis requires second limit pin input"
91 #ifdef M3_LIMIT_PIN_MAX
92 #define X_LIMIT_PORT_MAX M3_LIMIT_PORT_MAX
93 #define X_LIMIT_PIN_MAX M3_LIMIT_PIN_MAX
94 #define X_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN_MAX)
97 #define X2_ENABLE_PORT M3_ENABLE_PORT
98 #define X2_ENABLE_PIN M3_ENABLE_PIN
99 #define X2_ENABLE_BIT (1<<M3_ENABLE_PIN)
101 #ifdef M3_MOTOR_FAULT_PIN
102 #define X2_MOTOR_FAULT_PORT M3_MOTOR_FAULT_PORT
103 #define X2_MOTOR_FAULT_PIN M3_MOTOR_FAULT_PIN
104 #define X2_MOTOR_FAULT_BIT (1<<M3_MOTOR_FAULT_PIN)
110 #error "B-axis motor is used for ganged X motor"
112 #define X2_STEP_PORT M4_STEP_PORT
113 #define X2_STEP_PIN M4_STEP_PIN
114 #define X2_STEP_BIT (1<<M4_STEP_PIN)
115 #define X2_DIRECTION_PORT M4_DIRECTION_PORT
116 #define X2_DIRECTION_PIN M4_DIRECTION_PIN
117 #define X2_DIRECTION_BIT (1<<M4_DIRECTION_PIN)
120 #define X2_HOME_PORT M4_HOME_PORT
121 #define X2_HOME_PIN M4_HOME_PIN
122 #define X2_HOME_BIT (1<<M4_HOME_PIN)
124 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
125 #error "Auto squared X-axis requires second home pin input"
129 #define X2_LIMIT_PORT M4_LIMIT_PORT
130 #define X2_LIMIT_PIN M4_LIMIT_PIN
131 #define X2_LIMIT_BIT (1<<M4_LIMIT_PIN)
132 #elif X_GANGED_LIM_MAX && !defined(M4_LIMIT_PIN_MAX)
133 #define X_LIMIT_PORT_MAX M4_LIMIT_PORT
134 #define X_LIMIT_PIN_MAX M4_LIMIT_PIN
135 #define X_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN)
138 #error "Auto squared X-axis requires second limit pin input"
140 #ifdef M4_LIMIT_PIN_MAX
141 #define X_LIMIT_PORT_MAX M4_LIMIT_PORT_MAX
142 #define X_LIMIT_PIN_MAX M4_LIMIT_PIN_MAX
143 #define X_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN_MAX)
146 #define X2_ENABLE_PORT M4_ENABLE_PORT
147 #define X2_ENABLE_PIN M4_ENABLE_PIN
148 #define X2_ENABLE_BIT (1<<M4_ENABLE_PIN)
150 #ifdef M4_MOTOR_FAULT_PIN
151 #define X2_MOTOR_FAULT_PORT M4_MOTOR_FAULT_PORT
152 #define X2_MOTOR_FAULT_PIN M4_MOTOR_FAULT_PIN
153 #define X2_MOTOR_FAULT_BIT (1<<M4_MOTOR_FAULT_PIN)
159 #error "C-axis motor is used for ganged X motor"
161 #define X2_STEP_PORT M5_STEP_PORT
162 #define X2_STEP_PIN M5_STEP_PIN
163 #define X2_STEP_BIT (1<<M5_STEP_PIN)
164 #define X2_DIRECTION_PORT M5_DIRECTION_PORT
165 #define X2_DIRECTION_PIN M5_DIRECTION_PIN
166 #define X2_DIRECTION_BIT (1<<M5_DIRECTION_PIN)
169 #define X2_HOME_PORT M5_HOME_PORT
170 #define X2_HOME_PIN M5_HOME_PIN
171 #define X2_HOME_BIT (1<<M5_HOME_PIN)
173 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
174 #error "Auto squared X-axis requires second home pin input"
178 #define X2_LIMIT_PORT M5_LIMIT_PORT
179 #define X2_LIMIT_PIN M5_LIMIT_PIN
180 #define X2_LIMIT_BIT (1<<M5_LIMIT_PIN)
181 #elif X_GANGED_LIM_MAX && !defined(M5_LIMIT_PIN_MAX)
182 #define X_LIMIT_PORT_MAX M5_LIMIT_PORT
183 #define X_LIMIT_PIN_MAX M5_LIMIT_PIN
184 #define X_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN)
187 #error "Auto squared X-axis requires second limit pin input"
189 #ifdef M5_LIMIT_PIN_MAX
190 #define X_LIMIT_PORT_MAX M5_LIMIT_PORT_MAX
191 #define X_LIMIT_PIN_MAX M5_LIMIT_PIN_MAX
192 #define X_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN_MAX)
195 #define X2_ENABLE_PORT M5_ENABLE_PORT
196 #define X2_ENABLE_PIN M5_ENABLE_PIN
197 #define X2_ENABLE_BIT (1<<M5_ENABLE_PIN)
199 #ifdef M5_MOTOR_FAULT_PIN
200 #define X2_MOTOR_FAULT_PORT M5_MOTOR_FAULT_PORT
201 #define X2_MOTOR_FAULT_PIN M5_MOTOR_FAULT_PIN
202 #define X2_MOTOR_FAULT_BIT (1<<M5_MOTOR_FAULT_PIN)
208 #error "U-axis motor is used for ganged X motor"
210 #define X2_STEP_PORT M6_STEP_PORT
211 #define X2_STEP_PIN M6_STEP_PIN
212 #define X2_STEP_BIT (1<<M6_STEP_PIN)
213 #define X2_DIRECTION_PORT M6_DIRECTION_PORT
214 #define X2_DIRECTION_PIN M6_DIRECTION_PIN
215 #define X2_DIRECTION_BIT (1<<M6_DIRECTION_PIN)
218 #define X2_HOME_PORT M6_HOME_PORT
219 #define X2_HOME_PIN M6_HOME_PIN
220 #define X2_HOME_BIT (1<<M6_HOME_PIN)
222 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
223 #error "Auto squared X-axis requires second home pin input"
227 #define X2_LIMIT_PORT M6_LIMIT_PORT
228 #define X2_LIMIT_PIN M6_LIMIT_PIN
229 #define X2_LIMIT_BIT (1<<M6_LIMIT_PIN)
230 #elif X_GANGED_LIM_MAX && !defined(M6_LIMIT_PIN_MAX)
231 #define X_LIMIT_PORT_MAX M6_LIMIT_PORT
232 #define X_LIMIT_PIN_MAX M6_LIMIT_PIN
233 #define X_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN)
236 #error "Auto squared X-axis requires second limit pin input"
238 #ifdef M6_LIMIT_PIN_MAX
239 #define X_LIMIT_PORT_MAX M6_LIMIT_PORT_MAX
240 #define X_LIMIT_PIN_MAX M6_LIMIT_PIN_MAX
241 #define X_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN_MAX)
244 #define X2_ENABLE_PORT M6_ENABLE_PORT
245 #define X2_ENABLE_PIN M6_ENABLE_PIN
246 #define X2_ENABLE_BIT (1<<M6_ENABLE_PIN)
248 #ifdef M6_MOTOR_FAULT_PIN
249 #define X2_MOTOR_FAULT_PORT M6_MOTOR_FAULT_PORT
250 #define X2_MOTOR_FAULT_PIN M6_MOTOR_FAULT_PIN
251 #define X2_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
257 #error "V-axis motor is used for ganged X motor"
259 #define X2_STEP_PORT M7_STEP_PORT
260 #define X2_STEP_PIN M7_STEP_PIN
261 #define X2_STEP_BIT (1<<M7_STEP_PIN)
262 #define X2_DIRECTION_PORT M7_DIRECTION_PORT
263 #define X2_DIRECTION_PIN M7_DIRECTION_PIN
264 #define X2_DIRECTION_BIT (1<<M7_DIRECTION_PIN)
267 #define X2_HOME_PORT M7_HOME_PORT
268 #define X2_HOME_PIN M7_HOME_PIN
269 #define X2_HOME_BIT (1<<M7_HOME_PIN)
271 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
272 #error "Auto squared X-axis requires second home pin input"
276 #define X2_LIMIT_PORT M7_LIMIT_PORT
277 #define X2_LIMIT_PIN M7_LIMIT_PIN
278 #define X2_LIMIT_BIT (1<<M7_LIMIT_PIN)
279 #elif X_GANGED_LIM_MAX && !defined(M7_LIMIT_PIN_MAX)
280 #define X_LIMIT_PORT_MAX M7_LIMIT_PORT
281 #define X_LIMIT_PIN_MAX M7_LIMIT_PIN
282 #define X_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN)
285 #error "Auto squared X-axis requires second limit pin input"
287 #ifdef M7_LIMIT_PIN_MAX
288 #define X_LIMIT_PORT_MAX M7_LIMIT_PORT_MAX
289 #define X_LIMIT_PIN_MAX M7_LIMIT_PIN_MAX
290 #define X_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN_MAX)
293 #define X2_ENABLE_PORT M7_ENABLE_PORT
294 #define X2_ENABLE_PIN M7_ENABLE_PIN
295 #define X2_ENABLE_BIT (1<<M7_ENABLE_PIN)
297 #ifdef M7_MOTOR_FAULT_PIN
298 #define X2_MOTOR_FAULT_PORT M7_MOTOR_FAULT_PORT
299 #define X2_MOTOR_FAULT_PIN M7_MOTOR_FAULT_PIN
300 #define X2_MOTOR_FAULT_BIT (1<<M7_MOTOR_FAULT_PIN)
308 #error "A-axis motor is used for ganged Y motor"
310 #define Y2_STEP_PORT M3_STEP_PORT
311 #define Y2_STEP_PIN M3_STEP_PIN
312 #define Y2_STEP_BIT (1<<M3_STEP_PIN)
313 #define Y2_DIRECTION_PORT M3_DIRECTION_PORT
314 #define Y2_DIRECTION_PIN M3_DIRECTION_PIN
315 #define Y2_DIRECTION_BIT (1<<M3_DIRECTION_PIN)
318 #define Y2_HOME_PORT M3_HOME_PORT
319 #define Y2_HOME_PIN M3_HOME_PIN
320 #define Y2_HOME_BIT (1<<M3_HOME_PIN)
322 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
323 #error "Auto squared Y-axis requires second home pin input"
327 #define Y2_LIMIT_PORT M3_LIMIT_PORT
328 #define Y2_LIMIT_PIN M3_LIMIT_PIN
329 #define Y2_LIMIT_BIT (1<<M3_LIMIT_PIN)
330 #elif Y_GANGED_LIM_MAX && !defined(M3_LIMIT_PIN_MAX)
331 #define Y_LIMIT_PORT_MAX M3_LIMIT_PORT
332 #define Y_LIMIT_PIN_MAX M3_LIMIT_PIN
333 #define Y_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN)
336 #error "Auto squared Y-axis requires second limit pin input"
338 #ifdef M3_LIMIT_PIN_MAX
339 #define Y_LIMIT_PORT_MAX M3_LIMIT_PORT_MAX
340 #define Y_LIMIT_PIN_MAX M3_LIMIT_PIN_MAX
341 #define Y_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN_MAX)
344 #define Y2_ENABLE_PORT M3_ENABLE_PORT
345 #define Y2_ENABLE_PIN M3_ENABLE_PIN
346 #define Y2_ENABLE_BIT (1<<M3_ENABLE_PIN)
348 #ifdef M3_MOTOR_FAULT_PIN
349 #define Y2_MOTOR_FAULT_PORT M3_MOTOR_FAULT_PORT
350 #define Y2_MOTOR_FAULT_PIN M3_MOTOR_FAULT_PIN
351 #define Y2_MOTOR_FAULT_BIT (1<<M3_MOTOR_FAULT_PIN)
357 #error "B-axis motor is used for ganged Y motor"
359 #define Y2_STEP_PORT M4_STEP_PORT
360 #define Y2_STEP_PIN M4_STEP_PIN
361 #define Y2_STEP_BIT (1<<M4_STEP_PIN)
362 #define Y2_DIRECTION_PORT M4_DIRECTION_PORT
363 #define Y2_DIRECTION_PIN M4_DIRECTION_PIN
364 #define Y2_DIRECTION_BIT (1<<M4_DIRECTION_PIN)
367 #define Y2_HOME_PORT M4_HOME_PORT
368 #define Y2_HOME_PIN M4_HOME_PIN
369 #define Y2_HOME_BIT (1<<M4_HOME_PIN)
371 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
372 #error "Auto squared Y-axis requires second home pin input"
376 #define Y2_LIMIT_PORT M4_LIMIT_PORT
377 #define Y2_LIMIT_PIN M4_LIMIT_PIN
378 #define Y2_LIMIT_BIT (1<<M4_LIMIT_PIN)
379 #elif Y_GANGED_LIM_MAX && !defined(M4_LIMIT_PIN_MAX)
380 #define Y_LIMIT_PORT_MAX M4_LIMIT_PORT
381 #define Y_LIMIT_PIN_MAX M4_LIMIT_PIN
382 #define Y_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN)
385 #error "Auto squared Y-axis requires second limit pin input"
387 #ifdef M4_LIMIT_PIN_MAX
388 #define Y_LIMIT_PORT_MAX M4_LIMIT_PORT_MAX
389 #define Y_LIMIT_PIN_MAX M4_LIMIT_PIN_MAX
390 #define Y_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN_MAX)
393 #define Y2_ENABLE_PORT M4_ENABLE_PORT
394 #define Y2_ENABLE_PIN M4_ENABLE_PIN
395 #define Y2_ENABLE_BIT (1<<M4_ENABLE_PIN)
397 #ifdef M4_MOTOR_FAULT_PIN
398 #define Y2_MOTOR_FAULT_PORT M4_MOTOR_FAULT_PORT
399 #define Y2_MOTOR_FAULT_PIN M4_MOTOR_FAULT_PIN
400 #define Y2_MOTOR_FAULT_BIT (1<<M4_MOTOR_FAULT_PIN)
406 #error "C-axis motor is used for ganged Y motor"
408 #define Y2_STEP_PORT M5_STEP_PORT
409 #define Y2_STEP_PIN M5_STEP_PIN
410 #define Y2_STEP_BIT (1<<M5_STEP_PIN)
411 #define Y2_DIRECTION_PORT M5_DIRECTION_PORT
412 #define Y2_DIRECTION_PIN M5_DIRECTION_PIN
413 #define Y2_DIRECTION_BIT (1<<M5_DIRECTION_PIN)
416 #define Y2_HOME_PORT M5_HOME_PORT
417 #define Y2_HOME_PIN M5_HOME_PIN
418 #define Y2_HOME_BIT (1<<M5_HOME_PIN)
420 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
421 #error "Auto squared Y-axis requires second home pin input"
425 #define Y2_LIMIT_PORT M5_LIMIT_PORT
426 #define Y2_LIMIT_PIN M5_LIMIT_PIN
427 #define Y2_LIMIT_BIT (1<<M5_LIMIT_PIN)
428 #elif Y_GANGED_LIM_MAX && !defined(M5_LIMIT_PIN_MAX)
429 #define Y_LIMIT_PORT_MAX M5_LIMIT_PORT
430 #define Y_LIMIT_PIN_MAX M5_LIMIT_PIN
431 #define Y_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN)
434 #error "Auto squared Y-axis requires second limit pin input"
436 #ifdef M5_LIMIT_PIN_MAX
437 #define Y_LIMIT_PORT_MAX M5_LIMIT_PORT_MAX
438 #define Y_LIMIT_PIN_MAX M5_LIMIT_PIN_MAX
439 #define Y_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN_MAX)
442 #define Y2_ENABLE_PORT M5_ENABLE_PORT
443 #define Y2_ENABLE_PIN M5_ENABLE_PIN
444 #define Y2_ENABLE_BIT (1<<M5_ENABLE_PIN)
446 #ifdef M5_MOTOR_FAULT_PIN
447 #define Y2_MOTOR_FAULT_PORT M5_MOTOR_FAULT_PORT
448 #define Y2_MOTOR_FAULT_PIN M5_MOTOR_FAULT_PIN
449 #define Y2_MOTOR_FAULT_BIT (1<<M5_MOTOR_FAULT_PIN)
455 #error "U-axis motor is used for ganged Y motor"
457 #define Y2_STEP_PORT M6_STEP_PORT
458 #define Y2_STEP_PIN M6_STEP_PIN
459 #define Y2_STEP_BIT (1<<M6_STEP_PIN)
460 #define Y2_DIRECTION_PORT M6_DIRECTION_PORT
461 #define Y2_DIRECTION_PIN M6_DIRECTION_PIN
462 #define Y2_DIRECTION_BIT (1<<M6_DIRECTION_PIN)
465 #define Y2_HOME_PORT M6_HOME_PORT
466 #define Y2_HOME_PIN M6_HOME_PIN
467 #define Y2_HOME_BIT (1<<M6_HOME_PIN)
469 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
470 #error "Auto squared Y-axis requires second home pin input"
474 #define Y2_LIMIT_PORT M6_LIMIT_PORT
475 #define Y2_LIMIT_PIN M6_LIMIT_PIN
476 #define Y2_LIMIT_BIT (1<<M6_LIMIT_PIN)
477 #elif Y_GANGED_LIM_MAX && !defined(M6_LIMIT_PIN_MAX)
478 #define Y_LIMIT_PORT_MAX M6_LIMIT_PORT
479 #define Y_LIMIT_PIN_MAX M6_LIMIT_PIN
480 #define Y_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN)
483 #error "Auto squared Y-axis requires second limit pin input"
485 #ifdef M6_LIMIT_PIN_MAX
486 #define Y_LIMIT_PORT_MAX M6_LIMIT_PORT_MAX
487 #define Y_LIMIT_PIN_MAX M6_LIMIT_PIN_MAX
488 #define Y_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN_MAX)
491 #define Y2_ENABLE_PORT M6_ENABLE_PORT
492 #define Y2_ENABLE_PIN M6_ENABLE_PIN
493 #define Y2_ENABLE_BIT (1<<M6_ENABLE_PIN)
495 #ifdef M6_MOTOR_FAULT_PIN
496 #define Y2_MOTOR_FAULT_PORT M6_MOTOR_FAULT_PORT
497 #define Y2_MOTOR_FAULT_PIN M6_MOTOR_FAULT_PIN
498 #define Y2_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
504 #error "V-axis motor is used for ganged Y motor"
506 #define Y2_STEP_PORT M7_STEP_PORT
507 #define Y2_STEP_PIN M7_STEP_PIN
508 #define Y2_STEP_BIT (1<<M7_STEP_PIN)
509 #define Y2_DIRECTION_PORT M7_DIRECTION_PORT
510 #define Y2_DIRECTION_PIN M7_DIRECTION_PIN
511 #define Y2_DIRECTION_BIT (1<<M7_DIRECTION_PIN)
514 #define Y2_HOME_PORT M7_HOME_PORT
515 #define Y2_HOME_PIN M7_HOME_PIN
516 #define Y2_HOME_BIT (1<<M7_HOME_PIN)
518 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
519 #error "Auto squared Y-axis requires second home pin input"
523 #define Y2_LIMIT_PORT M7_LIMIT_PORT
524 #define Y2_LIMIT_PIN M7_LIMIT_PIN
525 #define Y2_LIMIT_BIT (1<<M7_LIMIT_PIN)
526 #elif Y_GANGED_LIM_MAX && !defined(M7_LIMIT_PIN_MAX)
527 #define Y_LIMIT_PORT_MAX M7_LIMIT_PORT
528 #define Y_LIMIT_PIN_MAX M7_LIMIT_PIN
529 #define Y_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN)
532 #error "Auto squared Y-axis requires second limit pin input"
534 #ifdef M7_LIMIT_PIN_MAX
535 #define Y_LIMIT_PORT_MAX M7_LIMIT_PORT_MAX
536 #define Y_LIMIT_PIN_MAX M7_LIMIT_PIN_MAX
537 #define Y_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN_MAX)
540 #define Y2_ENABLE_PORT M7_ENABLE_PORT
541 #define Y2_ENABLE_PIN M7_ENABLE_PIN
542 #define Y2_ENABLE_BIT (1<<M7_ENABLE_PIN)
544 #ifdef M7_MOTOR_FAULT_PIN
545 #define Y2_MOTOR_FAULT_PORT M7_MOTOR_FAULT_PORT
546 #define Y2_MOTOR_FAULT_PIN M7_MOTOR_FAULT_PIN
547 #define Y2_MOTOR_FAULT_BIT (1<<M7_MOTOR_FAULT_PIN)
555 #error "A-axis motor is used for ganged Z motor"
557 #define Z2_STEP_PORT M3_STEP_PORT
558 #define Z2_STEP_PIN M3_STEP_PIN
559 #define Z2_STEP_BIT (1<<M3_STEP_PIN)
560 #define Z2_DIRECTION_PORT M3_DIRECTION_PORT
561 #define Z2_DIRECTION_PIN M3_DIRECTION_PIN
562 #define Z2_DIRECTION_BIT (1<<M3_DIRECTION_PIN)
565 #define Z2_HOME_PORT M3_HOME_PORT
566 #define Z2_HOME_PIN M3_HOME_PIN
567 #define Z2_HOME_BIT (1<<M3_HOME_PIN)
569 #elif Z_AUTO_SQUARE && defined(Y_HOME_PIN)
570 #error "Auto squared Z-axis requires second home pin input"
574 #define Z2_LIMIT_PORT M3_LIMIT_PORT
575 #define Z2_LIMIT_PIN M3_LIMIT_PIN
576 #define Z2_LIMIT_BIT (1<<M3_LIMIT_PIN)
577 #elif Z_GANGED_LIM_MAX && !defined(M3_LIMIT_PIN_MAX)
578 #define Z_LIMIT_PORT_MAX M3_LIMIT_PORT
579 #define Z_LIMIT_PIN_MAX M3_LIMIT_PIN
580 #define Z_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN)
583 #error "Auto squared Z-axis requires second limit pin input"
585 #ifdef M3_LIMIT_PIN_MAX
586 #define Z_LIMIT_PORT_MAX M3_LIMIT_PORT_MAX
587 #define Z_LIMIT_PIN_MAX M3_LIMIT_PIN_MAX
588 #define Z_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN_MAX)
591 #define Z2_ENABLE_PORT M3_ENABLE_PORT
592 #define Z2_ENABLE_PIN M3_ENABLE_PIN
593 #define Z2_ENABLE_BIT (1<<M3_ENABLE_PIN)
595 #ifdef M3_MOTOR_FAULT_PIN
596 #define Z2_MOTOR_FAULT_PORT M3_MOTOR_FAULT_PORT
597 #define Z2_MOTOR_FAULT_PIN M3_MOTOR_FAULT_PIN
598 #define Z2_MOTOR_FAULT_BIT (1<<M3_MOTOR_FAULT_PIN)
604 #error "B-axis motor is used for ganged Z motor"
606 #define Z2_STEP_PORT M4_STEP_PORT
607 #define Z2_STEP_PIN M4_STEP_PIN
608 #define Z2_STEP_BIT (1<<M4_STEP_PIN)
609 #define Z2_DIRECTION_PORT M4_DIRECTION_PORT
610 #define Z2_DIRECTION_PIN M4_DIRECTION_PIN
611 #define Z2_DIRECTION_BIT (1<<M4_DIRECTION_PIN)
614 #define Z2_HOME_PORT M4_HOME_PORT
615 #define Z2_HOME_PIN M4_HOME_PIN
616 #define Z2_HOME_BIT (1<<M4_HOME_PIN)
618 #elif Z_AUTO_SQUARE && defined(Z_HOME_PIN)
619 #error "Auto squared Z-axis requires second home pin input"
623 #define Z2_LIMIT_PORT M4_LIMIT_PORT
624 #define Z2_LIMIT_PIN M4_LIMIT_PIN
625 #define Z2_LIMIT_BIT (1<<M4_LIMIT_PIN)
626 #elif Z_GANGED_LIM_MAX && !defined(M4_LIMIT_PIN_MAX)
627 #define Z_LIMIT_PORT_MAX M4_LIMIT_PORT
628 #define Z_LIMIT_PIN_MAX M4_LIMIT_PIN
629 #define Z_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN)
632 #error "Auto squared Z-axis requires second limit pin input"
634 #ifdef M4_LIMIT_PIN_MAX
635 #define Z_LIMIT_PORT_MAX M4_LIMIT_PORT_MAX
636 #define Z_LIMIT_PIN_MAX M4_LIMIT_PIN_MAX
637 #define Z_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN_MAX)
640 #define Z2_ENABLE_PORT M4_ENABLE_PORT
641 #define Z2_ENABLE_PIN M4_ENABLE_PIN
642 #define Z2_ENABLE_BIT (1<<M4_ENABLE_PIN)
644 #ifdef M4_MOTOR_FAULT_PIN
645 #define Z2_MOTOR_FAULT_PORT M4_MOTOR_FAULT_PORT
646 #define Z2_MOTOR_FAULT_PIN M4_MOTOR_FAULT_PIN
647 #define Z2_MOTOR_FAULT_BIT (1<<M4_MOTOR_FAULT_PIN)
653 #error "C-axis motor is used for ganged Z motor"
655 #define Z2_STEP_PORT M5_STEP_PORT
656 #define Z2_STEP_PIN M5_STEP_PIN
657 #define Z2_STEP_BIT (1<<M5_STEP_PIN)
658 #define Z2_DIRECTION_PORT M5_DIRECTION_PORT
659 #define Z2_DIRECTION_PIN M5_DIRECTION_PIN
660 #define Z2_DIRECTION_BIT (1<<M5_DIRECTION_PIN)
663 #define Z2_HOME_PORT M5_HOME_PORT
664 #define Z2_HOME_PIN M5_HOME_PIN
665 #define Z2_HOME_BIT (1<<M5_HOME_PIN)
667 #elif Z_AUTO_SQUARE && defined(Z_HOME_PIN)
668 #error "Auto squared Z-axis requires second home pin input"
672 #define Z2_LIMIT_PORT M5_LIMIT_PORT
673 #define Z2_LIMIT_PIN M5_LIMIT_PIN
674 #define Z2_LIMIT_BIT (1<<M5_LIMIT_PIN)
675 #elif Z_GANGED_LIM_MAX && !defined(M5_LIMIT_PIN_MAX)
676 #define Z_LIMIT_PORT_MAX M5_LIMIT_PORT
677 #define Z_LIMIT_PIN_MAX M5_LIMIT_PIN
678 #define Z_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN)
681 #error "Auto squared Z-axis requires second limit pin input"
683 #ifdef M5_LIMIT_PIN_MAX
684 #define Z_LIMIT_PORT_MAX M5_LIMIT_PORT_MAX
685 #define Z_LIMIT_PIN_MAX M5_LIMIT_PIN_MAX
686 #define Z_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN_MAX)
689 #define Z2_ENABLE_PORT M5_ENABLE_PORT
690 #define Z2_ENABLE_PIN M5_ENABLE_PIN
691 #define Z2_ENABLE_BIT (1<<M5_ENABLE_PIN)
693 #ifdef M5_MOTOR_FAULT_PIN
694 #define Z2_MOTOR_FAULT_PORT M5_MOTOR_FAULT_PORT
695 #define Z2_MOTOR_FAULT_PIN M5_MOTOR_FAULT_PIN
696 #define Z2_MOTOR_FAULT_BIT (1<<M5_MOTOR_FAULT_PIN)
702 #error "U-axis motor is used for ganged Z motor"
704 #define Z2_STEP_PORT M6_STEP_PORT
705 #define Z2_STEP_PIN M6_STEP_PIN
706 #define Z2_STEP_BIT (1<<M6_STEP_PIN)
707 #define Z2_DIRECTION_PORT M6_DIRECTION_PORT
708 #define Z2_DIRECTION_PIN M6_DIRECTION_PIN
709 #define Z2_DIRECTION_BIT (1<<M6_DIRECTION_PIN)
712 #define Z2_HOME_PORT M6_HOME_PORT
713 #define Z2_HOME_PIN M6_HOME_PIN
714 #define Z2_HOME_BIT (1<<M6_HOME_PIN)
716 #elif Z_AUTO_SQUARE && defined(Z_HOME_PIN)
717 #error "Auto squared Z-axis requires second home pin input"
721 #define Z2_LIMIT_PORT M6_LIMIT_PORT
722 #define Z2_LIMIT_PIN M6_LIMIT_PIN
723 #define Z2_LIMIT_BIT (1<<M6_LIMIT_PIN)
724 #elif Z_GANGED_LIM_MAX && !defined(M6_LIMIT_PIN_MAX)
725 #define Z_LIMIT_PORT_MAX M6_LIMIT_PORT
726 #define Z_LIMIT_PIN_MAX M6_LIMIT_PIN
727 #define Z_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN)
730 #error "Auto squared Z-axis requires second limit pin input"
732 #ifdef M6_LIMIT_PIN_MAX
733 #define Z_LIMIT_PORT_MAX M6_LIMIT_PORT_MAX
734 #define Z_LIMIT_PIN_MAX M6_LIMIT_PIN_MAX
735 #define Z_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN_MAX)
738 #define Z2_ENABLE_PORT M6_ENABLE_PORT
739 #define Z2_ENABLE_PIN M6_ENABLE_PIN
740 #define Z2_ENABLE_BIT (1<<M6_ENABLE_PIN)
742 #ifdef M6_MOTOR_FAULT_PIN
743 #define Z2_MOTOR_FAULT_PORT M6_MOTOR_FAULT_PORT
744 #define Z2_MOTOR_FAULT_PIN M6_MOTOR_FAULT_PIN
745 #define Z2_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
751 #error "V-axis motor is used for ganged Z motor"
753 #define Z2_STEP_PORT M7_STEP_PORT
754 #define Z2_STEP_PIN M7_STEP_PIN
755 #define Z2_STEP_BIT (1<<M7_STEP_PIN)
756 #define Z2_DIRECTION_PORT M7_DIRECTION_PORT
757 #define Z2_DIRECTION_PIN M7_DIRECTION_PIN
758 #define Z2_DIRECTION_BIT (1<<M7_DIRECTION_PIN)
761 #define Z2_HOME_PORT M7_HOME_PORT
762 #define Z2_HOME_PIN M7_HOME_PIN
763 #define Z2_HOME_BIT (1<<M7_HOME_PIN)
765 #elif Z_AUTO_SQUARE && defined(Z_HOME_PIN)
766 #error "Auto squared Z-axis requires second home pin input"
770 #define Z2_LIMIT_PORT M7_LIMIT_PORT
771 #define Z2_LIMIT_PIN M7_LIMIT_PIN
772 #define Z2_LIMIT_BIT (1<<M7_LIMIT_PIN)
773 #elif Z_GANGED_LIM_MAX && !defined(M7_LIMIT_PIN_MAX)
774 #define Z_LIMIT_PORT_MAX M7_LIMIT_PORT
775 #define Z_LIMIT_PIN_MAX M7_LIMIT_PIN
776 #define Z_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN)
779 #error "Auto squared Z-axis requires second limit pin input"
781 #ifdef M7_LIMIT_PIN_MAX
782 #define Z_LIMIT_PORT_MAX M7_LIMIT_PORT_MAX
783 #define Z_LIMIT_PIN_MAX M7_LIMIT_PIN_MAX
784 #define Z_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN_MAX)
787 #define Z2_ENABLE_PORT M7_ENABLE_PORT
788 #define Z2_ENABLE_PIN M7_ENABLE_PIN
789 #define Z2_ENABLE_BIT (1<<M7_ENABLE_PIN)
791 #ifdef M7_MOTOR_FAULT_PIN
792 #define Z2_MOTOR_FAULT_PORT M7_MOTOR_FAULT_PORT
793 #define Z2_MOTOR_FAULT_PIN M7_MOTOR_FAULT_PIN
794 #define Z2_MOTOR_FAULT_BIT (1<<M7_MOTOR_FAULT_PIN)
800 #define X2_MOTOR (X_DOUBLED + 2)
803 #define Y2_MOTOR (Y_DOUBLED + 2)
806 #define Z2_MOTOR (Z_DOUBLED + 2)
811 #if defined(X2_HOME_PIN) || defined(Y2_HOME_PIN) || defined(Z2_HOME_PIN)
812 #define DUAL_HOME_SWITCHES
814 #define X2_HOME_BIT 0
817 #define Y2_HOME_BIT 0
820 #define Z2_HOME_BIT 0
822 #define HOME2_MASK (X2_HOME_BIT|Y2_HOME_BIT|Z2_HOME_BIT)
823 #define HOME2_MASK_SUM (X2_HOME_BIT+Y2_HOME_BIT+Z2_HOME_BIT)
826 #define HOME2_MASK_SUM 0
829 #if defined(X2_MOTOR_FAULT_PIN) || defined(Y2_MOTOR_FAULT_PIN) || defined(Z2_MOTOR_FAULT_PIN)
830 #define DUAL_MOTOR_FAULT_SWITCHES
831 #ifndef X2_MOTOR_FAULT_BIT
832 #define X2_MOTOR_FAULT_BIT 0
834 #ifndef Y2_MOTOR_FAULT_BIT
835 #define Y2_MOTOR_FAULT_BIT 0
837 #ifndef Z2_MOTOR_FAULT_BIT
838 #define Z2_MOTOR_FAULT_BIT 0
840 #define MOTOR_FAULT2_MASK (X2_MOTOR_FAULT_BIT|Y2_MOTOR_FAULT_BIT|Z2_MOTOR_FAULT_BIT)
841 #define MOTOR_FAULT2_MASK_SUM (X2_MOTOR_FAULT_BIT+Y2_MOTOR_FAULT_BIT+Z2_MOTOR_FAULT_BIT)
843 #define MOTOR_FAULT2_MASK 0
844 #define MOTOR_FAULT2_MASK_SUM 0
847 #if defined(X2_LIMIT_PIN) || defined(Y2_LIMIT_PIN) || defined(Z2_LIMIT_PIN)
848 #define DUAL_LIMIT_SWITCHES
850 #define X2_LIMIT_BIT 0
853 #define Y2_LIMIT_BIT 0
856 #define Z2_LIMIT_BIT 0
858 #define LIMIT2_MASK (X2_LIMIT_BIT|Y2_LIMIT_BIT|Z2_LIMIT_BIT)
859 #define LIMIT2_MASK_SUM (X2_LIMIT_BIT+Y2_LIMIT_BIT+Z2_LIMIT_BIT)
861 #define LIMIT2_MASK 0
862 #define LIMIT2_MASK_SUM 0
865 #if defined(X_LIMIT_PIN_MAX) || defined(Y_LIMIT_PIN_MAX) || defined(Z_LIMIT_PIN_MAX) || defined(A_LIMIT_PIN_MAX) || defined(B_LIMIT_PIN_MAX) || defined(C_LIMIT_PIN_MAX)
866 #define MAX_LIMIT_SWITCHES
872 #error "A_AXIS pins are not available"
874 #define A_STEP_PORT M3_STEP_PORT
875 #define A_STEP_PIN M3_STEP_PIN
876 #define A_STEP_BIT (1<<M3_STEP_PIN)
877 #define A_DIRECTION_PORT M3_DIRECTION_PORT
878 #define A_DIRECTION_PIN M3_DIRECTION_PIN
879 #define A_DIRECTION_BIT (1<<M3_DIRECTION_PIN)
881 #define A_HOME_PORT M3_HOME_PORT
882 #define A_HOME_PIN M3_HOME_PIN
883 #define A_HOME_BIT (1<<M3_HOME_PIN)
886 #define A_LIMIT_PORT M3_LIMIT_PORT
887 #define A_LIMIT_PIN M3_LIMIT_PIN
888 #define A_LIMIT_BIT (1<<M3_LIMIT_PIN)
890 #ifdef M3_LIMIT_PIN_MAX
891 #define A_LIMIT_PORT_MAX M3_LIMIT_PORT_MAX
892 #define A_LIMIT_PIN_MAX M3_LIMIT_PIN_MAX
893 #define A_LIMIT_BIT_MAX (1<<M3_LIMIT_PIN_MAX)
896 #define A_ENABLE_PORT M3_ENABLE_PORT
897 #define A_ENABLE_PIN M3_ENABLE_PIN
898 #define A_ENABLE_BIT (1<<M3_ENABLE_PIN)
900 #ifdef M3_MOTOR_FAULT_PIN
901 #define A_MOTOR_FAULT_PORT M3_MOTOR_FAULT_PORT
902 #define A_MOTOR_FAULT_PIN M3_MOTOR_FAULT_PIN
903 #define A_MOTOR_FAULT_BIT (1<<M3_MOTOR_FAULT_PIN)
911 #error "B_AXIS pins are not available"
913 #define B_STEP_PORT M4_STEP_PORT
914 #define B_STEP_PIN M4_STEP_PIN
915 #define B_STEP_BIT (1<<M4_STEP_PIN)
916 #define B_DIRECTION_PORT M4_DIRECTION_PORT
917 #define B_DIRECTION_PIN M4_DIRECTION_PIN
918 #define B_DIRECTION_BIT (1<<M4_DIRECTION_PIN)
920 #define B_HOME_PORT M4_HOME_PORT
921 #define B_HOME_PIN M4_HOME_PIN
922 #define B_HOME_BIT (1<<M4_HOME_PIN)
925 #define B_LIMIT_PORT M4_LIMIT_PORT
926 #define B_LIMIT_PIN M4_LIMIT_PIN
927 #define B_LIMIT_BIT (1<<M4_LIMIT_PIN)
929 #ifdef M4_LIMIT_PIN_MAX
930 #define B_LIMIT_PORT_MAX M4_LIMIT_PORT_MAX
931 #define B_LIMIT_PIN_MAX M4_LIMIT_PIN_MAX
932 #define B_LIMIT_BIT_MAX (1<<M4_LIMIT_PIN_MAX)
935 #define B_ENABLE_PORT M4_ENABLE_PORT
936 #define B_ENABLE_PIN M4_ENABLE_PIN
937 #define B_ENABLE_BIT (1<<M4_ENABLE_PIN)
939 #ifdef M4_MOTOR_FAULT_PIN
940 #define B_MOTOR_FAULT_PORT M4_MOTOR_FAULT_PORT
941 #define B_MOTOR_FAULT_PIN M4_MOTOR_FAULT_PIN
942 #define B_MOTOR_FAULT_BIT (1<<M4_MOTOR_FAULT_PIN)
950 #error "C_AXIS pins are not available"
952 #define C_STEP_PORT M5_STEP_PORT
953 #define C_STEP_PIN M5_STEP_PIN
954 #define C_STEP_BIT (1<<M5_STEP_PIN)
955 #define C_DIRECTION_PORT M5_DIRECTION_PORT
956 #define C_DIRECTION_PIN M5_DIRECTION_PIN
957 #define C_DIRECTION_BIT (1<<M5_DIRECTION_PIN)
959 #define C_HOME_PORT M5_HOME_PORT
960 #define C_HOME_PIN M5_HOME_PIN
961 #define C_HOME_BIT (1<<M5_HOME_PIN)
964 #define C_LIMIT_PORT M5_LIMIT_PORT
965 #define C_LIMIT_PIN M5_LIMIT_PIN
966 #define C_LIMIT_BIT (1<<M5_LIMIT_PIN)
968 #ifdef M5_LIMIT_PIN_MAX
969 #define C_LIMIT_PORT_MAX M5_LIMIT_PORT_MAX
970 #define C_LIMIT_PIN_MAX M5_LIMIT_PIN_MAX
971 #define C_LIMIT_BIT_MAX (1<<M5_LIMIT_PIN_MAX)
974 #define C_ENABLE_PORT M5_ENABLE_PORT
975 #define C_ENABLE_PIN M5_ENABLE_PIN
976 #define C_ENABLE_BIT (1<<M5_ENABLE_PIN)
978 #ifdef M5_MOTOR_FAULT_PIN
979 #define C_MOTOR_FAULT_PORT M5_MOTOR_FAULT_PORT
980 #define C_MOTOR_FAULT_PIN M5_MOTOR_FAULT_PIN
981 #define C_MOTOR_FAULT_BIT (1<<M5_MOTOR_FAULT_PIN)
989 #error "U_AXIS pins are not available"
991 #define U_STEP_PORT M6_STEP_PORT
992 #define U_STEP_PIN M6_STEP_PIN
993 #define U_STEP_BIT (1<<M6_STEP_PIN)
994 #define U_DIRECTION_PORT M6_DIRECTION_PORT
995 #define U_DIRECTION_PIN M6_DIRECTION_PIN
996 #define U_DIRECTION_BIT (1<<M6_DIRECTION_PIN)
998 #define U_HOME_PORT M6_HOME_PORT
999 #define U_HOME_PIN M6_HOME_PIN
1000 #define U_HOME_BIT (1<<M6_HOME_PIN)
1003 #define U_LIMIT_PORT M6_LIMIT_PORT
1004 #define U_LIMIT_PIN M6_LIMIT_PIN
1005 #define U_LIMIT_BIT (1<<M6_LIMIT_PIN)
1007 #ifdef M6_LIMIT_PIN_MAX
1008 #define U_LIMIT_PORT_MAX M6_LIMIT_PORT_MAX
1009 #define U_LIMIT_PIN_MAX M6_LIMIT_PIN_MAX
1010 #define U_LIMIT_BIT_MAX (1<<M6_LIMIT_PIN_MAX)
1012 #ifdef M6_ENABLE_PIN
1013 #define U_ENABLE_PORT M6_ENABLE_PORT
1014 #define U_ENABLE_PIN M6_ENABLE_PIN
1015 #define U_ENABLE_BIT (1<<M6_ENABLE_PIN)
1017 #ifdef M6_MOTOR_FAULT_PIN
1018 #define U_MOTOR_FAULT_PORT M6_MOTOR_FAULT_PORT
1019 #define U_MOTOR_FAULT_PIN M6_MOTOR_FAULT_PIN
1020 #define U_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
1027 #ifndef M7_AVAILABLE
1028 #error "V_AXIS pins are not available"
1030 #define V_STEP_PORT M7_STEP_PORT
1031 #define V_STEP_PIN M7_STEP_PIN
1032 #define V_STEP_BIT (1<<M7_STEP_PIN)
1033 #define V_DIRECTION_PORT M7_DIRECTION_PORT
1034 #define V_DIRECTION_PIN M7_DIRECTION_PIN
1035 #define V_DIRECTION_BIT (1<<M7_DIRECTION_PIN)
1037 #define V_HOME_PORT M7_HOME_PORT
1038 #define V_HOME_PIN M7_HOME_PIN
1039 #define V_HOME_BIT (1<<M7_HOME_PIN)
1042 #define V_LIMIT_PORT M7_LIMIT_PORT
1043 #define V_LIMIT_PIN M7_LIMIT_PIN
1044 #define V_LIMIT_BIT (1<<M7_LIMIT_PIN)
1046 #ifdef M7_LIMIT_PIN_MAX
1047 #define V_LIMIT_PORT_MAX M7_LIMIT_PORT_MAX
1048 #define V_LIMIT_PIN_MAX M7_LIMIT_PIN_MAX
1049 #define V_LIMIT_BIT_MAX (1<<M7_LIMIT_PIN_MAX)
1051 #ifdef M7_ENABLE_PIN
1052 #define V_ENABLE_PORT M7_ENABLE_PORT
1053 #define V_ENABLE_PIN M7_ENABLE_PIN
1054 #define V_ENABLE_BIT (1<<M7_ENABLE_PIN)
1056 #ifdef M7_MOTOR_FAULT_PIN
1057 #define V_MOTOR_FAULT_PORT M7_MOTOR_FAULT_PORT
1058 #define V_MOTOR_FAULT_PIN M7_MOTOR_FAULT_PIN
1059 #define V_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
1066 #define X_STEP_PORT STEP_PORT
1069 #define Y_STEP_PORT STEP_PORT
1072 #define Z_STEP_PORT STEP_PORT
1074 #if defined(A_AXIS) && !defined(A_STEP_PORT)
1075 #define A_STEP_PORT STEP_PORT
1077 #if defined(B_AXIS) && !defined(B_STEP_PORT)
1078 #define B_STEP_PORT STEP_PORT
1080 #if defined(C_AXIS) && !defined(C_STEP_PORT)
1081 #define C_STEP_PORT STEP_PORT
1083 #if defined(U_AXIS) && !defined(U_STEP_PORT)
1084 #define U_STEP_PORT STEP_PORT
1086 #if defined(V_AXIS) && !defined(V_STEP_PORT)
1087 #define V_STEP_PORT STEP_PORT
1092 #define X_STEP_BIT (1<<X_STEP_PIN)
1095 #define Y_STEP_BIT (1<<Y_STEP_PIN)
1098 #define Z_STEP_BIT (1<<Z_STEP_PIN)
1101 #ifdef DIRECTION_PORT
1102 #ifndef X_DIRECTION_PORT
1103 #define X_DIRECTION_PORT DIRECTION_PORT
1105 #ifndef Y_DIRECTION_PORT
1106 #define Y_DIRECTION_PORT DIRECTION_PORT
1108 #ifndef Z_DIRECTION_PORT
1109 #define Z_DIRECTION_PORT DIRECTION_PORT
1111 #if defined(A_AXIS) && !defined(A_DIRECTION_PORT)
1112 #define A_DIRECTION_PORT DIRECTION_PORT
1114 #if defined(B_AXIS) && !defined(B_DIRECTION_PORT)
1115 #define B_DIRECTION_PORT DIRECTION_PORT
1117 #if defined(C_AXIS) && !defined(B_DIRECTION_PORT)
1118 #define C_DIRECTION_PORT DIRECTION_PORT
1120 #if defined(U_AXIS) && !defined(U_DIRECTION_PORT)
1121 #define U_DIRECTION_PORT DIRECTION_PORT
1123 #if defined(V_AXIS) && !defined(V_DIRECTION_PORT)
1124 #define V_DIRECTION_PORT DIRECTION_PORT
1128 #ifndef X_DIRECTION_BIT
1129 #define X_DIRECTION_BIT (1<<X_DIRECTION_PIN)
1131 #ifndef Y_DIRECTION_BIT
1132 #define Y_DIRECTION_BIT (1<<Y_DIRECTION_PIN)
1134 #ifndef Z_DIRECTION_BIT
1135 #define Z_DIRECTION_BIT (1<<Z_DIRECTION_PIN)
1139 #ifndef X_LIMIT_PORT
1140 #define X_LIMIT_PORT LIMIT_PORT
1142 #ifndef Y_LIMIT_PORT
1143 #define Y_LIMIT_PORT LIMIT_PORT
1145 #ifndef Z_LIMIT_PORT
1146 #define Z_LIMIT_PORT LIMIT_PORT
1148 #if defined(A_AXIS) && !defined(A_LIMIT_PORT)
1149 #define A_LIMIT_PORT LIMIT_PORT
1151 #if defined(B_AXIS) && !defined(B_LIMIT_PORT)
1152 #define B_LIMIT_PORT LIMIT_PORT
1154 #if defined(C_AXIS) && !defined(C_LIMIT_PORT)
1155 #define C_LIMIT_PORT LIMIT_PORT
1157 #if defined(U_AXIS) && !defined(U_LIMIT_PORT)
1158 #define U_LIMIT_PORT LIMIT_PORT
1160 #if defined(V_AXIS) && !defined(V_LIMIT_PORT)
1161 #define V_LIMIT_PORT LIMIT_PORT
1167 #define X_HOME_BIT (1<<X_HOME_PIN)
1169 #define X_HOME_BIT 0
1174 #define Y_HOME_BIT (1<<Y_HOME_PIN)
1176 #define Y_HOME_BIT 0
1181 #define Z_HOME_BIT (1<<Z_HOME_PIN)
1183 #define Z_HOME_BIT 0
1187 #ifndef X_MOTOR_FAULT_BIT
1188 #ifdef X_MOTOR_FAULT_PIN
1189 #define X_MOTOR_FAULT_BIT (1<<X_MOTOR_FAULT_PIN)
1191 #define X_MOTOR_FAULT_BIT 0
1194 #ifndef Y_MOTOR_FAULT_BIT
1195 #ifdef Y_MOTOR_FAULT_PIN
1196 #define Y_MOTOR_FAULT_BIT (1<<Y_MOTOR_FAULT_PIN)
1198 #define Y_MOTOR_FAULT_BIT 0
1201 #ifndef Z_MOTOR_FAULT_BIT
1202 #ifdef Z_MOTOR_FAULT_PIN
1203 #define Z_MOTOR_FAULT_BIT (1<<Z_MOTOR_FAULT_PIN)
1205 #define Z_MOTOR_FAULT_BIT 0
1210 #define X_LIMIT_BIT (1<<X_LIMIT_PIN)
1213 #define Y_LIMIT_BIT (1<<Y_LIMIT_PIN)
1216 #define Z_LIMIT_BIT (1<<Z_LIMIT_PIN)
1218 #ifndef X_LIMIT_BIT_MAX
1219 #ifdef X_LIMIT_PIN_MAX
1220 #define X_LIMIT_BIT_MAX (1<<X_LIMIT_PIN_MAX)
1222 #define X_LIMIT_BIT_MAX 0
1225 #ifndef Y_LIMIT_BIT_MAX
1226 #ifdef Y_LIMIT_PIN_MAX
1227 #define Y_LIMIT_BIT_MAX (1<<Y_LIMIT_PIN_MAX)
1229 #define Y_LIMIT_BIT_MAX 0
1232 #ifndef Z_LIMIT_BIT_MAX
1233 #ifdef Z_LIMIT_PIN_MAX
1234 #define Z_LIMIT_BIT_MAX (1<<Z_LIMIT_PIN_MAX)
1236 #define Z_LIMIT_BIT_MAX 0
1239 #ifndef A_LIMIT_BIT_MAX
1240 #ifdef A_LIMIT_PIN_MAX
1241 #define A_LIMIT_BIT_MAX (1<<A_LIMIT_PIN_MAX)
1243 #define A_LIMIT_BIT_MAX 0
1246 #ifndef B_LIMIT_BIT_MAX
1247 #ifdef B_LIMIT_PIN_MAX
1248 #define B_LIMIT_BIT_MAX (1<<B_LIMIT_PIN_MAX)
1250 #define B_LIMIT_BIT_MAX 0
1253 #ifndef C_LIMIT_BIT_MAX
1254 #ifdef C_LIMIT_PIN_MAX
1255 #define C_LIMIT_BIT_MAX (1<<C_LIMIT_PIN_MAX)
1257 #define C_LIMIT_BIT_MAX 0
1260 #ifndef U_LIMIT_BIT_MAX
1261 #ifdef U_LIMIT_PIN_MAX
1262 #define U_LIMIT_BIT_MAX (1<<U_LIMIT_PIN_MAX)
1264 #define U_LIMIT_BIT_MAX 0
1267 #ifndef V_LIMIT_BIT_MAX
1268 #ifdef V_LIMIT_PIN_MAX
1269 #define V_LIMIT_BIT_MAX (1<<V_LIMIT_PIN_MAX)
1271 #define V_LIMIT_BIT_MAX 0
1275 #define LIMIT_MAX_MASK (X_LIMIT_BIT_MAX|Y_LIMIT_BIT_MAX|Z_LIMIT_BIT_MAX|A_LIMIT_BIT_MAX|B_LIMIT_BIT_MAX|C_LIMIT_BIT_MAX|U_LIMIT_BIT_MAX|V_LIMIT_BIT_MAX)
1276 #define LIMIT_MAX_SUM (X_LIMIT_BIT_MAX+Y_LIMIT_BIT_MAX+Z_LIMIT_BIT_MAX+A_LIMIT_BIT_MAX+B_LIMIT_BIT_MAX+C_LIMIT_BIT_MAX+U_LIMIT_BIT_MAX+V_LIMIT_BIT_MAX)
1278 #if !defined(X_ENABLE_BIT) && defined(X_ENABLE_PIN)
1279 #define X_ENABLE_BIT (1<<X_ENABLE_PIN)
1281 #if !defined(Y_ENABLE_BIT) && defined(Y_ENABLE_PIN)
1282 #define Y_ENABLE_BIT (1<<Y_ENABLE_PIN)
1284 #if !defined(Z_ENABLE_BIT) && defined(Z_ENABLE_PIN)
1285 #define Z_ENABLE_BIT (1<<Z_ENABLE_PIN)
1290 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT)
1292 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|A_STEP_BIT)
1294 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|A_STEP_BIT|B_STEP_BIT)
1296 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|A_STEP_BIT|B_STEP_BIT|C_STEP_BIT)
1298 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|A_STEP_BIT|B_STEP_BIT|C_STEP_BIT|U_STEP_BIT)
1300 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|A_STEP_BIT|B_STEP_BIT|C_STEP_BIT|U_STEP_BIT|V_STEP_BIT)
1304 #ifndef DIRECTION_MASK
1306 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT)
1308 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|A_DIRECTION_BIT)
1310 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|A_DIRECTION_BIT|B_DIRECTION_BIT)
1312 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|A_DIRECTION_BIT|B_DIRECTION_BIT|C_DIRECTION_BIT)
1314 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|A_DIRECTION_BIT|B_DIRECTION_BIT|C_DIRECTION_BIT|U_DIRECTION_BIT)
1316 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|A_DIRECTION_BIT|B_DIRECTION_BIT|C_DIRECTION_BIT|U_DIRECTION_BIT|V_DIRECTION_BIT)
1320 #if defined(STEPPERS_ENABLE_PIN) && !defined(STEPPERS_ENABLE_BIT)
1321 #define STEPPERS_ENABLE_BIT (1<<STEPPERS_ENABLE_PIN)
1324 #ifndef STEPPERS_ENABLE_MASK
1326 #ifdef STEPPERS_ENABLE_BIT
1327 #define STEPPERS_ENABLE_MASK STEPPERS_ENABLE_BIT
1330 #if N_AXIS >= 4 && !defined(A_ENABLE_BIT)
1331 #define A_ENABLE_BIT 0
1333 #if N_AXIS >= 5 && !defined(B_ENABLE_BIT)
1334 #define B_ENABLE_BIT 0
1336 #if N_AXIS >= 6 && !defined(C_ENABLE_BIT)
1337 #define C_ENABLE_BIT 0
1341 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT)
1343 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|A_ENABLE_BIT)
1345 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|A_ENABLE_BIT|B_ENABLE_BIT)
1347 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|A_ENABLE_BIT|B_ENABLE_BIT|C_ENABLE_BIT)
1349 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|A_ENABLE_BIT|B_ENABLE_BIT|C_ENABLE_BIT|U_ENABLE_BIT)
1351 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|A_ENABLE_BIT|B_ENABLE_BIT|C_ENABLE_BIT|U_ENABLE_BIT|V_ENABLE_BIT)
1359 #define HOME_MASK_BASE (X_HOME_BIT|Y_HOME_BIT|Z_HOME_BIT|HOME2_MASK)
1360 #define HOME_MASK_BASE_SUM (X_HOME_BIT+Y_HOME_BIT+Z_HOME_BIT+HOME2_MASK_SUM)
1363 #define HOME_MASK HOME_MASK_BASE
1364 #define HOME_MASK_SUM HOME_MASK_BASE_SUM
1365 #define HOME_MIN_CAP AXES_BITMASK
1367 #define HOME_MASK (HOME_MASK_BASE|A_HOME_BIT)
1368 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+A_HOME_BIT)
1370 #define HOME_MASK (HOME_MASK_BASE|A_HOME_BIT|B_HOME_BIT)
1371 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+A_HOME_BIT+B_HOME_BIT)
1373 #define HOME_MASK (HOME_MASK_BASE|A_HOME_BIT|B_HOME_BIT|C_HOME_BIT)
1374 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+A_HOME_BIT+B_HOME_BIT+C_HOME_BIT)
1376 #define HOME_MASK (HOME_MASK_BASE|A_HOME_BIT|B_HOME_BIT|C_HOME_BIT|U_HOME_BIT)
1377 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+A_HOME_BIT+B_HOME_BIT+C_HOME_BIT+U_HOME_BIT)
1379 #define HOME_MASK (HOME_MASK_BASE|A_HOME_BIT|B_HOME_BIT|C_HOME_BIT|U_HOME_BIT|V_HOME_BIT)
1380 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+A_HOME_BIT+B_HOME_BIT+C_HOME_BIT+U_HOME_BIT+V_HOME_BIT)
1387 #if N_AXIS >=4 && !defined(A_LIMIT_BIT)
1389 #define A_LIMIT_BIT (1<<A_LIMIT_PIN)
1391 #define A_LIMIT_BIT 0
1394 #if N_AXIS >=5 && !defined(B_LIMIT_BIT)
1396 #define B_LIMIT_BIT (1<<B_LIMIT_PIN)
1398 #define B_LIMIT_BIT 0
1401 #if N_AXIS >= 6 && !defined(C_LIMIT_BIT)
1403 #define C_LIMIT_BIT (1<<C_LIMIT_PIN)
1405 #define C_LIMIT_BIT 0
1408 #if N_AXIS >= 7 && !defined(U_LIMIT_BIT)
1410 #define U_LIMIT_BIT (1<<U_LIMIT_PIN)
1412 #define U_LIMIT_BIT 0
1415 #if N_AXIS == 8 && !defined(V_LIMIT_BIT)
1417 #define V_LIMIT_BIT (1<<V_LIMIT_PIN)
1419 #define V_LIMIT_BIT 0
1424 #define LIMIT_MASK_BASE (X_LIMIT_BIT|Y_LIMIT_BIT|LIMIT2_MASK|LIMIT_MAX_MASK)
1425 #define LIMIT_MASK_BASE_SUM (X_LIMIT_BIT+Y_LIMIT_BIT+LIMIT2_MASK_SUM+LIMIT_MAX_SUM)
1427 #define LIMIT_MASK_BASE (X_LIMIT_BIT|Y_LIMIT_BIT|Z_LIMIT_BIT|LIMIT2_MASK|LIMIT_MAX_MASK)
1428 #define LIMIT_MASK_BASE_SUM (X_LIMIT_BIT+Y_LIMIT_BIT+Z_LIMIT_BIT+LIMIT2_MASK_SUM+LIMIT_MAX_SUM)
1432 #define LIMIT_MASK LIMIT_MASK_BASE
1433 #define LIMIT_MASK_SUM LIMIT_MASK_BASE_SUM
1434 #define LIMIT_MIN_CAP AXES_BITMASK
1436 #define LIMIT_MASK (LIMIT_MASK_BASE|A_LIMIT_BIT)
1437 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+A_LIMIT_BIT)
1439 #define LIMIT_MASK (LIMIT_MASK_BASE|A_LIMIT_BIT|B_LIMIT_BIT)
1440 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+A_LIMIT_BIT+B_LIMIT_BIT)
1442 #define LIMIT_MASK (LIMIT_MASK_BASE|A_LIMIT_BIT|B_LIMIT_BIT|C_LIMIT_BIT)
1443 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+A_LIMIT_BIT+B_LIMIT_BIT+C_LIMIT_BIT)
1445 #define LIMIT_MASK (LIMIT_MASK_BASE|A_LIMIT_BIT|B_LIMIT_BIT|C_LIMIT_BIT|U_LIMIT_BIT)
1446 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+A_LIMIT_BIT+B_LIMIT_BIT+C_LIMIT_BIT+U_LIMIT_BIT)
1448 #define LIMIT_MASK (LIMIT_MASK_BASE|A_LIMIT_BIT|B_LIMIT_BIT|C_LIMIT_BIT|U_LIMIT_BIT|V_LIMIT_BIT)
1449 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+A_LIMIT_BIT+B_LIMIT_BIT+C_LIMIT_BIT+U_LIMIT_BIT+V_LIMIT_BIT)
1454 #ifndef MOTOR_FAULT_MASK
1456 #define MOTOR_FAULT_MASK_BASE (X_MOTOR_FAULT_BIT|Y_MOTOR_FAULT_BIT|Z_MOTOR_FAULT_BIT|MOTOR_FAULT2_MASK)
1457 #define MOTOR_FAULT_MASK_BASE_SUM (X_MOTOR_FAULT_BIT+Y_MOTOR_FAULT_BIT+Z_MOTOR_FAULT_BIT+MOTOR_FAULT2_MASK_SUM)
1460 #define MOTOR_FAULT_MASK MOTOR_FAULT_MASK_BASE
1461 #define MOTOR_FAULT_MASK_SUM MOTOR_FAULT_MASK_BASE_SUM
1462 #define MOTOR_FAULT_MIN_CAP AXES_BITMASK
1464 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT)
1465 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT)
1467 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT|B_MOTOR_FAULT_BIT)
1468 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT+B_MOTOR_FAULT_BIT)
1470 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT|B_MOTOR_FAULT_BIT|C_MOTOR_FAULT_BIT)
1471 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT+B_MOTOR_FAULT_BIT+C_MOTOR_FAULT_BIT)
1473 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT|B_MOTOR_FAULT_BIT|C_MOTOR_FAULT_BIT|U_MOTOR_FAULT_BIT)
1474 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT+B_MOTOR_FAULT_BIT+C_MOTOR_FAULT_BIT+U_MOTOR_FAULT_BIT)
1476 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT|B_MOTOR_FAULT_BIT|C_MOTOR_FAULT_BIT|U_MOTOR_FAULT_BIT|V_MOTOR_FAULT_BIT)
1477 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT+B_MOTOR_FAULT_BIT+C_MOTOR_FAULT_BIT+U_MOTOR_FAULT_BIT+V_MOTOR_FAULT_BIT)
1494 else switch (motor.
id) {
1632 #if MOTOR_FAULT_MASK
1634 #if X_MOTOR_FAULT_BIT
1635 motor_fault.
a.
x =
On;
1637 #if Y_MOTOR_FAULT_BIT
1638 motor_fault.
a.
y =
On;
1640 #if Z_MOTOR_FAULT_BIT
1641 motor_fault.
a.
z =
On;
1643 #if A_MOTOR_FAULT_BIT
1644 motor_fault.
a.
a =
On;
1646 #if B_MOTOR_FAULT_BIT
1647 motor_fault.
a.
b =
On;
1649 #if C_MOTOR_FAULT_BIT
1650 motor_fault.
a.
c =
On;
1652 #if U_MOTOR_FAULT_BIT
1653 motor_fault.
a.
u =
On;
1655 #if V_MOTOR_FAULT_BIT
1656 motor_fault.
a.
v =
On;
1659 #if X2_MOTOR_FAULT_BIT
1660 motor_fault.
b.
x =
On;
1662 #if Y2_MOTOR_FAULT_BIT
1663 motor_fault.
b.
y =
On;
1665 #if Z2_MOTOR_FAULT_BIT
1666 motor_fault.
b.
z =
On;
#define N_AXIS
Defines number of axes supported - minimum 3, maximum 8. If more than 3 axes are configured a complia...
Definition: config.h:42
void(* motor_iterator_callback_ptr)(motor_map_t motor)
Signature of the callback function to receive motor vs. axis mappings.
Definition: hal.h:225
#define N_GANGED
Definition: motor_pins.h:1483
#define X_AXIS
Definition: nuts_bolts.h:68
#define Z_AXIS
Definition: nuts_bolts.h:70
#define On
Definition: nuts_bolts.h:36
#define Y_AXIS
Definition: nuts_bolts.h:69
Home switches struct, consists of two packed axes_signals_t structs.
Definition: nuts_bolts.h:163
axes_signals_t a
Primary home switches status, optional. Limit signals are used for homing if not available.
Definition: nuts_bolts.h:164
axes_signals_t b
Secondary home switch(es) status, required for auto squaring enabled axes if primary switches are ava...
Definition: nuts_bolts.h:165
uint8_t u
Definition: nuts_bolts.h:136
uint8_t x
Definition: nuts_bolts.h:130
uint8_t y
Definition: nuts_bolts.h:131
uint8_t c
Definition: nuts_bolts.h:135
uint8_t b
Definition: nuts_bolts.h:134
uint8_t v
Definition: nuts_bolts.h:137
uint8_t z
Definition: nuts_bolts.h:132
uint8_t a
Definition: nuts_bolts.h:133
Limit switches struct, consists of four packed axes_signals_t structs in 32 bits.
Definition: nuts_bolts.h:152
axes_signals_t min
Min limit switches status, required.
Definition: nuts_bolts.h:155
axes_signals_t min2
Secondary min limit switch(es) status, required for auto squaring enabled axes.
Definition: nuts_bolts.h:157
axes_signals_t max
Max limit switches status, optional.
Definition: nuts_bolts.h:156
Motor vs. axis mapping NOTE: id and axis values are equal for primary motors, unequal for secondary (...
Definition: hal.h:214
uint32_t axis
Definition: hal.h:218
uint32_t id
Definition: hal.h:217