diff --git a/crossbar.h b/crossbar.h index 70949a9..ecdf3df 100644 --- a/crossbar.h +++ b/crossbar.h @@ -54,7 +54,46 @@ typedef enum { Input_Aux0, Input_Aux1, Input_Aux2, - Input_Aux3 + Input_Aux3, + Input_Aux4, + Input_Aux5, + Input_Aux6, + Input_Aux7, + Output_StepX, + Output_StepY, + Output_StepZ, + Output_StepA, + Output_StepB, + Output_StepC, + Output_DirX, + Output_DirY, + Output_DirZ, + Output_DirA, + Output_DirB, + Output_DirC, + Output_StepperEnable, + Output_StepperEnableX, + Output_StepperEnableY, + Output_StepperEnableZ, + Output_StepperEnableA, + Output_StepperEnableB, + Output_StepperEnableC, + Output_StepperEnableXY, + Output_StepperEnableAB, + Output_SpindleOn, + Output_SpindleDir, + Output_SpindlePWM, + Output_CoolantMist, + Output_CoolantFlood, + Output_SdCardCS, + Output_Aux0, + Output_Aux1, + Output_Aux2, + Output_Aux3, + Output_Aux4, + Output_Aux5, + Output_Aux6, + Output_Aux7 } pin_function_t; typedef enum { @@ -65,17 +104,26 @@ typedef enum { } pin_irq_mode_t; typedef enum { - PinGroup_Control = (1<<0), - PinGroup_Limit = (1<<1), - PinGroup_Probe = (1<<2), - PinGroup_Keypad = (1<<3), - PinGroup_MPG = (1<<4), - PinGroup_QEI = (1<<5), - PinGroup_QEI_Select = (1<<6), - PinGroup_SpindlePulse = (1<<7), - PinGroup_SpindleIndex = (1<<8), - PinGroup_AuxInput = (1<<9), - PinGroup_AuxOutput = (1<<10) + PinGroup_Control = (1<<0), + PinGroup_Limit = (1<<1), + PinGroup_Probe = (1<<2), + PinGroup_Keypad = (1<<3), + PinGroup_MPG = (1<<4), + PinGroup_QEI = (1<<5), + PinGroup_QEI_Select = (1<<6), + PinGroup_SpindleControl = (1<<7), + PinGroup_SpindlePWM = (1<<8), + PinGroup_Coolant = (1<<9), + PinGroup_SpindlePulse = (1<<10), + PinGroup_SpindleIndex = (1<<11), + PinGroup_StepperEnable = (1<<12), + PinGroup_StepperStep = (1<<13), + PinGroup_StepperDir = (1<<14), + PinGroup_AuxInput = (1<<15), + PinGroup_AuxOutput = (1<<16), + PinGroup_SdCard = (1<<17), + PinGroup_I2C = (1<<18), + PinGroup_SPI = (1<<19) } pin_group_t; typedef bool (*xbar_get_value_ptr)(void); diff --git a/plugins.h b/plugins.h index 9bee16d..4d48097 100644 --- a/plugins.h +++ b/plugins.h @@ -56,11 +56,11 @@ typedef union { uint8_t telnet :1, websocket :1, http :1, + ftp :1, dns :1, mdns :1, ssdp :1, - webdav :1, - unassigned :1; + webdav :1; }; } network_services_t; diff --git a/stepdir_map.h b/stepdir_map.h new file mode 100644 index 0000000..0e16eb3 --- /dev/null +++ b/stepdir_map.h @@ -0,0 +1,211 @@ +/* + stepdir_map.h - An embedded CNC Controller with rs274/ngc (g-code) support + + Lookup tables for converting core step and dir signals to physical signals, includes signal inversion. + + May be used by driver code if step and/or dir pins are located to the same port. + + NOT referenced in the core grbl code + + Part of grblHAL + + Copyright (c) 2021 Terje Io + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +#if STEP_OUTMODE == GPIO_MAP + +static const uint32_t c_step_outmap[] = { + 0, + X_STEP_BIT, + Y_STEP_BIT, + Y_STEP_BIT | X_STEP_BIT, + Z_STEP_BIT, + Z_STEP_BIT | X_STEP_BIT, + Z_STEP_BIT | Y_STEP_BIT, + Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, +#if N_AXIS > 3 + A_STEP_BIT, + A_STEP_BIT | X_STEP_BIT, + A_STEP_BIT | Y_STEP_BIT, + A_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + A_STEP_BIT | Z_STEP_BIT, + A_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, +#endif +#if N_AXIS > 4 + B_STEP_BIT, + B_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | Y_STEP_BIT, + B_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | Z_STEP_BIT, + B_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + B_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | A_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Y_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, +#endif +#if N_AXIS > 5 + C_STEP_BIT, + C_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | Z_STEP_BIT, + C_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | A_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Z_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT + C_STEP_BIT | B_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Z_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | X_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT, + C_STEP_BIT | B_STEP_BIT | A_STEP_BIT | Z_STEP_BIT | Y_STEP_BIT | X_STEP_BIT, +#endif +}; + +static uint32_t step_outmap[sizeof(c_step_outmap) / sizeof(uint32_t)]; + +#endif + +#if DIRECTION_OUTMODE == GPIO_MAP + +static const uint32_t c_dir_outmap[] = { + 0, + X_DIRECTION_BIT, + Y_DIRECTION_BIT, + Y_DIRECTION_BIT | X_DIRECTION_BIT, + Z_DIRECTION_BIT, + Z_DIRECTION_BIT | X_DIRECTION_BIT, + Z_DIRECTION_BIT | Y_DIRECTION_BIT, + Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, +#if N_AXIS > 3 + A_DIRECTION_BIT, + A_DIRECTION_BIT | X_DIRECTION_BIT, + A_DIRECTION_BIT | Y_DIRECTION_BIT, + A_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + A_DIRECTION_BIT | Z_DIRECTION_BIT, + A_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, +#endif +#if N_AXIS > 4 + B_DIRECTION_BIT, + B_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | Y_DIRECTION_BIT, + B_DIRECTION_BIT | Y_DIRECTION_BIT, X_DIRECTION_BIT, + B_DIRECTION_BIT | Z_DIRECTION_BIT, + B_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + B_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, +#endif +#if N_AXIS > 5 + C_DIRECTION_BIT, + C_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | Z_DIRECTION_BIT, + C_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT + C_DIRECTION_BIT | B_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Z_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | X_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT, + C_DIRECTION_BIT | B_DIRECTION_BIT | A_DIRECTION_BIT | Z_DIRECTION_BIT | Y_DIRECTION_BIT | X_DIRECTION_BIT, +#endif +}; + +static uint32_t dir_outmap[sizeof(c_dir_outmap) / sizeof(uint32_t)]; + +#endif + +#if (STEP_OUTMODE == GPIO_MAP) || (DIRECTION_OUTMODE == GPIO_MAP) + +static void stepdirmap_init (settings_t *settings) +{ + uint_fast8_t i; + +#if STEP_OUTMODE == GPIO_MAP + + i = sizeof(step_outmap) / sizeof(uint32_t); + do { + i--; + step_outmap[i] = c_step_outmap[i ^ settings->steppers.step_invert.value]; + } while(i); +#endif + +#if DIRECTION_OUTMODE == GPIO_MAP + i = sizeof(dir_outmap) / sizeof(uint32_t); + do { + i--; + dir_outmap[i] = c_dir_outmap[i ^ settings->steppers.dir_invert.value]; + } while(i); +#endif +} + +#endif +