grblHAL core  20250104
crossbar.h
Go to the documentation of this file.
1 /*
2  crossbar.h - signal crossbar definitions
3 
4  Part of grblHAL
5 
6  Copyright (c) 2021-2024 Terje Io
7 
8  grblHAL 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  grblHAL 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 grblHAL. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #ifndef _CROSSBAR_H_
23 #define _CROSSBAR_H_
24 
25 #include "nuts_bolts.h"
26 
27 typedef enum {
28 // NOTE: the sequence of the following enums MUST match the control_signals_t layout
44 // end control_signals_t sequence
103 // Output pins
192 // Multipin peripherals
207  Input_KeypadStrobe, // To be deprecated? Use Input_I2CStrobe instead.
216 // Single pin bidirectional peripherals
227 
228 #define PIN_ISINPUT(pin) (pin < Outputs)
229 #define PIN_ISOUTPUT(pin) (pin >= Outputs && pin < Bidirectional)
230 #define PIN_ISBIDIRECTIONAL(pin) (pin >= Bidirectional)
231 
232 typedef struct {
233  pin_function_t function;
234  const char *name;
235 } pin_name_t;
236 
237 PROGMEM static const pin_name_t pin_names[] = {
238  { .function = Input_Reset, .name = "Reset" },
239  { .function = Input_FeedHold, .name = "Feed hold" },
240  { .function = Input_CycleStart, .name = "Cycle start" },
241  { .function = Input_SafetyDoor, .name = "Safety door" },
242  { .function = Input_BlockDelete, .name = "Block delete" },
243  { .function = Input_StopDisable, .name = "Stop disable" },
244  { .function = Input_EStop, .name = "Emergency stop" },
245  { .function = Input_ProbeDisconnect, .name = "Probe disconnect" },
246  { .function = Input_MotorFault, .name = "Motor fault" },
247  { .function = Input_MotorWarning, .name = "Motor warning" },
248  { .function = Input_LimitsOverride, .name = "Limits override" },
249  { .function = Input_SingleBlock, .name = "Single block" },
250  { .function = Input_ProbeOvertravel, .name = "Probe overtravel" },
251  { .function = Input_Probe, .name = "Probe" },
252  { .function = Input_Toolsetter, .name = "Toolsetter" },
253  { .function = Input_ToolsetterOvertravel, .name = "Toolsetter overtravel" },
254  { .function = Input_MPGSelect, .name = "MPG mode select" },
255  { .function = Input_LimitX, .name = "X limit min" },
256  { .function = Input_LimitX_2, .name = "X limit min 2" },
257  { .function = Input_LimitX_Max, .name = "X limit max" },
258  { .function = Input_HomeX, .name = "X home" },
259  { .function = Input_HomeX_2, .name = "X home 2" },
260  { .function = Input_LimitY, .name = "Y limit min" },
261  { .function = Input_LimitY_2, .name = "Y limit min 2" },
262  { .function = Input_LimitY_Max, .name = "Y limit max" },
263  { .function = Input_HomeY, .name = "Y home" },
264  { .function = Input_HomeY_2, .name = "Y home 2" },
265  { .function = Input_LimitZ, .name = "Z limit min" },
266  { .function = Input_LimitZ_2, .name = "Z limit min 2" },
267  { .function = Input_LimitZ_Max, .name = "Z limit max" },
268  { .function = Input_HomeZ, .name = "Z home" },
269  { .function = Input_HomeZ_2, .name = "Z home 2" },
270 #ifndef NO_SETTINGS_DESCRIPTIONS
271  { .function = Input_SpindleIndex, .name = "Spindle index" },
272  { .function = Input_SpindlePulse, .name = "Spindle pulse" },
273  { .function = Input_Aux0, .name = "Aux in 0" },
274  { .function = Input_Aux1, .name = "Aux in 1" },
275  { .function = Input_Aux2, .name = "Aux in 2" },
276  { .function = Input_Aux3, .name = "Aux in 3" },
277  { .function = Input_Aux4, .name = "Aux in 4" },
278  { .function = Input_Aux5, .name = "Aux in 5" },
279  { .function = Input_Aux6, .name = "Aux in 6" },
280  { .function = Input_Aux7, .name = "Aux in 7" },
281  { .function = Input_Aux8, .name = "Aux in 8" },
282  { .function = Input_Aux9, .name = "Aux in 9" },
283  { .function = Input_Aux10, .name = "Aux in 10" },
284  { .function = Input_Aux11, .name = "Aux in 11" },
285  { .function = Input_Analog_Aux0, .name = "Aux analog in 0" },
286  { .function = Input_Analog_Aux1, .name = "Aux analog in 1" },
287  { .function = Input_Analog_Aux2, .name = "Aux analog in 2" },
288  { .function = Input_Analog_Aux3, .name = "Aux analog in 3" },
289  { .function = Input_Analog_Aux4, .name = "Aux analog in 4" },
290  { .function = Input_Analog_Aux5, .name = "Aux analog in 5" },
291  { .function = Input_Analog_Aux6, .name = "Aux analog in 6" },
292  { .function = Input_Analog_Aux7, .name = "Aux analog in 7" },
293 #endif
294  { .function = Output_StepX, .name = "X step" },
295  { .function = Output_StepX_2, .name = "X2 step" },
296  { .function = Output_StepY, .name = "Y step" },
297  { .function = Output_StepY_2, .name = "Y2 step" },
298  { .function = Output_StepZ, .name = "Z step" },
299  { .function = Output_StepZ_2, .name = "Z2 step" },
300  { .function = Output_DirX, .name = "X dir" },
301  { .function = Output_DirX_2, .name = "X2 dir" },
302  { .function = Output_DirY, .name = "Y dir" },
303  { .function = Output_DirY_2, .name = "Y2 dir" },
304  { .function = Output_DirZ, .name = "Z dir" },
305  { .function = Output_DirZ_2, .name = "Z2 dir" },
306  { .function = Output_StepperPower, .name = "Stepper power" },
307  { .function = Output_StepperEnable, .name = "Steppers enable" },
308  { .function = Output_StepperEnableX, .name = "X enable" },
309  { .function = Output_StepperEnableY, .name = "Y enable" },
310  { .function = Output_StepperEnableZ, .name = "Z enable" },
311  { .function = Output_StepperEnableXY, .name = "XY enable" },
312 #ifdef A_AXIS
313  { .function = Output_StepA, .name = "A step" },
314  { .function = Output_DirA, .name = "A dir" },
315  { .function = Output_StepperEnableA, .name = "A enable" },
316  { .function = Input_LimitA, .name = "A limit min" },
317  { .function = Input_LimitA_Max, .name = "A limit max" },
318  { .function = Input_HomeA, .name = "A home" },
319 #endif
320 #ifdef B_AXIS
321  { .function = Output_StepB, .name = "B step" },
322  { .function = Output_DirB, .name = "B dir" },
323  { .function = Output_StepperEnableB, .name = "B enable" },
324  { .function = Output_StepperEnableAB, .name = "AB enable" },
325  { .function = Input_LimitB, .name = "B limit min" },
326  { .function = Input_LimitB_Max, .name = "B limit max" },
327  { .function = Input_HomeB, .name = "B home" },
328 #endif
329 #ifdef C_AXIS
330  { .function = Output_StepC, .name = "C step" },
331  { .function = Output_DirC, .name = "C dir" },
332  { .function = Output_StepperEnableC, .name = "C enable" },
333  { .function = Input_LimitC, .name = "C limit min" },
334  { .function = Input_LimitC_Max, .name = "C limit max" },
335  { .function = Input_HomeC, .name = "C home" },
336 #endif
337 #ifdef U_AXIS
338  { .function = Output_StepU, .name = "U step" },
339  { .function = Output_DirU, .name = "U dir" },
340  { .function = Output_StepperEnableU, .name = "U enable" },
341  { .function = Input_LimitU, .name = "U limit min" },
342  { .function = Input_LimitU_Max, .name = "U limit max" },
343  { .function = Input_HomeU, .name = "U home" },
344 #endif
345 #ifdef V_AXIS
346  { .function = Output_StepV, .name = "V step" },
347  { .function = Output_DirV, .name = "V dir" },
348  { .function = Output_StepperEnableV, .name = "V enable" },
349  { .function = Input_LimitV, .name = "V limit min" },
350  { .function = Input_LimitV_Max, .name = "V limit max" },
351  { .function = Input_HomeV, .name = "V home" },
352 #endif
353 #ifndef NO_SETTINGS_DESCRIPTIONS
354  { .function = Output_MotorChipSelect, .name = "Motor CS" },
355  { .function = Output_MotorChipSelectX, .name = "Motor CSX" },
356  { .function = Output_MotorChipSelectY, .name = "Motor CSY" },
357  { .function = Output_MotorChipSelectZ, .name = "Motor CSZ" },
358  { .function = Output_MotorChipSelectM3, .name = "Motor CSM3" },
359  { .function = Output_MotorChipSelectM4, .name = "Motor CSM4" },
360  { .function = Output_MotorChipSelectM5, .name = "Motor CSM5" },
361  { .function = Output_MotorChipSelectM6, .name = "Motor CSM6" },
362  { .function = Output_MotorChipSelectM7, .name = "Motor CSM7" },
363  { .function = Output_SpindleOn, .name = "Spindle on" },
364  { .function = Output_SpindleDir, .name = "Spindle direction" },
365  { .function = Output_SpindlePWM, .name = "Spindle PWM" },
366  { .function = Output_Spindle1On, .name = "Spindle 2 on" },
367  { .function = Output_Spindle1Dir, .name = "Spindle 2 direction" },
368  { .function = Output_Spindle1PWM, .name = "Spindle 2 PWM" },
369  { .function = Output_CoolantMist, .name = "Mist" },
370  { .function = Output_CoolantFlood, .name = "Flood" },
371  { .function = Output_Aux0, .name = "Aux out 0" },
372  { .function = Output_Aux1, .name = "Aux out 1" },
373  { .function = Output_Aux2, .name = "Aux out 2" },
374  { .function = Output_Aux3, .name = "Aux out 3" },
375  { .function = Output_Aux4, .name = "Aux out 4" },
376  { .function = Output_Aux5, .name = "Aux out 5" },
377  { .function = Output_Aux6, .name = "Aux out 6" },
378  { .function = Output_Aux7, .name = "Aux out 7" },
379  { .function = Output_Aux8, .name = "Aux out 8" },
380  { .function = Output_Aux9, .name = "Aux out 9" },
381  { .function = Output_Aux10, .name = "Aux out 10" },
382  { .function = Output_Aux11, .name = "Aux out 11" },
383  { .function = Output_Aux12, .name = "Aux out 12" },
384  { .function = Output_Aux13, .name = "Aux out 13" },
385  { .function = Output_Aux14, .name = "Aux out 14" },
386  { .function = Output_Aux15, .name = "Aux out 15" },
387  { .function = Output_Analog_Aux0, .name = "Aux analog out 0" },
388  { .function = Output_Analog_Aux1, .name = "Aux analog out 1" },
389  { .function = Output_Analog_Aux2, .name = "Aux analog out 2" },
390  { .function = Output_Analog_Aux3, .name = "Aux analog out 3" },
391  { .function = Output_Analog_Aux4, .name = "Aux analog out 4" },
392  { .function = Output_Analog_Aux5, .name = "Aux analog out 5" },
393  { .function = Output_Analog_Aux6, .name = "Aux analog out 6" },
394  { .function = Output_Analog_Aux7, .name = "Aux analog out 7" },
395  { .function = Output_LED, .name = "LED" },
396  { .function = Output_LED_R, .name = "LED R" },
397  { .function = Output_LED_G, .name = "LED G" },
398  { .function = Output_LED_B, .name = "LED B" },
399  { .function = Output_LED_W, .name = "LED W" },
400  { .function = Output_LED_Adressable, .name = "LED adressable" },
401  { .function = Output_LED1_Adressable, .name = "LED adressable 1" },
402  { .function = Output_CoProc_Reset, .name = "CoProc Reset" },
403  { .function = Output_CoProc_Boot0, .name = "CoProc Boot0" },
404  { .function = Input_MISO, .name = "MISO" },
405  { .function = Output_MOSI, .name = "MOSI" },
406  { .function = Output_SPICLK, .name = "SPI CLK" },
407  { .function = Output_SPICS, .name = "SPI CS" },
408  { .function = Output_FlashCS, .name = "Flash CS" },
409  { .function = Output_SdCardCS, .name = "SD card CS" },
410  { .function = Input_SdCardDetect, .name = "SD card detect" },
411  { .function = Output_SPIRST, .name = "SPI reset" },
412  { .function = Input_SPIIRQ, .name = "SPI IRQ" },
413  { .function = Output_I2CSCK, .name = "I2C SCK" },
414  { .function = Bidirectional_SDA, .name = "I2C SDA" },
415  { .function = Input_KeypadStrobe, .name = "Keypad strobe" },
416  { .function = Input_I2CStrobe, .name = "I2C strobe" },
417  { .function = Input_RX, .name = "RX" },
418  { .function = Output_TX, .name = "TX" },
419  { .function = Output_RTS, .name = "RTS" },
420  { .function = Input_QEI_A, .name = "QEI A" },
421  { .function = Input_QEI_B, .name = "QEI B" },
422  { .function = Input_QEI_Select, .name = "QEI select" },
423  { .function = Input_QEI_Index, .name = "QEI index" },
424  { .function = Bidirectional_MotorUARTX, .name = "UART X" },
425  { .function = Bidirectional_MotorUARTY, .name = "UART Y" },
426  { .function = Bidirectional_MotorUARTZ, .name = "UART Z" },
427  { .function = Bidirectional_MotorUARTM3, .name = "UART M3" },
428  { .function = Bidirectional_MotorUARTM4, .name = "UART M4" },
429  { .function = Bidirectional_MotorUARTM5, .name = "UART M5" },
430  { .function = Bidirectional_MotorUARTM6, .name = "UART M6" },
431  { .function = Bidirectional_MotorUARTM7, .name = "UART M7" }
432 #endif
433 };
434 
435 typedef enum {
461 // Interrupt capable pins that may have debounce processing enabled
463  PinGroup_Limit = (1<<9),
464  PinGroup_LimitMax = (1<<10),
465  PinGroup_Probe = (1<<11),
466  PinGroup_Keypad = (1<<12),
467  PinGroup_MPG = (1<<13),
468  PinGroup_QEI = (1<<14),
473  PinGroup_SdCard = (1<<19),
474  PinGroup_AuxInput = (1<<20)
476 
478 typedef enum {
479  IRQ_Mode_None = 0b00000,
480  IRQ_Mode_Rising = 0b00001,
481  IRQ_Mode_Falling = 0b00010,
483  IRQ_Mode_Change = 0b00100,
484  IRQ_Mode_Edges = 0b00111,
485  IRQ_Mode_High = 0b01000,
486  IRQ_Mode_Low = 0b10000,
487  IRQ_Mode_All = 0b11111
489 
490 typedef enum {
492  IRQ_SPI
494 
495 typedef bool (*irq_callback_ptr)(uint_fast8_t id, bool level);
496 
497 typedef struct driver_irq_handler {
502 
504 typedef enum {
505  PullMode_None = 0b00,
506  PullMode_Up = 0b01,
507  PullMode_Down = 0b10,
508  PullMode_UpDown = 0b11
510 
511 #define PINMODE_NONE (0)
512 #define PINMODE_OUTPUT (1U<<1)
513 #ifndef __LPC17XX__
514 #define PINMODE_OD (1U<<2)
515 #endif
516 #define PINMODE_PULLUP (PullMode_Up<<3)
517 #define PINMODE_PULLDOWN (PullMode_Down<<3)
518 #define PINMODE_ANALOG (1U<<11)
519 #define PINMODE_PWM (1U<<12)
520 #define PINMODE_PWM_SERVO (1U<<13)
521 
522 typedef union {
523  uint16_t mask;
524  struct {
525  uint16_t input :1,
526  output :1,
530  invert :1,
531  analog :1,
532  pwm :1,
536  };
537 } pin_cap_t;
538 
539 typedef union {
540  uint16_t mask;
541  struct {
542  uint16_t input :1,
543  output :1,
548  analog :1,
549  pwm :1,
553  };
554 } pin_mode_t;
555 
556 #define XBAR_SET_CAP(cap, mode) { cap.mask = mode.mask; cap.claimable = !mode.claimed; }
557 #define XBAR_SET_DIN_INFO(pin, pin_id, src, cfg_fn, get_val_fn) { \
558  pin.id = pin_id; \
559  pin.mode = src.mode; \
560  pin.cap = src.cap; \
561  pin.cap.invert = On; \
562  pin.cap.claimable = !src.mode.claimed; \
563  pin.function = src.id; \
564  pin.group = src.group; \
565  pin.pin = src.pin; \
566  pin.port = (void *)src.port; \
567  pin.description = src.description; \
568  pin.config = cfg_fn; \
569  pin.get_value = get_val_fn; \
570 }
571 #define XBAR_SET_DOUT_INFO(pin, pin_id, src, cfg_fn, get_val_fn) { \
572  pin.id = pin_id; \
573  pin.mode = src.mode; \
574  pin.cap.mask = src.mode.mask; \
575  pin.cap.invert = On; \
576  pin.cap.claimable = !src.mode.claimed; \
577  pin.function = src.id; \
578  pin.group = src.group; \
579  pin.pin = src.pin; \
580  pin.port = (void *)src.port; \
581  pin.description = src.description; \
582  pin.config = cfg_fn; \
583  pin.get_value = get_val_fn; \
584 }
585 
587 typedef struct {
588  bool inverted;
589  bool debounce;
592 
594 typedef struct {
595  bool inverted;
597  bool pwm;
599 
601 typedef struct {
602  float freq_hz; //
603  float min;
604  float max;
605  float off_value; // percent of period
606  float min_value; // percent of period
607  float max_value; // percent of period
608  bool invert;
610 } pwm_config_t;
611 
612 typedef union
613 {
617 } xbar_cfg_ptr_t __attribute__ ((__transparent_union__));
618 
619 struct xbar;
620 
621 typedef float (*xbar_get_value_ptr)(struct xbar *pin);
622 typedef void (*xbar_set_value_ptr)(struct xbar *pin, float value);
623 typedef void (*xbar_event_ptr)(bool on);
624 typedef bool (*xbar_config_ptr)(struct xbar *pin, xbar_cfg_ptr_t cfg_data, bool persistent);
625 
626 typedef struct {
627  pin_function_t function;
628  uint8_t aux_port;
631  uint8_t pin;
632  void *port;
633  void *input;
634 } aux_ctrl_t;
635 
636 typedef struct {
637  pin_function_t function;
638  uint8_t aux_port;
639  uint8_t pin;
640  void *port;
641  void *output;
643 
644 typedef struct xbar {
645  uint8_t id;
646  pin_function_t function;
648  void *port;
649  const char *description;
650  uint_fast8_t pin;
658 
659 typedef struct {
660  pin_function_t function;
662  void *port;
663  uint_fast8_t pin;
665  const char *description;
666 } periph_pin_t;
667 
668 typedef struct periph_signal {
672 
673 typedef union {
674  uint8_t mask;
675  struct {
676  uint8_t limits :1,
681  };
683 
684 void xbar_set_homing_source (void);
688 const char *xbar_fn_to_pinname (pin_function_t id);
690 
691 #endif
limit_signals_t xbar_get_homing_source_from_cycle(axes_signals_t homing_cycle)
Definition: crossbar.c:115
bool(* irq_callback_ptr)(uint_fast8_t id, bool level)
Definition: crossbar.h:495
const char * xbar_fn_to_pinname(pin_function_t id)
Definition: crossbar.c:131
pull_mode_t
Pin pullup and pulldown modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:504
@ PullMode_Down
0b10 (0x02)
Definition: crossbar.h:507
@ PullMode_None
0b00 (0x00)
Definition: crossbar.h:505
@ PullMode_Up
0b01 (0x01)
Definition: crossbar.h:506
@ PullMode_UpDown
0b11 (0x03) - only used to report port capability.
Definition: crossbar.h:508
pin_function_t
Definition: crossbar.h:27
@ Output_DirX_2
Definition: crossbar.h:117
@ Output_SPICS
Definition: crossbar.h:197
@ Input_LimitB
Definition: crossbar.h:67
@ Input_QEI_A
Definition: crossbar.h:212
@ Input_LimitY_2
Definition: crossbar.h:55
@ Input_FeedHold
Definition: crossbar.h:30
@ Input_Aux6
Definition: crossbar.h:87
@ Output_Aux2
Definition: crossbar.h:158
@ Input_Toolsetter
Definition: crossbar.h:45
@ Output_Analog_Aux0
Definition: crossbar.h:173
@ Output_MOSI
Definition: crossbar.h:195
@ Output_LED_R
Definition: crossbar.h:183
@ Input_HomeX_2
Definition: crossbar.h:53
@ Output_Aux14
Definition: crossbar.h:170
@ Output_RTS
Definition: crossbar.h:211
@ Input_Analog_Aux1
Definition: crossbar.h:95
@ Input_SpindleIndex
Definition: crossbar.h:79
@ Input_Analog_Aux5
Definition: crossbar.h:99
@ Output_StepperEnableV
Definition: crossbar.h:144
@ Output_StepZ_2
Definition: crossbar.h:110
@ Input_HomeA
Definition: crossbar.h:66
@ Input_HomeC
Definition: crossbar.h:72
@ Output_DirX
Definition: crossbar.h:116
@ Input_Unassigned
Definition: crossbar.h:41
@ Output_TX
Definition: crossbar.h:210
@ Output_MotorChipSelectX
Definition: crossbar.h:128
@ Input_Reset
Definition: crossbar.h:29
@ Bidirectional_MotorUARTM7
Definition: crossbar.h:225
@ Input_SPIIRQ
Definition: crossbar.h:202
@ Output_CoProc_Boot0
Definition: crossbar.h:191
@ Output_StepB
Definition: crossbar.h:112
@ Input_HomeZ
Definition: crossbar.h:62
@ Bidirectional_MotorUARTM5
Definition: crossbar.h:223
@ Output_Aux4
Definition: crossbar.h:160
@ Input_Analog_Aux7
Definition: crossbar.h:101
@ Output_Analog_AuxMax
Definition: crossbar.h:181
@ Input_Probe
Definition: crossbar.h:43
@ Output_DirV
Definition: crossbar.h:126
@ Output_StepperEnableX
Definition: crossbar.h:138
@ Output_FlashCS
Definition: crossbar.h:198
@ Output_DirA
Definition: crossbar.h:122
@ Output_StepY_2
Definition: crossbar.h:108
@ Output_MotorChipSelectM6
Definition: crossbar.h:134
@ Output_DirB
Definition: crossbar.h:123
@ Input_MotorFault
Definition: crossbar.h:37
@ Output_SdCardCS
Definition: crossbar.h:199
@ Input_Analog_AuxMax
Definition: crossbar.h:102
@ Bidirectional_MotorUARTM4
Definition: crossbar.h:222
@ Input_MotorWarning
Definition: crossbar.h:38
@ Output_DirY
Definition: crossbar.h:118
@ Input_ToolsetterOvertravel
Definition: crossbar.h:46
@ Output_StepperEnableAB
Definition: crossbar.h:147
@ Output_Aux13
Definition: crossbar.h:169
@ Output_MotorChipSelectM5
Definition: crossbar.h:133
@ Output_Aux1
Definition: crossbar.h:157
@ Input_ProbeDisconnect
Definition: crossbar.h:36
@ Bidirectional_I2CSDA
Definition: crossbar.h:206
@ Output_Aux11
Definition: crossbar.h:167
@ Input_LimitX
Definition: crossbar.h:49
@ Output_Analog_Aux6
Definition: crossbar.h:179
@ Output_LED
Definition: crossbar.h:182
@ Input_EStop
Definition: crossbar.h:35
@ Input_StopDisable
Definition: crossbar.h:34
@ Input_HomeZ_2
Definition: crossbar.h:63
@ Input_LimitA_Max
Definition: crossbar.h:65
@ Output_DirY_2
Definition: crossbar.h:119
@ Input_HomeX
Definition: crossbar.h:52
@ Output_StepperEnableXY
Definition: crossbar.h:146
@ Input_SdCardDetect
Definition: crossbar.h:200
@ Output_LED1_Adressable
Definition: crossbar.h:189
@ Input_SpindlePulse
Definition: crossbar.h:80
@ Input_HomeY_2
Definition: crossbar.h:58
@ Output_LED_Adressable
Definition: crossbar.h:187
@ Output_DirZ
Definition: crossbar.h:120
@ Bidirectional_MotorUARTM6
Definition: crossbar.h:224
@ Input_LimitsOverride
Definition: crossbar.h:39
@ Input_HomeU
Definition: crossbar.h:75
@ Input_Aux3
Definition: crossbar.h:84
@ Input_ModeSelect
Definition: crossbar.h:48
@ Output_LED0_Adressable
Definition: crossbar.h:188
@ Outputs
Definition: crossbar.h:105
@ Input_Aux8
Definition: crossbar.h:89
@ Output_CoProc_Reset
Definition: crossbar.h:190
@ Output_StepV
Definition: crossbar.h:115
@ Input_Aux11
Definition: crossbar.h:92
@ Output_StepperEnableZ
Definition: crossbar.h:140
@ Output_Analog_Aux3
Definition: crossbar.h:176
@ Output_StepU
Definition: crossbar.h:114
@ Input_LimitX_Max
Definition: crossbar.h:51
@ Output_AuxMax
Definition: crossbar.h:172
@ Input_QEI_Select
Definition: crossbar.h:214
@ Output_StepperEnableU
Definition: crossbar.h:143
@ Output_StepperEnableA
Definition: crossbar.h:141
@ Input_Aux9
Definition: crossbar.h:90
@ Output_Aux7
Definition: crossbar.h:163
@ Output_MotorChipSelectY
Definition: crossbar.h:129
@ Bidirectional_MotorUARTZ
Definition: crossbar.h:220
@ Input_LimitA
Definition: crossbar.h:64
@ Output_StepperPower
Definition: crossbar.h:136
@ Input_HomeY
Definition: crossbar.h:57
@ Input_LimitY
Definition: crossbar.h:54
@ Output_Aux9
Definition: crossbar.h:165
@ Input_BlockDelete
Definition: crossbar.h:33
@ Input_KeypadStrobe
Definition: crossbar.h:207
@ Output_LED_G
Definition: crossbar.h:184
@ Input_Aux2
Definition: crossbar.h:83
@ Input_Aux4
Definition: crossbar.h:85
@ Output_Aux15
Definition: crossbar.h:171
@ Input_HomeV
Definition: crossbar.h:78
@ Output_StepperEnable
Definition: crossbar.h:137
@ Input_LimitV_Max
Definition: crossbar.h:77
@ Output_Analog_Aux1
Definition: crossbar.h:174
@ Input_LimitU_Max
Definition: crossbar.h:74
@ Input_LimitY_Max
Definition: crossbar.h:56
@ Output_SpindleDir
Definition: crossbar.h:149
@ Output_StepperEnableY
Definition: crossbar.h:139
@ Input_LimitZ_Max
Definition: crossbar.h:61
@ Multipin
Definition: crossbar.h:194
@ Output_StepperEnableC
Definition: crossbar.h:145
@ Input_LimitX_2
Definition: crossbar.h:50
@ Input_LimitC
Definition: crossbar.h:70
@ Input_SingleBlock
Definition: crossbar.h:40
@ Output_DirU
Definition: crossbar.h:125
@ Output_SPIRST
Definition: crossbar.h:201
@ Input_LimitU
Definition: crossbar.h:73
@ Input_LimitB_Max
Definition: crossbar.h:68
@ Input_AuxMax
Definition: crossbar.h:93
@ Output_DirZ_2
Definition: crossbar.h:121
@ Output_MotorChipSelectM7
Definition: crossbar.h:135
@ Input_ProbeOvertravel
Definition: crossbar.h:42
@ Output_MotorChipSelectM3
Definition: crossbar.h:131
@ Input_LimitZ_2
Definition: crossbar.h:60
@ Output_DirC
Definition: crossbar.h:124
@ Output_Analog_Aux7
Definition: crossbar.h:180
@ Output_Aux12
Definition: crossbar.h:168
@ Output_StepY
Definition: crossbar.h:107
@ Output_SpindleOn
Definition: crossbar.h:148
@ Input_LimitV
Definition: crossbar.h:76
@ Output_Aux8
Definition: crossbar.h:164
@ Input_I2CStrobe
Definition: crossbar.h:208
@ Input_Analog_Aux3
Definition: crossbar.h:97
@ Output_Spindle1Dir
Definition: crossbar.h:152
@ Output_Aux10
Definition: crossbar.h:166
@ Output_SpindlePWM
Definition: crossbar.h:150
@ Output_CoolantMist
Definition: crossbar.h:154
@ Input_MPGSelect
Definition: crossbar.h:47
@ Output_Spindle1On
Definition: crossbar.h:151
@ Input_Aux1
Definition: crossbar.h:82
@ Input_RX
Definition: crossbar.h:209
@ Bidirectional_MotorUARTM3
Definition: crossbar.h:221
@ Input_LimitZ
Definition: crossbar.h:59
@ Output_StepX_2
Definition: crossbar.h:106
@ Input_Analog_Aux6
Definition: crossbar.h:100
@ Output_MotorChipSelectM4
Definition: crossbar.h:132
@ Bidirectional_MotorUARTX
Definition: crossbar.h:217
@ Input_Aux0
Definition: crossbar.h:81
@ Bidirectional_SDA
Definition: crossbar.h:205
@ Output_MotorChipSelectZ
Definition: crossbar.h:130
@ Output_Analog_Aux2
Definition: crossbar.h:175
@ Input_Aux10
Definition: crossbar.h:91
@ Output_Analog_Aux4
Definition: crossbar.h:177
@ Output_Aux0
Definition: crossbar.h:156
@ Input_Analog_Aux2
Definition: crossbar.h:96
@ Input_QEI_B
Definition: crossbar.h:213
@ Output_Aux6
Definition: crossbar.h:162
@ Input_MISO
Definition: crossbar.h:193
@ Bidirectional_MotorUARTY
Definition: crossbar.h:219
@ Output_Aux5
Definition: crossbar.h:161
@ Output_StepperEnableB
Definition: crossbar.h:142
@ Output_SCK
Definition: crossbar.h:203
@ Input_CycleStart
Definition: crossbar.h:31
@ Output_LED_B
Definition: crossbar.h:185
@ Output_StepX
Definition: crossbar.h:104
@ Output_Aux3
Definition: crossbar.h:159
@ Bidirectional
Definition: crossbar.h:218
@ Output_StepZ
Definition: crossbar.h:109
@ Output_StepC
Definition: crossbar.h:113
@ Output_SPICLK
Definition: crossbar.h:196
@ Input_QEI_Index
Definition: crossbar.h:215
@ Input_Analog_Aux0
Definition: crossbar.h:94
@ Output_MotorChipSelect
Definition: crossbar.h:127
@ Input_Aux7
Definition: crossbar.h:88
@ Input_SafetyDoor
Definition: crossbar.h:32
@ Output_CoolantFlood
Definition: crossbar.h:155
@ Input_HomeB
Definition: crossbar.h:69
@ Input_Aux5
Definition: crossbar.h:86
@ Output_Analog_Aux5
Definition: crossbar.h:178
@ Input_LimitC_Max
Definition: crossbar.h:71
@ Output_LED_W
Definition: crossbar.h:186
@ Output_StepA
Definition: crossbar.h:111
@ Input_Analog_Aux4
Definition: crossbar.h:98
@ Output_I2CSCK
Definition: crossbar.h:204
@ Output_Spindle1PWM
Definition: crossbar.h:153
float(* xbar_get_value_ptr)(struct xbar *pin)
Definition: crossbar.h:621
limit_signals_t xbar_get_homing_source(void)
Definition: crossbar.c:109
void(* xbar_event_ptr)(bool on)
Definition: crossbar.h:623
axes_signals_t xbar_fn_to_axismask(pin_function_t id)
Definition: crossbar.c:26
pin_group_t
Definition: crossbar.h:435
@ PinGroup_SpindlePWM
Definition: crossbar.h:437
@ PinGroup_AuxInputAnalog
Definition: crossbar.h:446
@ PinGroup_UART1
Definition: crossbar.h:452
@ PinGroup_Control
Definition: crossbar.h:462
@ PinGroup_QEI_Select
Definition: crossbar.h:469
@ PinGroup_AuxOutput
Definition: crossbar.h:445
@ PinGroup_QEI
Definition: crossbar.h:468
@ PinGroup_Keypad
Definition: crossbar.h:466
@ PinGroup_StepperDir
Definition: crossbar.h:444
@ PinGroup_USB
Definition: crossbar.h:457
@ PinGroup_SPI
Definition: crossbar.h:451
@ PinGroup_UART3
Definition: crossbar.h:455
@ PinGroup_StepperPower
Definition: crossbar.h:441
@ PinGroup_UART4
Definition: crossbar.h:456
@ PinGroup_CAN
Definition: crossbar.h:458
@ PinGroup_MotorChipSelect
Definition: crossbar.h:448
@ PinGroup_AuxOutputAnalog
Definition: crossbar.h:447
@ PinGroup_SdCard
Definition: crossbar.h:473
@ PinGroup_Motor_Warning
Definition: crossbar.h:471
@ PinGroup_I2C
Definition: crossbar.h:450
@ PinGroup_LED
Definition: crossbar.h:459
@ PinGroup_MotorUART
Definition: crossbar.h:449
@ PinGroup_UART2
Definition: crossbar.h:454
@ PinGroup_Limit
Definition: crossbar.h:463
@ PinGroup_QEI_Index
Definition: crossbar.h:470
@ PinGroup_SpindleIndex
Definition: crossbar.h:440
@ PinGroup_AuxInput
Definition: crossbar.h:474
@ PinGroup_Home
Definition: crossbar.h:460
@ PinGroup_Probe
Definition: crossbar.h:465
@ PinGroup_LimitMax
Definition: crossbar.h:464
@ PinGroup_MPG
Definition: crossbar.h:467
@ PinGroup_StepperStep
Definition: crossbar.h:443
@ PinGroup_StepperEnable
Definition: crossbar.h:442
@ PinGroup_SpindlePulse
Definition: crossbar.h:439
@ PinGroup_Coolant
Definition: crossbar.h:438
@ PinGroup_Motor_Fault
Definition: crossbar.h:472
@ PinGroup_SpindleControl
Definition: crossbar.h:436
@ PinGroup_UART
Definition: crossbar.h:453
irq_type_t
Definition: crossbar.h:490
@ IRQ_I2C_Strobe
Definition: crossbar.h:491
@ IRQ_SPI
Definition: crossbar.h:492
bool(* xbar_config_ptr)(struct xbar *pin, xbar_cfg_ptr_t cfg_data, bool persistent)
Definition: crossbar.h:624
struct driver_irq_handler driver_irq_handler_t
control_signals_t xbar_fn_to_signals_mask(pin_function_t id)
Definition: crossbar.c:144
struct xbar xbar_t
pin_irq_mode_t
Pin interrupt modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:478
@ IRQ_Mode_Low
0b10000 (0x10)
Definition: crossbar.h:486
@ IRQ_Mode_Rising
0b00001 (0x01)
Definition: crossbar.h:480
@ IRQ_Mode_RisingFalling
0b00011 (0x03) - only used to report port capability.
Definition: crossbar.h:482
@ IRQ_Mode_None
0b00000 (0x00)
Definition: crossbar.h:479
@ IRQ_Mode_High
0b01000 (0x08)
Definition: crossbar.h:485
@ IRQ_Mode_All
0b11111 (0x1F) - only used to report port capability.
Definition: crossbar.h:487
@ IRQ_Mode_Change
0b00100 (0x04)
Definition: crossbar.h:483
@ IRQ_Mode_Falling
0b00010 (0x02)
Definition: crossbar.h:481
@ IRQ_Mode_Edges
0b00111 (0x07) - only used to report port capability.
Definition: crossbar.h:484
void xbar_set_homing_source(void)
Definition: crossbar.c:98
void(* xbar_set_value_ptr)(struct xbar *pin, float value)
Definition: crossbar.h:622
struct periph_signal periph_signal_t
__attribute__
Definition: errors.h:30
Definition: crossbar.h:636
uint8_t aux_port
Definition: crossbar.h:638
uint8_t pin
Definition: crossbar.h:639
void * output
Definition: crossbar.h:641
void * port
Definition: crossbar.h:640
Definition: crossbar.h:626
uint8_t aux_port
Definition: crossbar.h:628
control_signals_t cap
Definition: crossbar.h:630
pin_irq_mode_t irq_mode
Definition: crossbar.h:629
void * input
Definition: crossbar.h:633
uint8_t pin
Definition: crossbar.h:631
void * port
Definition: crossbar.h:632
Definition: crossbar.h:497
irq_callback_ptr callback
Definition: crossbar.h:499
struct driver_irq_handler * next
Definition: crossbar.h:500
irq_type_t type
Definition: crossbar.h:498
/a cfg_data argument to /a xbar_config_ptr for gpio input pins
Definition: crossbar.h:587
bool debounce
Definition: crossbar.h:589
bool inverted
Definition: crossbar.h:588
pull_mode_t pull_mode
Definition: crossbar.h:590
/a cfg_data argument to /a xbar_config_ptr for gpio output pins
Definition: crossbar.h:594
bool inverted
Definition: crossbar.h:595
bool open_drain
Definition: crossbar.h:596
bool pwm
Definition: crossbar.h:597
Limit switches struct, consists of four packed axes_signals_t structs in 32 bits.
Definition: nuts_bolts.h:152
Definition: crossbar.h:659
pin_mode_t mode
Definition: crossbar.h:664
const char * description
Definition: crossbar.h:665
uint_fast8_t pin
Definition: crossbar.h:663
void * port
Definition: crossbar.h:662
pin_group_t group
Definition: crossbar.h:661
Definition: crossbar.h:668
struct periph_signal * next
Definition: crossbar.h:670
periph_pin_t pin
Definition: crossbar.h:669
Definition: crossbar.h:232
const char * name
Definition: crossbar.h:234
pin_function_t function
Definition: crossbar.h:233
/a cfg_data argument to /a xbar_config_ptr for PWM pins
Definition: crossbar.h:601
float freq_hz
Definition: crossbar.h:602
bool invert
Definition: crossbar.h:608
float max
Definition: crossbar.h:604
bool servo_mode
Definition: crossbar.h:609
float off_value
Definition: crossbar.h:605
float min_value
Definition: crossbar.h:606
float max_value
Definition: crossbar.h:607
float min
Definition: crossbar.h:603
Definition: crossbar.h:644
xbar_event_ptr on_event
Not used - might be removed.
Definition: crossbar.h:656
uint8_t id
Pin id.
Definition: crossbar.h:645
pin_mode_t mode
Current pin configuration.
Definition: crossbar.h:652
const char * description
Optional pointer to description string.
Definition: crossbar.h:649
xbar_config_ptr config
Optional pointer to function for configuring the port.
Definition: crossbar.h:653
xbar_set_value_ptr set_value
Optional pointer to function to set port value.
Definition: crossbar.h:655
xbar_get_value_ptr get_value
Optional pointer to function to get current port value.
Definition: crossbar.h:654
uint_fast8_t pin
Pin number.
Definition: crossbar.h:650
pin_cap_t cap
Pin capabilities.
Definition: crossbar.h:651
void * port
Optional pointer to the underlying peripheral or pin specific data.
Definition: crossbar.h:648
pin_group_t group
Pin group.
Definition: crossbar.h:647
Definition: nuts_bolts.h:125
Definition: system.h:137
Definition: crossbar.h:522
uint16_t output
Definition: crossbar.h:526
uint16_t irq_mode
Definition: crossbar.h:529
uint16_t debounce
Definition: crossbar.h:535
uint16_t pwm
Definition: crossbar.h:532
uint16_t open_drain
Definition: crossbar.h:527
uint16_t mask
Definition: crossbar.h:523
uint16_t input
Definition: crossbar.h:525
uint16_t analog
Definition: crossbar.h:531
uint16_t claimable
Definition: crossbar.h:534
uint16_t invert
Definition: crossbar.h:530
uint16_t pull_mode
Definition: crossbar.h:528
uint16_t servo_pwm
Definition: crossbar.h:533
Definition: crossbar.h:673
uint8_t qei_select
Definition: crossbar.h:679
uint8_t aux_inputs
Definition: crossbar.h:677
uint8_t limits
Definition: crossbar.h:676
uint8_t unassigned
Definition: crossbar.h:680
uint8_t mask
Definition: crossbar.h:674
uint8_t safety_door
Definition: crossbar.h:678
Definition: crossbar.h:539
uint16_t output
Definition: crossbar.h:543
uint16_t irq_mode
Definition: crossbar.h:546
uint16_t claimed
Definition: crossbar.h:551
uint16_t debounce
Definition: crossbar.h:552
uint16_t pwm
Definition: crossbar.h:549
uint16_t open_drain
Definition: crossbar.h:544
uint16_t mask
Definition: crossbar.h:540
uint16_t input
Definition: crossbar.h:542
uint16_t analog
Definition: crossbar.h:548
uint16_t inverted
Definition: crossbar.h:547
uint16_t pull_mode
Definition: crossbar.h:545
uint16_t servo_pwm
Definition: crossbar.h:550
Definition: crossbar.h:613
pwm_config_t * pwm_config
Definition: crossbar.h:614
gpio_out_config_t * gpio_out_config
Definition: crossbar.h:616
gpio_in_config_t * gpio_in_config
Definition: crossbar.h:615