My Marlin configs for Fabrikator Mini and CTC i3 Pro B
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SanityCheck.h 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. *
  21. */
  22. #pragma once
  23. #if PIO_PLATFORM_VERSION < 1001
  24. #error "nxplpc-arduino-lpc176x package is out of date, Please update the PlatformIO platforms, frameworks and libraries. You may need to remove the platform and let it reinstall automatically."
  25. #endif
  26. #if PIO_FRAMEWORK_VERSION < 2002
  27. #error "framework-arduino-lpc176x package is out of date, Please update the PlatformIO platforms, frameworks and libraries."
  28. #endif
  29. /**
  30. * Detect an old pins file by checking for old ADC pins values.
  31. */
  32. #define _OLD_TEMP_PIN(P) PIN_EXISTS(P) && _CAT(P,_PIN) <= 7 && _CAT(P,_PIN) != 2 && _CAT(P,_PIN) != 3
  33. #if _OLD_TEMP_PIN(TEMP_BED)
  34. #error "TEMP_BED_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  35. #elif _OLD_TEMP_PIN(TEMP_0)
  36. #error "TEMP_0_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  37. #elif _OLD_TEMP_PIN(TEMP_1)
  38. #error "TEMP_1_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  39. #elif _OLD_TEMP_PIN(TEMP_2)
  40. #error "TEMP_2_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  41. #elif _OLD_TEMP_PIN(TEMP_3)
  42. #error "TEMP_3_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  43. #elif _OLD_TEMP_PIN(TEMP_4)
  44. #error "TEMP_4_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  45. #elif _OLD_TEMP_PIN(TEMP_5)
  46. #error "TEMP_5_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  47. #elif _OLD_TEMP_PIN(TEMP_6)
  48. #error "TEMP_6_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  49. #elif _OLD_TEMP_PIN(TEMP_7)
  50. #error "TEMP_7_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
  51. #endif
  52. #undef _OLD_TEMP_PIN
  53. /**
  54. * Because PWM hardware channels all share the same frequency, along with the
  55. * fallback software channels, FAST_PWM_FAN is incompatible with Servos.
  56. */
  57. #if NUM_SERVOS > 0 && ENABLED(FAST_PWM_FAN)
  58. #error "BLTOUCH and Servos are incompatible with FAST_PWM_FAN on LPC176x boards."
  59. #endif
  60. /**
  61. * Test LPC176x-specific configuration values for errors at compile-time.
  62. */
  63. //#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
  64. // #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
  65. //#endif
  66. #if IS_RE_ARM_BOARD && ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) && HAS_DRIVER(TMC2130) && DISABLED(TMC_USE_SW_SPI)
  67. #error "Re-ARM with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER and TMC2130 require TMC_USE_SW_SPI"
  68. #endif
  69. #if ENABLED(BAUD_RATE_GCODE)
  70. #error "BAUD_RATE_GCODE is not yet supported on LPC176x."
  71. #endif
  72. /**
  73. * Flag any serial port conflicts
  74. *
  75. * Port | TX | RX |
  76. * --- | --- | --- |
  77. * Serial | P0_02 | P0_03 |
  78. * Serial1 | P0_15 | P0_16 |
  79. * Serial2 | P0_10 | P0_11 |
  80. * Serial3 | P0_00 | P0_01 |
  81. */
  82. #if (defined(SERIAL_PORT) && SERIAL_PORT == 0) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 0) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 0)
  83. #define IS_TX0(P) (P == P0_02)
  84. #define IS_RX0(P) (P == P0_03)
  85. #if IS_TX0(TMC_SW_MISO) || IS_RX0(TMC_SW_MOSI)
  86. #error "Serial port pins (0) conflict with Trinamic SPI pins!"
  87. #elif ENABLED(MK2_MULTIPLEXER) && (IS_TX0(E_MUX1_PIN) || IS_RX0(E_MUX0_PIN))
  88. #error "Serial port pins (0) conflict with MK2 multiplexer pins!"
  89. #elif (AXIS_HAS_SPI(X) && IS_TX0(X_CS_PIN)) || (AXIS_HAS_SPI(Y) && IS_RX0(Y_CS_PIN))
  90. #error "Serial port pins (0) conflict with X/Y axis SPI pins!"
  91. #endif
  92. #undef IS_TX0
  93. #undef IS_RX0
  94. #endif
  95. #if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || DGUS_SERIAL_PORT == 1
  96. #define IS_TX1(P) (P == P0_15)
  97. #define IS_RX1(P) (P == P0_16)
  98. #if IS_TX1(TMC_SW_SCK)
  99. #error "Serial port pins (1) conflict with other pins!"
  100. #elif HAS_SPI_LCD
  101. #if IS_TX1(BTN_EN2) || IS_RX1(BTN_EN1)
  102. #error "Serial port pins (1) conflict with Encoder Buttons!"
  103. #elif IS_TX1(SCK_PIN) || IS_TX1(LCD_PINS_D4) || IS_TX1(DOGLCD_SCK) || IS_TX1(LCD_RESET_PIN) || IS_TX1(LCD_PINS_RS) || IS_TX1(SHIFT_CLK) \
  104. || IS_RX1(LCD_SDSS) || IS_RX1(LCD_PINS_RS) || IS_RX1(MISO_PIN) || IS_RX1(DOGLCD_A0) || IS_RX1(SS_PIN) || IS_RX1(LCD_SDSS) || IS_RX1(DOGLCD_CS) || IS_RX1(LCD_RESET_PIN) || IS_RX1(LCD_BACKLIGHT_PIN)
  105. #error "Serial port pins (1) conflict with LCD pins!"
  106. #endif
  107. #endif
  108. #undef IS_TX1
  109. #undef IS_RX1
  110. #endif
  111. #if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || DGUS_SERIAL_PORT == 2
  112. #define IS_TX2(P) (P == P0_10)
  113. #define IS_RX2(P) (P == P0_11)
  114. #if IS_TX2(X2_ENABLE_PIN) || IS_RX2(X2_DIR_PIN) || IS_RX2(X2_STEP_PIN) || (AXIS_HAS_SPI(X2) && IS_TX2(X2_CS_PIN))
  115. #error "Serial port pins (2) conflict with X2 pins!"
  116. #elif IS_TX2(Y2_ENABLE_PIN) || IS_RX2(Y2_DIR_PIN) || IS_RX2(Y2_STEP_PIN) || (AXIS_HAS_SPI(Y2) && IS_TX2(Y2_CS_PIN))
  117. #error "Serial port pins (2) conflict with Y2 pins!"
  118. #elif IS_TX2(Z2_ENABLE_PIN) || IS_RX2(Z2_DIR_PIN) || IS_RX2(Z2_STEP_PIN) || (AXIS_HAS_SPI(Z2) && IS_TX2(Z2_CS_PIN))
  119. #error "Serial port pins (2) conflict with Z2 pins!"
  120. #elif IS_TX2(Z3_ENABLE_PIN) || IS_RX2(Z3_DIR_PIN) || IS_RX2(Z3_STEP_PIN) || (AXIS_HAS_SPI(Z3) && IS_TX2(Z3_CS_PIN))
  121. #error "Serial port pins (2) conflict with Z3 pins!"
  122. #elif IS_TX2(Z4_ENABLE_PIN) || IS_RX2(Z4_DIR_PIN) || IS_RX2(Z4_STEP_PIN) || (AXIS_HAS_SPI(Z4) && IS_TX2(Z4_CS_PIN))
  123. #error "Serial port pins (2) conflict with Z4 pins!"
  124. #elif IS_RX2(X_DIR_PIN) || IS_RX2(Y_DIR_PIN)
  125. #error "Serial port pins (2) conflict with other pins!"
  126. #elif Y_HOME_DIR < 0 && IS_TX2(Y_STOP_PIN)
  127. #error "Serial port pins (2) conflict with Y endstop pin!"
  128. #elif HAS_CUSTOM_PROBE_PIN && IS_TX2(Z_MIN_PROBE_PIN)
  129. #error "Serial port pins (2) conflict with probe pin!"
  130. #elif IS_TX2(X_ENABLE_PIN) || IS_RX2(X_DIR_PIN) || IS_TX2(Y_ENABLE_PIN) || IS_RX2(Y_DIR_PIN)
  131. #error "Serial port pins (2) conflict with X/Y stepper pins!"
  132. #elif EXTRUDERS > 1 && (IS_TX2(E1_ENABLE_PIN) || (AXIS_HAS_SPI(E1) && IS_TX2(E1_CS_PIN)))
  133. #error "Serial port pins (2) conflict with E1 stepper pins!"
  134. #elif EXTRUDERS && (IS_RX2(E0_DIR_PIN) || IS_RX2(E0_STEP_PIN))
  135. #error "Serial port pins (2) conflict with E stepper pins!"
  136. #endif
  137. #undef IS_TX2
  138. #undef IS_RX2
  139. #endif
  140. #if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || DGUS_SERIAL_PORT == 3
  141. #define PIN_IS_TX3(P) (PIN_EXISTS(P) && P##_PIN == P0_00)
  142. #define PIN_IS_RX3(P) (P##_PIN == P0_01)
  143. #if PIN_IS_TX3(X_MIN) || PIN_IS_RX3(X_MAX)
  144. #error "Serial port pins (3) conflict with X endstop pins!"
  145. #elif PIN_IS_TX3(Y_SERIAL_TX) || PIN_IS_TX3(Y_SERIAL_RX) \
  146. || PIN_IS_RX3(X_SERIAL_TX) || PIN_IS_RX3(X_SERIAL_RX)
  147. #error "Serial port pins (3) conflict with X/Y axis UART pins!"
  148. #elif PIN_IS_TX3(X2_DIR) || PIN_IS_RX3(X2_STEP)
  149. #error "Serial port pins (3) conflict with X2 pins!"
  150. #elif PIN_IS_TX3(Y2_DIR) || PIN_IS_RX3(Y2_STEP)
  151. #error "Serial port pins (3) conflict with Y2 pins!"
  152. #elif PIN_IS_TX3(Z2_DIR) || PIN_IS_RX3(Z2_STEP)
  153. #error "Serial port pins (3) conflict with Z2 pins!"
  154. #elif PIN_IS_TX3(Z3_DIR) || PIN_IS_RX3(Z3_STEP)
  155. #error "Serial port pins (3) conflict with Z3 pins!"
  156. #elif PIN_IS_TX3(Z4_DIR) || PIN_IS_RX3(Z4_STEP)
  157. #error "Serial port pins (3) conflict with Z4 pins!"
  158. #elif EXTRUDERS > 1 && (PIN_IS_TX3(E1_DIR) || PIN_IS_RX3(E1_STEP))
  159. #error "Serial port pins (3) conflict with E1 pins!"
  160. #endif
  161. #undef PIN_IS_TX3
  162. #undef PIN_IS_RX3
  163. #endif
  164. //
  165. // Flag any i2c pin conflicts
  166. //
  167. #if ANY(DIGIPOT_I2C, DIGIPOT_MCP4018, DAC_STEPPER_CURRENT, EXPERIMENTAL_I2CBUS, I2C_POSITION_ENCODERS, PCA9632, I2C_EEPROM)
  168. #define USEDI2CDEV_M 1 // <Arduino>/Wire.cpp
  169. #if USEDI2CDEV_M == 0 // P0_27 [D57] (AUX-1) .......... P0_28 [D58] (AUX-1)
  170. #define PIN_IS_SDA0(P) (P##_PIN == P0_27)
  171. #define IS_SCL0(P) (P == P0_28)
  172. #if ENABLED(SDSUPPORT) && PIN_IS_SDA0(SD_DETECT)
  173. #error "SDA0 overlaps with SD_DETECT_PIN!"
  174. #elif PIN_IS_SDA0(E0_AUTO_FAN)
  175. #error "SDA0 overlaps with E0_AUTO_FAN_PIN!"
  176. #elif PIN_IS_SDA0(BEEPER)
  177. #error "SDA0 overlaps with BEEPER_PIN!"
  178. #elif IS_SCL0(BTN_ENC)
  179. #error "SCL0 overlaps with Encoder Button!"
  180. #elif IS_SCL0(SS_PIN)
  181. #error "SCL0 overlaps with SS_PIN!"
  182. #elif IS_SCL0(LCD_SDSS)
  183. #error "SCL0 overlaps with LCD_SDSS!"
  184. #endif
  185. #undef PIN_IS_SDA0
  186. #undef IS_SCL0
  187. #elif USEDI2CDEV_M == 1 // P0_00 [D20] (SCA) ............ P0_01 [D21] (SCL)
  188. #define PIN_IS_SDA1(P) (PIN_EXISTS(P) && P##_PIN == P0_00)
  189. #define PIN_IS_SCL1(P) (P##_PIN == P0_01)
  190. #if PIN_IS_SDA1(X_MIN) || PIN_IS_SCL1(X_MAX)
  191. #error "One or more i2c (1) pins overlaps with X endstop pins! Disable i2c peripherals."
  192. #elif PIN_IS_SDA1(X2_DIR) || PIN_IS_SCL1(X2_STEP)
  193. #error "One or more i2c (1) pins overlaps with X2 pins! Disable i2c peripherals."
  194. #elif PIN_IS_SDA1(Y2_DIR) || PIN_IS_SCL1(Y2_STEP)
  195. #error "One or more i2c (1) pins overlaps with Y2 pins! Disable i2c peripherals."
  196. #elif PIN_IS_SDA1(Z2_DIR) || PIN_IS_SCL1(Z2_STEP)
  197. #error "One or more i2c (1) pins overlaps with Z2 pins! Disable i2c peripherals."
  198. #elif PIN_IS_SDA1(Z3_DIR) || PIN_IS_SCL1(Z3_STEP)
  199. #error "One or more i2c (1) pins overlaps with Z3 pins! Disable i2c peripherals."
  200. #elif PIN_IS_SDA1(Z4_DIR) || PIN_IS_SCL1(Z4_STEP)
  201. #error "One or more i2c (1) pins overlaps with Z4 pins! Disable i2c peripherals."
  202. #elif EXTRUDERS > 1 && (PIN_IS_SDA1(E1_DIR) || PIN_IS_SCL1(E1_STEP))
  203. #error "One or more i2c (1) pins overlaps with E1 pins! Disable i2c peripherals."
  204. #endif
  205. #undef PIN_IS_SDA1
  206. #undef PIN_IS_SCL1
  207. #elif USEDI2CDEV_M == 2 // P0_10 [D38] (X_ENABLE_PIN) ... P0_11 [D55] (X_DIR_PIN)
  208. #define PIN_IS_SDA2(P) (P##_PIN == P0_10)
  209. #define PIN_IS_SCL2(P) (P##_PIN == P0_11)
  210. #if PIN_IS_SDA2(Y_STOP)
  211. #error "i2c SDA2 overlaps with Y endstop pin!"
  212. #elif HAS_CUSTOM_PROBE_PIN && PIN_IS_SDA2(Z_MIN_PROBE)
  213. #error "i2c SDA2 overlaps with Z probe pin!"
  214. #elif PIN_IS_SDA2(X_ENABLE) || PIN_IS_SDA2(Y_ENABLE)
  215. #error "i2c SDA2 overlaps with X/Y ENABLE pin!"
  216. #elif AXIS_HAS_SPI(X) && PIN_IS_SDA2(X_CS)
  217. #error "i2c SDA2 overlaps with X CS pin!"
  218. #elif PIN_IS_SDA2(X2_ENABLE)
  219. #error "i2c SDA2 overlaps with X2 enable pin! Disable i2c peripherals."
  220. #elif PIN_IS_SDA2(Y2_ENABLE)
  221. #error "i2c SDA2 overlaps with Y2 enable pin! Disable i2c peripherals."
  222. #elif PIN_IS_SDA2(Z2_ENABLE)
  223. #error "i2c SDA2 overlaps with Z2 enable pin! Disable i2c peripherals."
  224. #elif PIN_IS_SDA2(Z3_ENABLE)
  225. #error "i2c SDA2 overlaps with Z3 enable pin! Disable i2c peripherals."
  226. #elif PIN_IS_SDA2(Z4_ENABLE)
  227. #error "i2c SDA2 overlaps with Z4 enable pin! Disable i2c peripherals."
  228. #elif EXTRUDERS > 1 && PIN_IS_SDA2(E1_ENABLE)
  229. #error "i2c SDA2 overlaps with E1 enable pin! Disable i2c peripherals."
  230. #elif EXTRUDERS > 1 && AXIS_HAS_SPI(E1) && PIN_IS_SDA2(E1_CS)
  231. #error "i2c SDA2 overlaps with E1 CS pin! Disable i2c peripherals."
  232. #elif EXTRUDERS && (PIN_IS_SDA2(E0_STEP) || PIN_IS_SDA2(E0_DIR))
  233. #error "i2c SCL2 overlaps with E0 STEP/DIR pin! Disable i2c peripherals."
  234. #elif PIN_IS_SDA2(X_DIR) || PIN_IS_SDA2(Y_DIR)
  235. #error "One or more i2c pins overlaps with X/Y DIR pin! Disable i2c peripherals."
  236. #endif
  237. #undef PIN_IS_SDA2
  238. #undef PIN_IS_SCL2
  239. #endif
  240. #undef USEDI2CDEV_M
  241. #endif