27 #pragma GCC diagnostic push
28 #pragma GCC diagnostic ignored "-Wexpansion-to-defined"
31 #define CAT(a, b) CAT_(a, b)
32 #define CAT_(a, b) a##b
34 #define MOTOR_IO(n, t) CAT(M, CAT(n, t))
36 #define mn_has_limit(a) \
37 (a == 3 ? defined(M3_LIMIT_PIN) : \
38 (a == 4 ? defined(M4_LIMIT_PIN) : \
39 (a == 5 ? defined(M5_LIMIT_PIN) : \
40 (a == 6 ? defined(M6_LIMIT_PIN) : \
41 (a == 7 ? defined(M7_LIMIT_PIN) : 0)))))
43 #define mn_has_home(a) \
44 (a == 3 ? defined(M3_HOME_PIN) : \
45 (a == 4 ? defined(M4_HOME_PIN) : \
46 (a == 5 ? defined(M5_HOME_PIN) : \
47 (a == 6 ? defined(M6_HOME_PIN) : \
48 (a == 7 ? defined(M7_HOME_PIN) : 0)))))
50 #define mn_has_limit_max(a) \
51 (a == 3 ? defined(M3_LIMIT_PIN_MAX) : \
52 (a == 4 ? defined(M4_LIMIT_PIN_MAX) : \
53 (a == 5 ? defined(M5_LIMIT_PIN_MAX) : \
54 (a == 6 ? defined(M6_LIMIT_PIN_MAX) : \
55 (a == 7 ? defined(M7_LIMIT_PIN_MAX) : 0)))))
57 #define mn_has_fault(a) \
58 (a == 3 ? defined(M3_MOTOR_FAULT_PIN) : \
59 (a == 4 ? defined(M4_MOTOR_FAULT_PIN) : \
60 (a == 5 ? defined(M5_MOTOR_FAULT_PIN) : \
61 (a == 6 ? defined(M6_MOTOR_FAULT_PIN) : \
62 (a == 7 ? defined(M7_MOTOR_FAULT_PIN) : 0)))))
64 #define mn_has_enable(a) \
65 (a == 3 ? defined(M3_ENABLE_PIN) : \
66 (a == 4 ? defined(M4_ENABLE_PIN) : \
67 (a == 5 ? defined(M5_ENABLE_PIN) : \
68 (a == 6 ? defined(M6_ENABLE_PIN) : \
69 (a == 7 ? defined(M7_ENABLE_PIN) : 0)))))
71 #define N_MOTORS (3 + defined(M3_AVAILABLE) + defined(M4_AVAILABLE) + defined(M5_AVAILABLE) + defined(M6_AVAILABLE) + defined(M7_AVAILABLE))
74 #if !defined(M3_STEP_BIT)
75 #define M3_STEP_BIT (1<<M3_STEP_PIN)
77 #if !defined(M3_DIRECTION_BIT)
78 #define M3_DIRECTION_BIT (1<<M3_DIRECTION_PIN)
80 #if !defined(M3_ENABLE_BIT)
82 #define M3_ENABLE_BIT (1<<M3_ENABLE_PIN)
84 #define M3_ENABLE_BIT 0
87 #if !defined(M3_HOME_BIT)
89 #define M3_HOME_BIT (1<<M3_HOME_PIN)
94 #if !defined(M3_LIMIT_BIT)
96 #define M3_LIMIT_BIT (1>>M3_LIMIT_PIN)
98 #define M3_LIMIT_BIT 0
101 #if !defined(M3_LIMIT_MAX_BIT)
102 #ifdef M3_LIMIT_MAX_PIN
103 #define M3_LIMIT_MAX_BIT (1<<M3_LIMIT_MAX_PIN)
105 #define M3_LIMIT_MAX_BIT 0
108 #if !defined(M3_MOTOR_FAULT_BIT)
109 #ifdef M3_MOTOR_FAULT_PIN
110 #define M3_MOTOR_FAULT_BIT (1<<M3_MOTOR_FAULT_PIN)
112 #define M3_MOTOR_FAULT_BIT 0
118 #if !defined(M4_STEP_BIT)
119 #define M4_STEP_BIT (1<<M4_STEP_PIN)
121 #if !defined(M4_DIRECTION_BIT)
122 #define M4_DIRECTION_BIT (1<<M4_DIRECTION_PIN)
124 #if !defined(M4_ENABLE_BIT)
126 #define M4_ENABLE_BIT (1<<M4_ENABLE_PIN)
128 #define M4_ENABLE_BIT 0
131 #if !defined(M4_HOME_BIT)
133 #define M4_HOME_BIT (1<<M4_HOME_PIN)
135 #define M4_HOME_BIT 0
138 #if !defined(M4_LIMIT_BIT)
140 #define M4_LIMIT_BIT (1>>M4_LIMIT_PIN)
142 #define M4_LIMIT_BIT 0
145 #if !defined(M4_LIMIT_MAX_BIT)
146 #ifdef M4_LIMIT_MAX_PIN
147 #define M4_LIMIT_MAX_BIT (1<<M4_LIMIT_MAX_PIN)
149 #define M4_LIMIT_MAX_BIT 0
152 #if !defined(M4_MOTOR_FAULT_BIT)
153 #ifdef M4_MOTOR_FAULT_PIN
154 #define M4_MOTOR_FAULT_BIT (1<<M4_MOTOR_FAULT_PIN)
156 #define M4_MOTOR_FAULT_BIT 0
162 #if !defined(M5_STEP_BIT)
163 #define M5_STEP_BIT (1<<M5_STEP_PIN)
165 #if !defined(M5_DIRECTION_BIT)
166 #define M5_DIRECTION_BIT (1<<M5_DIRECTION_PIN)
168 #if !defined(M5_ENABLE_BIT)
170 #define M5_ENABLE_BIT (1<<M5_ENABLE_PIN)
172 #define M5_ENABLE_BIT 0
175 #if !defined(M5_HOME_BIT)
177 #define M5_HOME_BIT (1<<M5_HOME_PIN)
179 #define M5_HOME_BIT 0
182 #if !defined(M5_LIMIT_BIT)
184 #define M5_LIMIT_BIT (1>>M5_LIMIT_PIN)
186 #define M5_LIMIT_BIT 0
189 #if !defined(M5_LIMIT_MAX_BIT)
190 #ifdef M5_LIMIT_MAX_PIN
191 #define M5_LIMIT_MAX_BIT (1<<M5_LIMIT_MAX_PIN)
193 #define M5_LIMIT_MAX_BIT 0
196 #if !defined(M5_MOTOR_FAULT_BIT)
197 #ifdef M5_MOTOR_FAULT_PIN
198 #define M5_MOTOR_FAULT_BIT (1<<M5_MOTOR_FAULT_PIN)
200 #define M5_MOTOR_FAULT_BIT 0
206 #if !defined(M6_STEP_BIT)
207 #define M6_STEP_BIT (1<<M6_STEP_PIN)
209 #if !defined(M6_DIRECTION_BIT)
210 #define M6_DIRECTION_BIT (1<<M6_DIRECTION_PIN)
212 #if !defined(M6_ENABLE_BIT)
214 #define M6_ENABLE_BIT (1<<M6_ENABLE_PIN)
216 #define M6_ENABLE_BIT 0
219 #if !defined(M6_HOME_BIT)
221 #define M6_HOME_BIT (1<<M6_HOME_PIN)
223 #define M6_HOME_BIT 0
226 #if !defined(M6_LIMIT_BIT)
228 #define M6_LIMIT_BIT (1>>M6_LIMIT_PIN)
230 #define M6_LIMIT_BIT 0
233 #if !defined(M6_LIMIT_MAX_BIT)
234 #ifdef M6_LIMIT_MAX_PIN
235 #define M6_LIMIT_MAX_BIT (1<<M6_LIMIT_MAX_PIN)
237 #define M6_LIMIT_MAX_BIT 0
240 #if !defined(M6_MOTOR_FAULT_BIT)
241 #ifdef M6_MOTOR_FAULT_PIN
242 #define M6_MOTOR_FAULT_BIT (1<<M6_MOTOR_FAULT_PIN)
244 #define M6_MOTOR_FAULT_BIT 0
250 #if !defined(M7_STEP_BIT)
251 #define M7_STEP_BIT (1<<M7_STEP_PIN)
253 #if !defined(M7_DIRECTION_BIT)
254 #define M7_DIRECTION_BIT (1<<M7_DIRECTION_PIN)
256 #if !defined(M7_ENABLE_BIT)
258 #define M7_ENABLE_BIT (1<<M7_ENABLE_PIN)
260 #define M7_ENABLE_BIT 0
263 #if !defined(M7_HOME_BIT)
265 #define M7_HOME_BIT (1<<M7_HOME_PIN)
267 #define M7_HOME_BIT 0
270 #if !defined(M7_LIMIT_BIT)
272 #define M7_LIMIT_BIT (1>>M7_LIMIT_PIN)
274 #define M7_LIMIT_BIT 0
277 #if !defined(M7_LIMIT_MAX_BIT)
278 #ifdef M7_LIMIT_MAX_PIN
279 #define M7_LIMIT_MAX_BIT (1<<M7_LIMIT_MAX_PIN)
281 #define M7_LIMIT_MAX_BIT 0
284 #if !defined(M7_MOTOR_FAULT_BIT)
285 #ifdef M7_MOTOR_FAULT_PIN
286 #define M7_MOTOR_FAULT_BIT (1<<M7_MOTOR_FAULT_PIN)
288 #define M7_MOTOR_FAULT_BIT 0
295 #if N_GANGED > N_ABC_MOTORS
296 #error "Axis configuration is not supported!"
300 #define SQUARING_ENABLED
304 #define GANGING_ENABLED
309 #define Z2_MOTOR_IDX 7
311 #define Z2_MOTOR_IDX 6
313 #define Z2_MOTOR_IDX 5
315 #define Z2_MOTOR_IDX 4
317 #define Z2_MOTOR_IDX 3
321 #define Y2_MOTOR_IDX 7
323 #define Y2_MOTOR_IDX 6
325 #define Y2_MOTOR_IDX 5
327 #define Y2_MOTOR_IDX 4
329 #define Y2_MOTOR_IDX 3
333 #define X2_MOTOR_IDX 7
335 #define X2_MOTOR_IDX 6
337 #define X2_MOTOR_IDX 5
339 #define X2_MOTOR_IDX 4
341 #define X2_MOTOR_IDX 3
345 #if Y_GANGED && !defined(Y2_MOTOR_IDX)
347 #define Y2_MOTOR_IDX 6
349 #define Y2_MOTOR_IDX 5
351 #define Y2_MOTOR_IDX 4
353 #define Y2_MOTOR_IDX 3
355 #elif X_GANGED && !defined(X2_MOTOR_IDX)
357 #define X2_MOTOR_IDX 6
359 #define X2_MOTOR_IDX 5
361 #define X2_MOTOR_IDX 4
363 #define X2_MOTOR_IDX 3
367 #if X_GANGED && !defined(X2_MOTOR_IDX)
369 #define X2_MOTOR_IDX 5
371 #define X2_MOTOR_IDX 4
373 #define X2_MOTOR_IDX 3
379 #define X2_STEP_PORT MOTOR_IO(X2_MOTOR_IDX, _STEP_PORT)
380 #define X2_STEP_PIN MOTOR_IO(X2_MOTOR_IDX, _STEP_PIN)
381 #define X2_STEP_BIT (1<<X2_STEP_PIN)
382 #define X2_DIRECTION_PORT MOTOR_IO(X2_MOTOR_IDX, _DIRECTION_PORT)
383 #define X2_DIRECTION_PIN MOTOR_IO(X2_MOTOR_IDX, _DIRECTION_PIN)
384 #define X2_DIRECTION_BIT (1<<X2_DIRECTION_PIN)
385 #if mn_has_home(X2_MOTOR_IDX)
387 #define X2_HOME_PORT MOTOR_IO(X2_MOTOR_IDX, _HOME_PORT)
388 #define X2_HOME_PIN MOTOR_IO(X2_MOTOR_IDX, _HOME_PIN)
389 #define X2_HOME_BIT (1<<X2_HOME_PIN)
391 #elif X_AUTO_SQUARE && defined(X_HOME_PIN)
392 #error "Auto squared Y-axis requires second home pin input"
394 #if mn_has_limit(X2_MOTOR_IDX)
396 #define X2_LIMIT_PORT MOTOR_IO(X2_MOTOR_IDX, _LIMIT_PORT)
397 #define X2_LIMIT_PIN MOTOR_IO(X2_MOTOR_IDX, _LIMIT_PIN)
398 #define X2_LIMIT_BIT (1<<X2_LIMIT_PIN)
399 #elif X_GANGED_LIM_MAX && !mn_has_limit_max(X2_MOTOR_IDX)
400 #define X2_LIMIT_MAX_PORT MOTOR_IO(X2_MOTOR_IDX, _LIMIT_MAX_PORT)
401 #define X2_LIMIT_MAX_PIN MOTOR_IO(X2_MOTOR_IDX, _LIMIT_MAX_PIN)
402 #define X2_LIMIT_MAX_BIT (1<<X2_LIMIT_MAX_PIN)
405 #error "Auto squared Y-axis requires second limit pin input"
407 #if mn_has_limit_max(X2_MOTOR_IDX)
408 #define X2_LIMIT_MAX_PORT MOTOR_IO(X2_MOTOR_IDX, _LIMIT_MAX_PORT)
409 #define X2_LIMIT_MAX_PIN MOTOR_IO(X2_MOTOR_IDX, _LIMIT_MAX_PIN)
410 #define X2_LIMIT_MAX_BIT (1<<X2_LIMIT_MAX_PIN)
412 #if mn_has_enable(X2_MOTOR_IDX)
413 #define X2_ENABLE_PORT MOTOR_IO(X2_MOTOR_IDX, _ENABLE_PORT)
414 #define X2_ENABLE_PIN MOTOR_IO(X2_MOTOR_IDX, _ENABLE_PIN)
415 #define X2_ENABLE_BIT (1<<X2_ENABLE_PIN)
417 #if mn_has_fault(X2_MOTOR_IDX)
418 #define X2_MOTOR_FAULT_PORT MOTOR_IO(X2_MOTOR_IDX, _MOTOR_FAULT_PORT)
419 #define X2_MOTOR_FAULT_PIN MOTOR_IO(X2_MOTOR_IDX, _MOTOR_FAULT_PIN)
420 #define X2_MOTOR_FAULT_BIT (1<<X2_MOTOR_FAULT_PIN)
427 #define Y2_STEP_PORT MOTOR_IO(Y2_MOTOR_IDX, _STEP_PORT)
428 #define Y2_STEP_PIN MOTOR_IO(Y2_MOTOR_IDX, _STEP_PIN)
429 #define Y2_STEP_BIT (1<<Y2_STEP_PIN)
430 #define Y2_DIRECTION_PORT MOTOR_IO(Y2_MOTOR_IDX, _DIRECTION_PORT)
431 #define Y2_DIRECTION_PIN MOTOR_IO(Y2_MOTOR_IDX, _DIRECTION_PIN)
432 #define Y2_DIRECTION_BIT (1<<Y2_DIRECTION_PIN)
433 #if mn_has_home(Y2_MOTOR_IDX)
435 #define Y2_HOME_PORT MOTOR_IO(Y2_MOTOR_IDX, _HOME_PORT)
436 #define Y2_HOME_PIN MOTOR_IO(Y2_MOTOR_IDX, _HOME_PIN)
437 #define Y2_HOME_BIT (1<<Y2_HOME_PIN)
439 #elif Y_AUTO_SQUARE && defined(Y_HOME_PIN)
440 #error "Auto squared Y-axis requires second home pin input"
442 #if mn_has_limit(Y2_MOTOR_IDX)
444 #define Y2_LIMIT_PORT MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_PORT)
445 #define Y2_LIMIT_PIN MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_PIN)
446 #define Y2_LIMIT_BIT (1<<Y2_LIMIT_PIN)
447 #elif Y_GANGED_LIM_MAX && !mn_has_limit_max(Y2_MOTOR_IDX)
448 #define Y2_LIMIT_MAX_PORT MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_MAX_PORT)
449 #define Y2_LIMIT_MAX_PIN MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_MAX_PIN)
450 #define Y2_LIMIT_MAX_BIT (1<<Y2_LIMIT_MAX_PIN)
453 #error "Auto squared Y-axis requires second limit pin input"
455 #if mn_has_limit_max(Y2_MOTOR_IDX)
456 #define Y2_LIMIT_MAX_PORT MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_MAX_PORT)
457 #define Y2_LIMIT_MAX_PIN MOTOR_IO(Y2_MOTOR_IDX, _LIMIT_MAX_PIN)
458 #define Y2_LIMIT_MAX_BIT (1<<Y2_LIMIT_MAX_PIN)
460 #if mn_has_enable(Y2_MOTOR_IDX)
461 #define Y2_ENABLE_PORT MOTOR_IO(Y2_MOTOR_IDX, _ENABLE_PORT)
462 #define Y2_ENABLE_PIN MOTOR_IO(Y2_MOTOR_IDX, _ENABLE_PIN)
463 #define Y2_ENABLE_BIT (1<<Y2_ENABLE_PIN)
465 #if mn_has_fault(Y2_MOTOR_IDX)
466 #define Y2_MOTOR_FAULT_PORT MOTOR_IO(Y2_MOTOR_IDX, _MOTOR_FAULT_PORT)
467 #define Y2_MOTOR_FAULT_PIN MOTOR_IO(Y2_MOTOR_IDX, _MOTOR_FAULT_PIN)
468 #define Y2_MOTOR_FAULT_BIT (1<<Y2_MOTOR_FAULT_PIN)
475 #define Z2_STEP_PORT MOTOR_IO(Z2_MOTOR_IDX, _STEP_PORT)
476 #define Z2_STEP_PIN MOTOR_IO(Z2_MOTOR_IDX, _STEP_PIN)
477 #define Z2_STEP_BIT (1<<<Z2_STEP_PIN)
478 #define Z2_DIRECTION_PORT MOTOR_IO(Z2_MOTOR_IDX, _DIRECTION_PORT)
479 #define Z2_DIRECTION_PIN MOTOR_IO(Z2_MOTOR_IDX, _DIRECTION_PIN)
480 #define Z2_DIRECTION_BIT (1<<Z2_DIRECTION_PIN)
481 #if mn_has_home(Z2_MOTOR_IDX)
483 #define Z2_HOME_PORT MOTOR_IO(Z2_MOTOR_IDX, _HOME_PORT)
484 #define Z2_HOME_PIN MOTOR_IO(Z2_MOTOR_IDX, _HOME_PIN)
485 #define Z2_HOME_BIT (1<<Z2_HOME_PIN)
487 #elif Z_AUTO_SQUARE && defined(Z_HOME_PIN)
488 #error "Auto squared Y-axis requires second home pin input"
490 #if mn_has_limit(Z2_MOTOR_IDX)
492 #define Z2_LIMIT_PORT MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_PORT)
493 #define Z2_LIMIT_PIN MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_PIN)
494 #define Z2_LIMIT_BIT (1<<Z2_LIMIT_PIN)
495 #elif Z_GANGED_LIM_MAX && !mn_has_limit_max(Z2_MOTOR_IDX)
496 #define Z2_LIMIT_MAX_PORT MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_MAX_PORT)
497 #define Z2_LIMIT_MAX_PIN MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_MAX_PIN)
498 #define Z2_LIMIT_MAX_BIT (1<<Z2_LIMIT_MAX_PIN)
501 #error "Auto squared Y-axis requires second limit pin input"
503 #if mn_has_limit_max(Z2_MOTOR_IDX)
504 #define Z2_LIMIT_MAX_PORT MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_MAX_PORT)
505 #define Z2_LIMIT_MAX_PIN MOTOR_IO(Z2_MOTOR_IDX, _LIMIT_MAX_PIN)
506 #define Z2_LIMIT_MAX_BIT (1<<Z2_LIMIT_MAX_PIN)
508 #if mn_has_enable(Z2_MOTOR_IDX)
509 #define Z2_ENABLE_PORT MOTOR_IO(Z2_MOTOR_IDX, _ENABLE_PORT)
510 #define Z2_ENABLE_PIN MOTOR_IO(Z2_MOTOR_IDX, _ENABLE_PIN)
511 #define Z2_ENABLE_BIT (1<<Z2_ENABLE_PIN)
513 #if mn_has_fault(Z2_MOTOR_IDX)
514 #define Z2_MOTOR_FAULT_PORT MOTOR_IO(Z2_MOTOR_IDX, _MOTOR_FAULT_PORT)
515 #define Z2_MOTOR_FAULT_PIN MOTOR_IO(Z2_MOTOR_IDX, _MOTOR_FAULT_PIN)
516 #define Z2_MOTOR_FAULT_BIT (1<<Z2_MOTOR_FAULT_PIN)
523 #if defined(X2_HOME_PIN) || defined(Y2_HOME_PIN) || defined(Z2_HOME_PIN)
524 #define DUAL_HOME_SWITCHES
526 #define X2_HOME_BIT 0
529 #define Y2_HOME_BIT 0
532 #define Z2_HOME_BIT 0
534 #define HOME2_MASK (X2_HOME_BIT|Y2_HOME_BIT|Z2_HOME_BIT)
535 #define HOME2_MASK_SUM (X2_HOME_BIT+Y2_HOME_BIT+Z2_HOME_BIT)
538 #define HOME2_MASK_SUM 0
541 #if defined(X2_MOTOR_FAULT_PIN) || defined(Y2_MOTOR_FAULT_PIN) || defined(Z2_MOTOR_FAULT_PIN)
542 #define DUAL_MOTOR_FAULT_SWITCHES
543 #ifndef X2_MOTOR_FAULT_BIT
544 #define X2_MOTOR_FAULT_BIT 0
546 #ifndef Y2_MOTOR_FAULT_BIT
547 #define Y2_MOTOR_FAULT_BIT 0
549 #ifndef Z2_MOTOR_FAULT_BIT
550 #define Z2_MOTOR_FAULT_BIT 0
552 #define MOTOR_FAULT2_MASK (X2_MOTOR_FAULT_BIT|Y2_MOTOR_FAULT_BIT|Z2_MOTOR_FAULT_BIT)
553 #define MOTOR_FAULT2_MASK_SUM (X2_MOTOR_FAULT_BIT+Y2_MOTOR_FAULT_BIT+Z2_MOTOR_FAULT_BIT)
555 #define MOTOR_FAULT2_MASK 0
556 #define MOTOR_FAULT2_MASK_SUM 0
559 #if defined(X2_LIMIT_PIN) || defined(Y2_LIMIT_PIN) || defined(Z2_LIMIT_PIN)
560 #define DUAL_LIMIT_SWITCHES
562 #define X2_LIMIT_BIT 0
565 #define Y2_LIMIT_BIT 0
568 #define Z2_LIMIT_BIT 0
570 #define LIMIT2_MASK (X2_LIMIT_BIT|Y2_LIMIT_BIT|Z2_LIMIT_BIT)
571 #define LIMIT2_MASK_SUM (X2_LIMIT_BIT+Y2_LIMIT_BIT+Z2_LIMIT_BIT)
573 #define LIMIT2_MASK 0
574 #define LIMIT2_MASK_SUM 0
577 #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)
578 #define MAX_LIMIT_SWITCHES
595 #if A_AXIS_IDX >= N_MOTORS
596 #error "No pins are available for A axis motor"
599 #define A_STEP_PORT MOTOR_IO(A_AXIS_IDX, _STEP_PORT)
600 #define A_STEP_PIN MOTOR_IO(A_AXIS_IDX, _STEP_PIN)
601 #define A_STEP_BIT (1<<A_STEP_PIN)
602 #define A_DIRECTION_PORT MOTOR_IO(A_AXIS_IDX, _DIRECTION_PORT)
603 #define A_DIRECTION_PIN MOTOR_IO(A_AXIS_IDX, _DIRECTION_PIN)
604 #define A_DIRECTION_BIT (1<<A_DIRECTION_PIN)
605 #if mn_has_home(A_MOTOR_IDX)
606 #define A_HOME_PORT MOTOR_IO(A_AXIS_IDX, _HOME_PORT)
607 #define A_HOME_PIN MOTOR_IO(A_AXIS_IDX, _HOME_PIN)
608 #define A_HOME_BIT (1<<A_HOME_PIN)
610 #if mn_has_limit(A_AXIS_IDX)
611 #define A_LIMIT_PORT MOTOR_IO(A_AXIS_IDX, _LIMIT_PORT)
612 #define A_LIMIT_PIN MOTOR_IO(A_AXIS_IDX, _LIMIT_PIN)
613 #define A_LIMIT_BIT (1<<A_LIMIT_PIN)
615 #if mn_has_limit_max(A_AXIS_IDX)
616 #define A_LIMIT_MAX_PORT MOTOR_IO(A_AXIS_IDX, _LIMIT_MAX_PORT)
617 #define A_LIMIT_MAX_PIN MOTOR_IO(A_AXIS_IDX, _LIMIT_MAX_PIN)
618 #define A_LIMIT_MAX_BIT (1<<A_LIMIT_MAX_PIN)
620 #if mn_has_enable(A_AXIS_IDX)
621 #define A_ENABLE_PORT MOTOR_IO(A_AXIS_IDX, _ENABLE_PORT)
622 #define A_ENABLE_PIN MOTOR_IO(A_AXIS_IDX, _ENABLE_PIN)
623 #define A_ENABLE_BIT (1<<A_ENABLE_PIN)
625 #if mn_has_fault(A_AXIS_IDX)
626 #define A_MOTOR_FAULT_PORT MOTOR_IO(A_AXIS_IDX, _MOTOR_FAULT_PORT)
627 #define A_MOTOR_FAULT_PIN MOTOR_IO(A_AXIS_IDX, _MOTOR_FAULT_PIN)
628 #define A_MOTOR_FAULT_BIT (1<<A_MOTOR_FAULT_PIN)
647 #if B_AXIS_IDX >= N_MOTORS
648 #error "No pins are available for B axis motor"
651 #define B_STEP_PORT MOTOR_IO(B_AXIS_IDX, _STEP_PORT)
652 #define B_STEP_PIN MOTOR_IO(B_AXIS_IDX, _STEP_PIN)
653 #define B_STEP_BIT (1<<B_STEP_PIN)
654 #define B_DIRECTION_PORT MOTOR_IO(B_AXIS_IDX, _DIRECTION_PORT)
655 #define B_DIRECTION_PIN MOTOR_IO(B_AXIS_IDX, _DIRECTION_PIN)
656 #define B_DIRECTION_BIT (1<<B_DIRECTION_PIN)
657 #if mn_has_home(B_MOTOR_IDX)
658 #define B_HOME_PORT MOTOR_IO(B_AXIS_IDX, _HOME_PORT)
659 #define B_HOME_PIN MOTOR_IO(B_AXIS_IDX, _HOME_PIN)
660 #define B_HOME_BIT (1<<B_HOME_PIN)
662 #if mn_has_limit(B_AXIS_IDX)
663 #define B_LIMIT_PORT MOTOR_IO(B_AXIS_IDX, _LIMIT_PORT)
664 #define B_LIMIT_PIN MOTOR_IO(B_AXIS_IDX, _LIMIT_PIN)
665 #define B_LIMIT_BIT (1<<B_LIMIT_PIN)
667 #if mn_has_limit_max(B_AXIS_IDX)
668 #define B_LIMIT_MAX_PORT MOTOR_IO(B_AXIS_IDX, _LIMIT_MAX_PORT)
669 #define B_LIMIT_MAX_PIN MOTOR_IO(B_AXIS_IDX, _LIMIT_MAX_PIN)
670 #define B_LIMIT_MAX_BIT (1<<B_LIMIT_MAX_PIN)
672 #if mn_has_enable(B_AXIS_IDX)
673 #define B_ENABLE_PORT MOTOR_IO(B_AXIS_IDX, _ENABLE_PORT)
674 #define B_ENABLE_PIN MOTOR_IO(B_AXIS_IDX, _ENABLE_PIN)
675 #define B_ENABLE_BIT (1<<B_ENABLE_PIN)
677 #if mn_has_fault(B_AXIS_IDX)
678 #define B_MOTOR_FAULT_PORT MOTOR_IO(B_AXIS_IDX, _MOTOR_FAULT_PORT)
679 #define B_MOTOR_FAULT_PIN MOTOR_IO(B_AXIS_IDX, _MOTOR_FAULT_PIN)
680 #define B_MOTOR_FAULT_BIT (1<<B_MOTOR_FAULT_PIN)
699 #if C_AXIS_IDX >= N_MOTORS
700 #error "No pins are available for C axis motor"
703 #define C_STEP_PORT MOTOR_IO(C_AXIS_IDX, _STEP_PORT)
704 #define C_STEP_PIN MOTOR_IO(C_AXIS_IDX, _STEP_PIN)
705 #define C_STEP_BIT (1<<C_STEP_PIN)
706 #define C_DIRECTION_PORT MOTOR_IO(C_AXIS_IDX, _DIRECTION_PORT)
707 #define C_DIRECTION_PIN MOTOR_IO(C_AXIS_IDX, _DIRECTION_PIN)
708 #define C_DIRECTION_BIT (1<<C_DIRECTION_PIN)
709 #if mn_has_home(C_MOTOR_IDX)
710 #define C_HOME_PORT MOTOR_IO(C_AXIS_IDX, _HOME_PORT)
711 #define C_HOME_PIN MOTOR_IO(C_AXIS_IDX, _HOME_PIN)
712 #define C_HOME_BIT (1<<C_HOME_PIN)
714 #if mn_has_limit(C_AXIS_IDX)
715 #define C_LIMIT_PORT MOTOR_IO(C_AXIS_IDX, _LIMIT_PORT)
716 #define C_LIMIT_PIN MOTOR_IO(C_AXIS_IDX, _LIMIT_PIN)
717 #define C_LIMIT_BIT (1<<C_LIMIT_PIN)
719 #if mn_has_limit_max(C_AXIS_IDX)
720 #define C_LIMIT_MAX_PORT MOTOR_IO(C_AXIS_IDX, _LIMIT_MAX_PORT)
721 #define C_LIMIT_MAX_PIN MOTOR_IO(C_AXIS_IDX, _LIMIT_MAX_PIN)
722 #define C_LIMIT_MAX_BIT (1<<C_LIMIT_MAX_PIN)
724 #if mn_has_enable(C_AXIS_IDX)
725 #define C_ENABLE_PORT MOTOR_IO(C_AXIS_IDX, _ENABLE_PORT)
726 #define C_ENABLE_PIN MOTOR_IO(C_AXIS_IDX, _ENABLE_PIN)
727 #define C_ENABLE_BIT (1<<C_ENABLE_PIN)
729 #if mn_has_fault(C_AXIS_IDX)
730 #define C_MOTOR_FAULT_PORT MOTOR_IO(C_AXIS_IDX, _MOTOR_FAULT_PORT)
731 #define C_MOTOR_FAULT_PIN MOTOR_IO(C_AXIS_IDX, _MOTOR_FAULT_PIN)
732 #define C_MOTOR_FAULT_BIT (1<<C_MOTOR_FAULT_PIN)
751 #if U_AXIS_IDX >= N_MOTORS
752 #error "No pins are available for U axis motor"
755 #define U_STEP_PORT MOTOR_IO(U_AXIS_IDX, _STEP_PORT)
756 #define U_STEP_PIN MOTOR_IO(U_AXIS_IDX, _STEP_PIN)
757 #define U_STEP_BIT (1<<U_STEP_PIN)
758 #define U_DIRECTION_PORT MOTOR_IO(U_AXIS_IDX, _DIRECTION_PORT)
759 #define U_DIRECTION_PIN MOTOR_IO(U_AXIS_IDX, _DIRECTION_PIN)
760 #define U_DIRECTION_BIT (1<<U_DIRECTION_PIN)
761 #if mn_has_home(U_MOTOR_IDX)
762 #define U_HOME_PORT MOTOR_IO(U_AXIS_IDX, _HOME_PORT)
763 #define U_HOME_PIN MOTOR_IO(U_AXIS_IDX, _HOME_PIN)
764 #define U_HOME_BIT (1<<U_HOME_PIN)
766 #if mn_has_limit(U_AXIS_IDX)
767 #define U_LIMIT_PORT MOTOR_IO(U_AXIS_IDX, _LIMIT_PORT)
768 #define U_LIMIT_PIN MOTOR_IO(U_AXIS_IDX, _LIMIT_PIN)
769 #define U_LIMIT_BIT (1<<U_LIMIT_PIN)
771 #if mn_has_limit_max(U_AXIS_IDX)
772 #define U_LIMIT_MAX_PORT MOTOR_IO(U_AXIS_IDX, _LIMIT_MAX_PORT)
773 #define U_LIMIT_MAX_PIN MOTOR_IO(U_AXIS_IDX, _LIMIT_MAX_PIN)
774 #define U_LIMIT_MAX_BIT (1<<U_LIMIT_MAX_PIN)
776 #if mn_has_enable(U_AXIS_IDX)
777 #define U_ENABLE_PORT MOTOR_IO(U_AXIS_IDX, _ENABLE_PORT)
778 #define U_ENABLE_PIN MOTOR_IO(U_AXIS_IDX, _ENABLE_PIN)
779 #define U_ENABLE_BIT (1<<U_ENABLE_PIN)
781 #if mn_has_fault(U_AXIS_IDX)
782 #define U_MOTOR_FAULT_PORT MOTOR_IO(U_AXIS_IDX, _MOTOR_FAULT_PORT)
783 #define U_MOTOR_FAULT_PIN MOTOR_IO(U_AXIS_IDX, _MOTOR_FAULT_PIN)
784 #define U_MOTOR_FAULT_BIT (1<<U_MOTOR_FAULT_PIN)
803 #if V_AXIS_IDX >= N_MOTORS
804 #error "No pins are available for V axis motor"
807 #define V_STEP_PORT MOTOR_IO(V_AXIS_IDX, _STEP_PORT)
808 #define V_STEP_PIN MOTOR_IO(V_AXIS_IDX, _STEP_PIN)
809 #define V_STEP_BIT (1<<V_STEP_PIN)
810 #define V_DIRECTION_PORT MOTOR_IO(V_AXIS_IDX, _DIRECTION_PORT)
811 #define V_DIRECTION_PIN MOTOR_IO(V_AXIS_IDX, _DIRECTION_PIN)
812 #define V_DIRECTION_BIT (1<<V_DIRECTION_PIN)
813 #if mn_has_home(V_MOTOR_IDX)
814 #define V_HOME_PORT MOTOR_IO(V_AXIS_IDX, _HOME_PORT)
815 #define V_HOME_PIN MOTOR_IO(V_AXIS_IDX, _HOME_PIN)
816 #define V_HOME_BIT (1<<V_HOME_PIN)
818 #if mn_has_limit(V_AXIS_IDX)
819 #define V_LIMIT_PORT MOTOR_IO(V_AXIS_IDX, _LIMIT_PORT)
820 #define V_LIMIT_PIN MOTOR_IO(V_AXIS_IDX, _LIMIT_PIN)
821 #define V_LIMIT_BIT (1<<V_LIMIT_PIN)
823 #if mn_has_limit_max(V_AXIS_IDX)
824 #define V_LIMIT_MAX_PORT MOTOR_IO(V_AXIS_IDX, _LIMIT_MAX_PORT)
825 #define V_LIMIT_MAX_PIN MOTOR_IO(V_AXIS_IDX, _LIMIT_MAX_PIN)
826 #define V_LIMIT_MAX_BIT (1<<V_LIMIT_MAX_PIN)
828 #if mn_has_enable(V_AXIS_IDX)
829 #define V_ENABLE_PORT MOTOR_IO(V_AXIS_IDX, _ENABLE_PORT)
830 #define V_ENABLE_PIN MOTOR_IO(V_AXIS_IDX, _ENABLE_PIN)
831 #define V_ENABLE_BIT (1<<V_ENABLE_PIN)
833 #if mn_has_fault(V_AXIS_IDX)
834 #define V_MOTOR_FAULT_PORT MOTOR_IO(V_AXIS_IDX, _MOTOR_FAULT_PORT)
835 #define V_MOTOR_FAULT_PIN MOTOR_IO(V_AXIS_IDX, _MOTOR_FAULT_PIN)
836 #define V_MOTOR_FAULT_BIT (1<<V_MOTOR_FAULT_PIN)
855 #if W_AXIS_IDX >= N_MOTORS
856 #error "No pins are available for W axis motor"
859 #define W_STEP_PORT MOTOR_IO(W_AXIS_IDX, _STEP_PORT)
860 #define W_STEP_PIN MOTOR_IO(W_AXIS_IDX, _STEP_PIN)
861 #define W_STEP_BIT (1<<W_STEP_PIN)
862 #define W_DIRECTION_PORT MOTOR_IO(W_AXIS_IDX, _DIRECTION_PORT)
863 #define W_DIRECTION_PIN MOTOR_IO(W_AXIS_IDX, _DIRECTION_PIN)
864 #define W_DIRECTION_BIT (1<<W_DIRECTION_PIN)
865 #if mn_has_home(W_MOTOR_IDX)
866 #define W_HOME_PORT MOTOR_IO(W_AXIS_IDX, _HOME_PORT)
867 #define W_HOME_PIN MOTOR_IO(W_AXIS_IDX, _HOME_PIN)
868 #define W_HOME_BIT (1<<W_HOME_PIN)
870 #if mn_has_limit(W_AXIS_IDX)
871 #define W_LIMIT_PORT MOTOR_IO(W_AXIS_IDX, _LIMIT_PORT)
872 #define W_LIMIT_PIN MOTOR_IO(W_AXIS_IDX, _LIMIT_PIN)
873 #define W_LIMIT_BIT (1<<W_LIMIT_PIN)
875 #if mn_has_limit_max(W_AXIS_IDX)
876 #define W_LIMIT_MAX_PORT MOTOR_IO(W_AXIS_IDX, _LIMIT_MAX_PORT)
877 #define W_LIMIT_MAX_PIN MOTOR_IO(W_AXIS_IDX, _LIMIT_MAX_PIN)
878 #define W_LIMIT_MAX_BIT (1<<W_LIMIT_MAX_PIN)
880 #if mn_has_enable(W_AXIS_IDX)
881 #define W_ENABLE_PORT MOTOR_IO(W_AXIS_IDX, _ENABLE_PORT)
882 #define W_ENABLE_PIN MOTOR_IO(W_AXIS_IDX, _ENABLE_PIN)
883 #define W_ENABLE_BIT (1<<W_ENABLE_PIN)
885 #if mn_has_fault(W_AXIS_IDX)
886 #define W_MOTOR_FAULT_PORT MOTOR_IO(W_AXIS_IDX, _MOTOR_FAULT_PORT)
887 #define W_MOTOR_FAULT_PIN MOTOR_IO(W_AXIS_IDX, _MOTOR_FAULT_PIN)
888 #define W_MOTOR_FAULT_BIT (1<<W_MOTOR_FAULT_PIN)
895 #define X_STEP_PORT STEP_PORT
898 #define Y_STEP_PORT STEP_PORT
901 #define Z_STEP_PORT STEP_PORT
903 #if defined(A_AXIS) && !defined(A_STEP_PORT)
904 #define A_STEP_PORT STEP_PORT
906 #if defined(B_AXIS) && !defined(B_STEP_PORT)
907 #define B_STEP_PORT STEP_PORT
909 #if defined(C_AXIS) && !defined(C_STEP_PORT)
910 #define C_STEP_PORT STEP_PORT
912 #if defined(U_AXIS) && !defined(U_STEP_PORT)
913 #define U_STEP_PORT STEP_PORT
915 #if defined(V_AXIS) && !defined(V_STEP_PORT)
916 #define V_STEP_PORT STEP_PORT
921 #define X_STEP_BIT (1<<X_STEP_PIN)
924 #define Y_STEP_BIT (1<<Y_STEP_PIN)
927 #define Z_STEP_BIT (1<<Z_STEP_PIN)
930 #ifdef DIRECTION_PORT
931 #ifndef X_DIRECTION_PORT
932 #define X_DIRECTION_PORT DIRECTION_PORT
934 #ifndef Y_DIRECTION_PORT
935 #define Y_DIRECTION_PORT DIRECTION_PORT
937 #ifndef Z_DIRECTION_PORT
938 #define Z_DIRECTION_PORT DIRECTION_PORT
940 #if defined(A_AXIS) && !defined(A_DIRECTION_PORT)
941 #define A_DIRECTION_PORT DIRECTION_PORT
943 #if defined(B_AXIS) && !defined(B_DIRECTION_PORT)
944 #define B_DIRECTION_PORT DIRECTION_PORT
946 #if defined(C_AXIS) && !defined(C_DIRECTION_PORT)
947 #define C_DIRECTION_PORT DIRECTION_PORT
949 #if defined(U_AXIS) && !defined(U_DIRECTION_PORT)
950 #define U_DIRECTION_PORT DIRECTION_PORT
952 #if defined(V_AXIS) && !defined(V_DIRECTION_PORT)
953 #define V_DIRECTION_PORT DIRECTION_PORT
957 #ifndef X_DIRECTION_BIT
958 #define X_DIRECTION_BIT (1<<X_DIRECTION_PIN)
960 #ifndef Y_DIRECTION_BIT
961 #define Y_DIRECTION_BIT (1<<Y_DIRECTION_PIN)
963 #ifndef Z_DIRECTION_BIT
964 #define Z_DIRECTION_BIT (1<<Z_DIRECTION_PIN)
969 #define X_LIMIT_PORT LIMIT_PORT
972 #define Y_LIMIT_PORT LIMIT_PORT
975 #define Z_LIMIT_PORT LIMIT_PORT
981 #define X_HOME_BIT (1<<X_HOME_PIN)
988 #define Y_HOME_BIT (1<<Y_HOME_PIN)
995 #define Z_HOME_BIT (1<<Z_HOME_PIN)
1001 #ifndef X_MOTOR_FAULT_BIT
1002 #ifdef X_MOTOR_FAULT_PIN
1003 #define X_MOTOR_FAULT_BIT (1<<X_MOTOR_FAULT_PIN)
1005 #define X_MOTOR_FAULT_BIT 0
1008 #ifndef Y_MOTOR_FAULT_BIT
1009 #ifdef Y_MOTOR_FAULT_PIN
1010 #define Y_MOTOR_FAULT_BIT (1<<Y_MOTOR_FAULT_PIN)
1012 #define Y_MOTOR_FAULT_BIT 0
1015 #ifndef Z_MOTOR_FAULT_BIT
1016 #ifdef Z_MOTOR_FAULT_PIN
1017 #define Z_MOTOR_FAULT_BIT (1<<Z_MOTOR_FAULT_PIN)
1019 #define Z_MOTOR_FAULT_BIT 0
1024 #define X_LIMIT_BIT (1<<X_LIMIT_PIN)
1027 #define Y_LIMIT_BIT (1<<Y_LIMIT_PIN)
1030 #define Z_LIMIT_BIT (1<<Z_LIMIT_PIN)
1032 #ifndef X_LIMIT_MAX_BIT
1033 #ifdef X_LIMIT_PIN_MAX
1034 #define X_LIMIT_MAX_BIT (1<<X_LIMIT_PIN_MAX)
1036 #define X_LIMIT_MAX_BIT 0
1039 #ifndef Y_LIMIT_MAX_BIT
1040 #ifdef Y_LIMIT_PIN_MAX
1041 #define Y_LIMIT_MAX_BIT (1<<Y_LIMIT_PIN_MAX)
1043 #define Y_LIMIT_MAX_BIT 0
1046 #ifndef Z_LIMIT_MAX_BIT
1047 #ifdef Z_LIMIT_PIN_MAX
1048 #define Z_LIMIT_MAX_BIT (1<<Z_LIMIT_PIN_MAX)
1050 #define Z_LIMIT_MAX_BIT 0
1054 #define LIMIT_MAX_MASK_BASE (X_LIMIT_MAX_BIT|Y_LIMIT_MAX_BIT|Z_LIMIT_MAX_BIT)
1055 #define LIMIT_MAX_MASK_BASE_SUM (X_LIMIT_MAX_BIT+Y_LIMIT_MAX_BIT+Z_LIMIT_MAX_BIT)
1058 #define LIMIT_MAX_MASK LIMIT_MAX_MASK_BASE
1059 #define LIMIT_MAX_MASK_SUM LIMIT_MAX_MASK_BASE_SUM
1061 #define LIMIT_MAX_MASK (LIMIT_MAX_MASK_BASE|M3_LIMIT_MAX_BIT)
1062 #define LIMIT_MAX_MASK_SUM (LIMIT_MAX_MASK_BASE_SUM+M3_LIMIT_MAX_BIT)
1064 #define LIMIT_MAX_MASK (LIMIT_MAX_MASK_BASE|M3_LIMIT_MAX_BIT|M4_LIMIT_MAX_BIT)
1065 #define LIMIT_MAX_MASK_SUM (LIMIT_MAX_MASK_BASE_SUM+M3_LIMIT_MAX_BIT+M4_LIMIT_MAX_BIT)
1067 #define LIMIT_MAX_MASK (LIMIT_MAX_MASK_BASE|M3_LIMIT_MAX_BIT|M4_LIMIT_MAX_BIT|M5_LIMIT_MAX_BIT)
1068 #define LIMIT_MAX_MASK_SUM (LIMIT_MAX_MASK_BASE_SUM+M3_LIMIT_MAX_BIT+M4_LIMIT_MAX_BIT+M5_LIMIT_MAX_BIT)
1070 #define LIMIT_MAX_MASK (LIMIT_MAX_MASK_BASE|M3_LIMIT_MAX_BIT|M4_LIMIT_MAX_BIT|M5_LIMIT_MAX_BIT|M6_LIMIT_MAX_BIT)
1071 #define LIMIT_MAX_MASK_SUM (LIMIT_MAX_MASK_BASE_SUM+M3_LIMIT_MAX_BIT+M4_LIMIT_MAX_BIT+M5_LIMIT_MAX_BIT+M6_LIMIT_MAX_BIT)
1073 #define LIMIT_MAX_MASK (LIMIT_MAX_MASK_BASE|M3_LIMIT_MAX_BIT|M4_LIMIT_MAX_BIT|M5_LIMIT_MAX_BIT|M6_LIMIT_MAX_BIT|M7_LIMIT_MAX_BIT)
1074 #define LIMIT_MAX_MASK_SUM (LIMIT_MAX_MASK_BASE_SUM+M3_LIMIT_MAX_BIT+M4_LIMIT_MAX_BIT+M5_LIMIT_MAX_BIT+M6_LIMIT_MAX_BIT+M7_LIMIT_MAX_BIT)
1077 #if !defined(X_ENABLE_BIT) && defined(X_ENABLE_PIN)
1078 #define X_ENABLE_BIT (1<<X_ENABLE_PIN)
1080 #if !defined(Y_ENABLE_BIT) && defined(Y_ENABLE_PIN)
1081 #define Y_ENABLE_BIT (1<<Y_ENABLE_PIN)
1083 #if !defined(Z_ENABLE_BIT) && defined(Z_ENABLE_PIN)
1084 #define Z_ENABLE_BIT (1<<Z_ENABLE_PIN)
1089 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT)
1091 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|M3_STEP_BIT)
1093 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|M3_STEP_BIT|M4_STEP_BIT)
1095 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|M3_STEP_BIT|M4_STEP_BIT|M5_STEP_BIT)
1097 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|M3_STEP_BIT|M4_STEP_BIT|M5_STEP_BIT|M6_STEP_BIT)
1099 #define STEP_MASK (X_STEP_BIT|Y_STEP_BIT|Z_STEP_BIT|M3_STEP_BIT|M4_STEP_BIT|M5_STEP_BIT|M6_STEP_BIT|M7_STEP_BIT)
1103 #ifndef DIRECTION_MASK
1105 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT)
1107 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|M3_DIRECTION_BIT)
1109 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|M3_DIRECTION_BIT|M4_DIRECTION_BIT)
1111 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|M3_DIRECTION_BIT|M4_DIRECTION_BIT|M5_DIRECTION_BIT)
1113 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|M3_DIRECTION_BIT|M4_DIRECTION_BIT|M5_DIRECTION_BIT|M6_DIRECTION_BIT)
1115 #define DIRECTION_MASK (X_DIRECTION_BIT|Y_DIRECTION_BIT|Z_DIRECTION_BIT|M3_DIRECTION_BIT|M4_DIRECTION_BIT|M5_DIRECTION_BIT|M6_DIRECTION_BIT|M7_DIRECTION_BIT)
1119 #if defined(STEPPERS_ENABLE_PIN) && !defined(STEPPERS_ENABLE_BIT)
1120 #define STEPPERS_ENABLE_BIT (1<<STEPPERS_ENABLE_PIN)
1123 #ifndef STEPPERS_ENABLE_MASK
1125 #ifdef STEPPERS_ENABLE_BIT
1126 #define STEPPERS_ENABLE_MASK STEPPERS_ENABLE_BIT
1130 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT)
1132 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|M3_ENABLE_BIT)
1134 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|M3_ENABLE_BIT|M4_ENABLE_BIT)
1136 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|M3_ENABLE_BIT|M4_ENABLE_BIT|M5_ENABLE_BIT)
1138 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|M3_ENABLE_BIT|M4_ENABLE_BIT|M5_ENABLE_BIT|M6_ENABLE_BIT)
1140 #define STEPPERS_ENABLE_MASK (X_ENABLE_BIT|Y_ENABLE_BIT|Z_ENABLE_BIT|M3_ENABLE_BIT|M4_ENABLE_BIT|M5_ENABLE_BIT|M6_ENABLE_BIT|M7_ENABLE_BIT)
1148 #define HOME_MASK_BASE (X_HOME_BIT|Y_HOME_BIT|Z_HOME_BIT|HOME2_MASK)
1149 #define HOME_MASK_BASE_SUM (X_HOME_BIT+Y_HOME_BIT+Z_HOME_BIT+HOME2_MASK_SUM)
1152 #define HOME_MASK HOME_MASK_BASE
1153 #define HOME_MASK_SUM HOME_MASK_BASE_SUM
1154 #define HOME_MIN_CAP AXES_BITMASK
1156 #define HOME_MASK (HOME_MASK_BASE|M3_HOME_BIT)
1157 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+M3_HOME_BIT)
1159 #define HOME_MASK (HOME_MASK_BASE|M3_HOME_BIT|M4_HOME_BIT)
1160 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+M3_HOME_BIT+M4_HOME_BIT)
1162 #define HOME_MASK (HOME_MASK_BASE|M3_HOME_BIT|M4_HOME_BIT|M5_HOME_BIT)
1163 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+M3_HOME_BIT+M4_HOME_BIT+M5_HOME_BIT)
1165 #define HOME_MASK (HOME_MASK_BASE|M3_HOME_BIT|M4_HOME_BIT|M5_HOME_BIT|M6_HOME_BIT)
1166 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+M3_HOME_BIT+M4_HOME_BIT+M5_HOME_BIT+M6_HOME_BIT)
1168 #define HOME_MASK (HOME_MASK_BASE|M3_HOME_BIT|M4_HOME_BIT|M5_HOME_BIT|M6_HOME_BIT|M7_HOME_BIT)
1169 #define HOME_MASK_SUM (HOME_MASK_BASE_SUM+M3_HOME_BIT+M4_HOME_BIT+M5_HOME_BIT+M6_HOME_BIT+M7_HOME_BIT)
1177 #define LIMIT_MASK_BASE (X_LIMIT_BIT|Y_LIMIT_BIT|LIMIT2_MASK|LIMIT_MAX_MASK)
1178 #define LIMIT_MASK_BASE_SUM (X_LIMIT_BIT+Y_LIMIT_BIT+LIMIT2_MASK_SUM+LIMIT_MAX_SUM)
1180 #define LIMIT_MASK_BASE (X_LIMIT_BIT|Y_LIMIT_BIT|Z_LIMIT_BIT|LIMIT2_MASK|LIMIT_MAX_MASK)
1181 #define LIMIT_MASK_BASE_SUM (X_LIMIT_BIT+Y_LIMIT_BIT+Z_LIMIT_BIT+LIMIT2_MASK_SUM+LIMIT_MAX_MASK_SUM)
1185 #define LIMIT_MASK LIMIT_MASK_BASE
1186 #define LIMIT_MASK_SUM LIMIT_MASK_BASE_SUM
1187 #define LIMIT_MIN_CAP AXES_BITMASK
1189 #define LIMIT_MASK (LIMIT_MASK_BASE|M3_LIMIT_BIT)
1190 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+M3_LIMIT_BIT)
1192 #define LIMIT_MASK (LIMIT_MASK_BASE|M3_LIMIT_BIT|M4_LIMIT_BIT)
1193 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+M3_LIMIT_BIT+M4_LIMIT_BIT)
1195 #define LIMIT_MASK (LIMIT_MASK_BASE|M3_LIMIT_BIT|M4_LIMIT_BIT|M5_LIMIT_BIT)
1196 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+M3_LIMIT_BIT+M4_LIMIT_BIT+M5_LIMIT_BIT)
1198 #define LIMIT_MASK (LIMIT_MASK_BASE|M3_LIMIT_BIT|M4_LIMIT_BIT|M5_LIMIT_BIT|M6_LIMIT_BIT)
1199 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+M3_LIMIT_BIT+M4_LIMIT_BIT+M5_LIMIT_BIT+M6_LIMIT_BIT)
1201 #define LIMIT_MASK (LIMIT_MASK_BASE|M3_LIMIT_BIT|M4_LIMIT_BIT|M5_LIMIT_BIT|M6_LIMIT_BIT|M7_LIMIT_BIT)
1202 #define LIMIT_MASK_SUM (LIMIT_MASK_BASE_SUM+M3_LIMIT_BIT+M4_LIMIT_BIT+M5_LIMIT_BIT+M6_LIMIT_BIT+M7_LIMIT_BIT)
1207 #ifndef MOTOR_FAULT_MASK
1209 #define MOTOR_FAULT_MASK_BASE (X_MOTOR_FAULT_BIT|Y_MOTOR_FAULT_BIT|Z_MOTOR_FAULT_BIT|MOTOR_FAULT2_MASK)
1210 #define MOTOR_FAULT_MASK_BASE_SUM (X_MOTOR_FAULT_BIT+Y_MOTOR_FAULT_BIT+Z_MOTOR_FAULT_BIT+MOTOR_FAULT2_MASK_SUM)
1213 #define MOTOR_FAULT_MASK MOTOR_FAULT_MASK_BASE
1214 #define MOTOR_FAULT_MASK_SUM MOTOR_FAULT_MASK_BASE_SUM
1215 #define MOTOR_FAULT_MIN_CAP AXES_BITMASK
1217 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|A_MOTOR_FAULT_BIT)
1218 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+A_MOTOR_FAULT_BIT)
1220 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|M3_MOTOR_FAULT_BIT|M4_MOTOR_FAULT_BIT)
1221 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+M3_MOTOR_FAULT_BIT+M4_MOTOR_FAULT_BIT)
1223 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|M3_MOTOR_FAULT_BIT|M4_MOTOR_FAULT_BIT|M5_MOTOR_FAULT_BIT)
1224 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+M3_MOTOR_FAULT_BIT+M4_MOTOR_FAULT_BIT+M5_MOTOR_FAULT_BIT)
1226 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|M3_MOTOR_FAULT_BIT|M4_MOTOR_FAULT_BIT|M5_MOTOR_FAULT_BIT|M6_MOTOR_FAULT_BIT)
1227 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+M3_MOTOR_FAULT_BIT+M4_MOTOR_FAULT_BIT+M5_MOTOR_FAULT_BIT+M6_MOTOR_FAULT_BIT)
1229 #define MOTOR_FAULT_MASK (MOTOR_FAULT_MASK_BASE|M3_MOTOR_FAULT_BIT|M4_MOTOR_FAULT_BIT|M5_MOTOR_FAULT_BIT|M6_MOTOR_FAULT_BIT|M7_MOTOR_FAULT_BIT)
1230 #define MOTOR_FAULT_MASK_SUM (MOTOR_FAULT_MASK_BASE_SUM+M3_MOTOR_FAULT_BIT+M4_MOTOR_FAULT_BIT+M5_MOTOR_FAULT_BIT+M6_MOTOR_FAULT_BIT+M7_MOTOR_FAULT_BIT)
1247 else switch (motor.
id) {
1316 #ifdef A_LIMIT_MAX_BIT
1319 #ifdef B_LIMIT_MAX_BIT
1322 #ifdef C_LIMIT_MAX_BIT
1325 #ifdef U_LIMIT_MAX_BIT
1328 #ifdef V_LIMIT_MAX_BIT
1385 #if MOTOR_FAULT_MASK
1387 #if X_MOTOR_FAULT_BIT
1388 motor_fault.
a.
x =
On;
1390 #if Y_MOTOR_FAULT_BIT
1391 motor_fault.
a.
y =
On;
1393 #if Z_MOTOR_FAULT_BIT
1394 motor_fault.
a.
z =
On;
1396 #ifdef A_MOTOR_FAULT_BIT
1397 motor_fault.
a.a =
On;
1399 #ifdef B_MOTOR_FAULT_BIT
1400 motor_fault.
a.b =
On;
1402 #ifdef C_MOTOR_FAULT_BIT
1403 motor_fault.
a.c =
On;
1405 #ifdef U_MOTOR_FAULT_BIT
1406 motor_fault.
a.u =
On;
1408 #ifdef V_MOTOR_FAULT_BIT
1409 motor_fault.
a.v =
On;
1412 #ifdef X2_MOTOR_FAULT_BIT
1413 motor_fault.
b.
x =
On;
1415 #ifdef Y2_MOTOR_FAULT_BIT
1416 motor_fault.
b.
y =
On;
1418 #ifdef Z2_MOTOR_FAULT_BIT
1419 motor_fault.
b.
z =
On;
1428 #pragma GCC diagnostic pop
#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:230
#define N_GANGED
Definition: motor_pins.h:1236
#define X_AXIS
Definition: nuts_bolts.h:71
#define Z_AXIS
Definition: nuts_bolts.h:73
#define On
Definition: nuts_bolts.h:36
#define Y_AXIS
Definition: nuts_bolts.h:72
Home switches struct, consists of two packed axes_signals_t structs.
Definition: nuts_bolts.h:396
axes_signals_t a
Primary home switches status, optional. Limit signals are used for homing if not available.
Definition: nuts_bolts.h:397
axes_signals_t b
Secondary home switch(es) status, required for auto squaring enabled axes if primary switches are ava...
Definition: nuts_bolts.h:398
uint8_t x
Definition: nuts_bolts.h:251
uint8_t y
Definition: nuts_bolts.h:252
uint8_t z
Definition: nuts_bolts.h:274
Limit switches struct, consists of four packed axes_signals_t structs in 32 bits.
Definition: nuts_bolts.h:385
axes_signals_t min
Min limit switches status, required.
Definition: nuts_bolts.h:388
axes_signals_t min2
Secondary min limit switch(es) status, required for auto squaring enabled axes.
Definition: nuts_bolts.h:390
axes_signals_t max
Max limit switches status, optional.
Definition: nuts_bolts.h:389
Motor vs. axis mapping NOTE: id and axis values are equal for primary motors, unequal for secondary (...
Definition: hal.h:219
uint32_t axis
Definition: hal.h:223
uint32_t id
Definition: hal.h:222