Browse Source

Merge pull request #7 from X-Dron/Sergey1560-FB4S_WIFI

Update to 2.0.7.2
pull/15/head
X-Dron 4 years ago
committed by GitHub
parent
commit
5eb1931028
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 110
      Marlin/Configuration.h
  2. 88
      Marlin/Configuration_adv.h
  3. 159
      Marlin/Makefile
  4. 2
      Marlin/Version.h
  5. 6
      Marlin/src/HAL/AVR/HAL.h
  6. 6
      Marlin/src/HAL/AVR/MarlinSerial.cpp
  7. 2
      Marlin/src/HAL/AVR/MarlinSerial.h
  8. 4
      Marlin/src/HAL/AVR/fast_pwm.cpp
  9. 4
      Marlin/src/HAL/DUE/HAL.cpp
  10. 8
      Marlin/src/HAL/DUE/HAL.h
  11. 2
      Marlin/src/HAL/DUE/HAL_SPI.cpp
  12. 2
      Marlin/src/HAL/DUE/eeprom_flash.cpp
  13. 2
      Marlin/src/HAL/DUE/fastio/G2_PWM.cpp
  14. 4
      Marlin/src/HAL/DUE/timers.cpp
  15. 4
      Marlin/src/HAL/DUE/timers.h
  16. 2
      Marlin/src/HAL/DUE/upload_extra_script.py
  17. 126
      Marlin/src/HAL/DUE/usb/compiler.h
  18. 8
      Marlin/src/HAL/ESP32/HAL.h
  19. 2
      Marlin/src/HAL/HAL.h
  20. 2
      Marlin/src/HAL/LINUX/HAL.h
  21. 2
      Marlin/src/HAL/LPC1768/HAL.h
  22. 7
      Marlin/src/HAL/LPC1768/inc/Conditionals_LCD.h
  23. 2
      Marlin/src/HAL/LPC1768/inc/SanityCheck.h
  24. 2
      Marlin/src/HAL/LPC1768/tft/tft_spi.h
  25. 2
      Marlin/src/HAL/SAMD51/HAL.h
  26. 2
      Marlin/src/HAL/SAMD51/QSPIFlash.cpp
  27. 9
      Marlin/src/HAL/STM32/HAL.cpp
  28. 7
      Marlin/src/HAL/STM32/HAL.h
  29. 14
      Marlin/src/HAL/STM32/HAL_SPI.cpp
  30. 8
      Marlin/src/HAL/STM32/fastio.h
  31. 2
      Marlin/src/HAL/STM32/tft/tft_fsmc.h
  32. 2
      Marlin/src/HAL/STM32/tft/tft_spi.h
  33. 6
      Marlin/src/HAL/STM32/watchdog.cpp
  34. 9
      Marlin/src/HAL/STM32F1/HAL.cpp
  35. 2
      Marlin/src/HAL/STM32F1/HAL.h
  36. 7
      Marlin/src/HAL/STM32F1/HAL_SPI.cpp
  37. 3
      Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp
  38. 3
      Marlin/src/HAL/STM32F1/eeprom_bl24cxx.cpp
  39. 3
      Marlin/src/HAL/STM32F1/eeprom_if_iic.cpp
  40. 10
      Marlin/src/HAL/STM32F1/eeprom_wired.cpp
  41. 7
      Marlin/src/HAL/STM32F1/inc/Conditionals_LCD.h
  42. 4
      Marlin/src/HAL/STM32F1/msc_sd.cpp
  43. 4
      Marlin/src/HAL/STM32F1/onboard_sd.cpp
  44. 13
      Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp
  45. 2
      Marlin/src/HAL/STM32F1/tft/tft_fsmc.h
  46. 2
      Marlin/src/HAL/STM32F1/tft/tft_spi.h
  47. 4
      Marlin/src/HAL/STM32F1/watchdog.cpp
  48. 2
      Marlin/src/HAL/STM32_F4_F7/HAL.h
  49. 58
      Marlin/src/HAL/STM32_F4_F7/STM32F7/TMC2660.cpp
  50. 3
      Marlin/src/HAL/TEENSY31_32/HAL.cpp
  51. 11
      Marlin/src/HAL/TEENSY31_32/HAL.h
  52. 1
      Marlin/src/HAL/TEENSY31_32/Servo.cpp
  53. 3
      Marlin/src/HAL/TEENSY31_32/eeprom.cpp
  54. 2
      Marlin/src/HAL/TEENSY31_32/timers.cpp
  55. 3
      Marlin/src/HAL/TEENSY31_32/timers.h
  56. 2
      Marlin/src/HAL/TEENSY35_36/HAL.cpp
  57. 15
      Marlin/src/HAL/TEENSY35_36/HAL.h
  58. 5
      Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp
  59. 6
      Marlin/src/HAL/TEENSY35_36/Servo.cpp
  60. 4
      Marlin/src/HAL/TEENSY35_36/Servo.h
  61. 9
      Marlin/src/HAL/TEENSY35_36/eeprom.cpp
  62. 2
      Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h
  63. 4
      Marlin/src/HAL/TEENSY35_36/pinsDebug.h
  64. 4
      Marlin/src/HAL/TEENSY35_36/spi_pins.h
  65. 3
      Marlin/src/HAL/TEENSY35_36/timers.cpp
  66. 4
      Marlin/src/HAL/TEENSY35_36/timers.h
  67. 2
      Marlin/src/HAL/TEENSY40_41/HAL.cpp
  68. 9
      Marlin/src/HAL/TEENSY40_41/HAL.h
  69. 5
      Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp
  70. 6
      Marlin/src/HAL/TEENSY40_41/Servo.cpp
  71. 4
      Marlin/src/HAL/TEENSY40_41/Servo.h
  72. 3
      Marlin/src/HAL/TEENSY40_41/eeprom.cpp
  73. 2
      Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h
  74. 2
      Marlin/src/HAL/TEENSY40_41/fastio.h
  75. 4
      Marlin/src/HAL/TEENSY40_41/pinsDebug.h
  76. 4
      Marlin/src/HAL/TEENSY40_41/spi_pins.h
  77. 2
      Marlin/src/HAL/TEENSY40_41/timers.cpp
  78. 3
      Marlin/src/HAL/TEENSY40_41/timers.h
  79. 6
      Marlin/src/HAL/TEENSY40_41/watchdog.cpp
  80. 2
      Marlin/src/HAL/TEENSY40_41/watchdog.h
  81. 17
      Marlin/src/MarlinCore.cpp
  82. 1
      Marlin/src/core/boards.h
  83. 2
      Marlin/src/core/language.h
  84. 7
      Marlin/src/core/macros.h
  85. 2
      Marlin/src/core/utility.h
  86. 4
      Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
  87. 50
      Marlin/src/feature/dac/dac_mcp4728.cpp
  88. 27
      Marlin/src/feature/dac/dac_mcp4728.h
  89. 55
      Marlin/src/feature/dac/stepper_dac.cpp
  90. 19
      Marlin/src/feature/dac/stepper_dac.h
  91. 12
      Marlin/src/feature/digipot/digipot.h
  92. 12
      Marlin/src/feature/digipot/digipot_mcp4018.cpp
  93. 8
      Marlin/src/feature/digipot/digipot_mcp4451.cpp
  94. 11
      Marlin/src/feature/e_parser.h
  95. 8
      Marlin/src/feature/mmu2/mmu2.cpp
  96. 9
      Marlin/src/feature/pause.cpp
  97. 2
      Marlin/src/feature/tmc_util.h
  98. 4
      Marlin/src/gcode/bedlevel/G26.cpp
  99. 3
      Marlin/src/gcode/bedlevel/G35.cpp
  100. 16
      Marlin/src/gcode/bedlevel/abl/G29.cpp

110
Marlin/Configuration.h

@ -70,7 +70,7 @@
// @section info // @section info
// Author info of this build printed to the host during boot and M115 // Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Sergey, FlyingbearGhost4S)" // Who made the changes. #define STRING_CONFIG_H_AUTHOR "(Sergey, FlyingbearGhost4S/5)" // Who made the changes.
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) //#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/** /**
@ -132,7 +132,7 @@
#endif #endif
// Name displayed in the LCD "Ready" message and Info menu // Name displayed in the LCD "Ready" message and Info menu
#define CUSTOM_MACHINE_NAME "FBGhost 4s" #define CUSTOM_MACHINE_NAME "FBGhost 4s/5"
// Printer's unique ID, used by some programs to differentiate between machines. // Printer's unique ID, used by some programs to differentiate between machines.
// Choose your own or use a service like https://www.uuidgenerator.net/version4 // Choose your own or use a service like https://www.uuidgenerator.net/version4
@ -347,11 +347,10 @@
#endif #endif
#endif #endif
// @section temperature
//=========================================================================== //===========================================================================
//============================= Thermal Settings ============================ //============================= Thermal Settings ============================
//=========================================================================== //===========================================================================
// @section temperature
/** /**
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
@ -433,6 +432,12 @@
#define DUMMY_THERMISTOR_998_VALUE 25 #define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100 #define DUMMY_THERMISTOR_999_VALUE 100
// Resistor values when using a MAX31865 (sensor -5)
// Sensor value is typically 100 (PT100) or 1000 (PT1000)
// Calibration value is typically 430 ohm for AdaFruit PT100 modules and 4300 ohm for AdaFruit PT1000 modules.
//#define MAX31865_SENSOR_OHMS 100
//#define MAX31865_CALIBRATION_OHMS 430
// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings // Use temp sensor 1 as a redundant sensor with sensor 0. If the readings
// from the two sensors differ too much the print will be aborted. // from the two sensors differ too much the print will be aborted.
//#define TEMP_SENSOR_1_AS_REDUNDANT //#define TEMP_SENSOR_1_AS_REDUNDANT
@ -487,6 +492,7 @@
#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM) #define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders) //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2] // Set/get with gcode: M301 E[extruder number, 0-2]
#if ENABLED(PID_PARAMS_PER_HOTEND) #if ENABLED(PID_PARAMS_PER_HOTEND)
// Specify between 1 and HOTENDS values per array. // Specify between 1 and HOTENDS values per array.
// If fewer than EXTRUDER values are provided, the last element will be repeated. // If fewer than EXTRUDER values are provided, the last element will be repeated.
@ -2265,43 +2271,47 @@ EEPROM_W25Q
//=============================== Graphical TFTs ============================== //=============================== Graphical TFTs ==============================
//============================================================================= //=============================================================================
// /**
// TFT display with optional touch screen * TFT Type - Select your Display type
// Color Marlin UI with standard menu system *
// * Available options are:
//#define TFT_320x240 * MKS_TS35_V2_0,
//#define TFT_320x240_SPI * MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35,
//#define TFT_480x320 * MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R
#define TFT_480x320_SPI * TFT_TRONXY_X5SA, ANYCUBIC_TFT35, LONGER_LK_TFT28
* TFT_GENERIC
// *
// Skip autodetect and force specific TFT driver * For TFT_GENERIC, you need to configure these 3 options:
// Mandatory for SPI screens with no MISO line * Driver: TFT_DRIVER
// Available drivers are: ST7735, ST7789, ST7796, R61505, ILI9328, ILI9341, ILI9488 * Current Drivers are: AUTO, ST7735, ST7789, ST7796, R61505, ILI9328, ILI9341, ILI9488
// * Resolution: TFT_WIDTH and TFT_HEIGHT
//#define TFT_DRIVER AUTO * Interface: TFT_INTERFACE_FSMC or TFT_INTERFACE_SPI
*/
// #define MKS_TS35_V2_0
// SPI display (MKS Robin Nano V2.0, MKS Gen L V2.0)
// Upscaled 128x64 Marlin UI
//
//#define SPI_GRAPHICAL_TFT
// /**
// FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.) * TFT UI - User Interface Selection. Enable one of the following options:
// Upscaled 128x64 Marlin UI *
// * TFT_CLASSIC_UI - Emulated DOGM - 128x64 Upscaled
//#define FSMC_GRAPHICAL_TFT * TFT_COLOR_UI - Marlin Default Menus, Touch Friendly, using full TFT capabilities
* TFT_LVGL_UI - A Modern UI using LVGL
*
* For LVGL_UI also copy the 'assets' folder from the build directory to the
* root of your SD card, together with the compiled firmware.
*/
//#define TFT_CLASSIC_UI
#define TFT_COLOR_UI
//#define TFT_LVGL_UI
// /**
// TFT LVGL UI * TFT Rotation. Set to one of the following values:
// *
// Using default MKS icons and fonts from: https://git.io/JJvzK * TFT_ROTATE_90, TFT_ROTATE_90_MIRROR_X, TFT_ROTATE_90_MIRROR_Y,
// Just copy the 'assets' folder from the build directory to the * TFT_ROTATE_180, TFT_ROTATE_180_MIRROR_X, TFT_ROTATE_180_MIRROR_Y,
// root of your SD card, together with the compiled firmware. * TFT_ROTATE_270, TFT_ROTATE_270_MIRROR_X, TFT_ROTATE_270_MIRROR_Y,
// * TFT_MIRROR_X, TFT_MIRROR_Y, TFT_NO_ROTATION
//#define TFT_LVGL_UI_FSMC // Robin nano v1.2 uses FSMC */
//#define TFT_LVGL_UI_SPI // Robin nano v2.0 uses SPI //#define TFT_ROTATION TFT_NO_ROTATION
//============================================================================= //=============================================================================
//============================ Other Controllers ============================ //============================ Other Controllers ============================
@ -2320,10 +2330,12 @@ EEPROM_W25Q
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens #define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus #define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
// #define XPT2046_X_CALIBRATION 12013 #define TOUCH_SCREEN_CALIBRATION
// #define XPT2046_X_OFFSET -32
// #define XPT2046_Y_CALIBRATION -8711 //#define XPT2046_X_CALIBRATION 12316
// #define XPT2046_Y_OFFSET 256 //#define XPT2046_Y_CALIBRATION -8981
//#define XPT2046_X_OFFSET -43
//#define XPT2046_Y_OFFSET 257
#endif #endif
// //
@ -2369,9 +2381,6 @@ EEPROM_W25Q
// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis) // then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
//#define TEMP_STAT_LEDS //#define TEMP_STAT_LEDS
// SkeinForge sends the wrong arc G-codes when using Arc Point as fillet procedure
//#define SF_ARC_FIX
// Support for the BariCUDA Paste Extruder // Support for the BariCUDA Paste Extruder
//#define BARICUDA //#define BARICUDA
@ -2457,17 +2466,12 @@ EEPROM_W25Q
#define PRINTER_EVENT_LEDS #define PRINTER_EVENT_LEDS
#endif #endif
/**
* R/C SERVO support
* Sponsored by TrinityLabs, Reworked by codexmas
*/
/** /**
* Number of servos * Number of servos
* *
* For some servo-related options NUM_SERVOS will be set automatically. * For some servo-related options NUM_SERVOS will be set automatically.
* Set this manually if there are extra servos needing manual control. * Set this manually if there are extra servos needing manual control.
* Leave undefined or set to 0 to entirely disable the servo subsystem. * Set to 0 to turn off servo support.
*/ */
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command //#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
@ -2479,5 +2483,5 @@ EEPROM_W25Q
// Only power servos during movement, otherwise leave off to prevent jitter // Only power servos during movement, otherwise leave off to prevent jitter
//#define DEACTIVATE_SERVOS_AFTER_MOVE //#define DEACTIVATE_SERVOS_AFTER_MOVE
// Allow servo angle to be edited and saved to EEPROM // Edit servo angles with M281 and save to EEPROM with M500
//#define EDITABLE_SERVO_ANGLES //#define EDITABLE_SERVO_ANGLES

88
Marlin/Configuration_adv.h

@ -32,11 +32,10 @@
*/ */
#define CONFIGURATION_ADV_H_VERSION 020007 #define CONFIGURATION_ADV_H_VERSION 020007
// @section temperature
//=========================================================================== //===========================================================================
//============================= Thermal Settings ============================ //============================= Thermal Settings ============================
//=========================================================================== //===========================================================================
// @section temperature
/** /**
* Thermocouple sensors are quite sensitive to noise. Any noise induced in * Thermocouple sensors are quite sensitive to noise. Any noise induced in
@ -125,9 +124,19 @@
#define HEATER_BED_INVERTING true #define HEATER_BED_INVERTING true
#endif #endif
/** //
* Heated Chamber settings // Heated Bed Bang-Bang options
*/ //
#if DISABLED(PIDTEMPBED)
#define BED_CHECK_INTERVAL 5000 // (ms) Interval between checks in bang-bang control
#if ENABLED(BED_LIMIT_SWITCHING)
#define BED_HYSTERESIS 2 // (°C) Only set the relevant heater state when ABS(T-target) > BED_HYSTERESIS
#endif
#endif
//
// Heated Chamber options
//
#if TEMP_SENSOR_CHAMBER #if TEMP_SENSOR_CHAMBER
#define CHAMBER_MINTEMP 5 #define CHAMBER_MINTEMP 5
#define CHAMBER_MAXTEMP 80 #define CHAMBER_MAXTEMP 80
@ -135,12 +144,28 @@
//#define CHAMBER_LIMIT_SWITCHING //#define CHAMBER_LIMIT_SWITCHING
//#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin
//#define HEATER_CHAMBER_INVERTING false //#define HEATER_CHAMBER_INVERTING false
#endif
#if DISABLED(PIDTEMPBED) //#define CHAMBER_FAN // Enable a fan on the chamber
#define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control #if ENABLED(CHAMBER_FAN)
#if ENABLED(BED_LIMIT_SWITCHING) #define CHAMBER_FAN_MODE 2 // Fan control mode: 0=Static; 1=Linear increase when temp is higher than target; 2=V-shaped curve.
#define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS #if CHAMBER_FAN_MODE == 0
#define CHAMBER_FAN_BASE 255 // Chamber fan PWM (0-255)
#elif CHAMBER_FAN_MODE == 1
#define CHAMBER_FAN_BASE 128 // Base chamber fan PWM (0-255); turns on when chamber temperature is above the target
#define CHAMBER_FAN_FACTOR 25 // PWM increase per °C above target
#elif CHAMBER_FAN_MODE == 2
#define CHAMBER_FAN_BASE 128 // Minimum chamber fan PWM (0-255)
#define CHAMBER_FAN_FACTOR 25 // PWM increase per °C difference from target
#endif
#endif
//#define CHAMBER_VENT // Enable a servo-controlled vent on the chamber
#if ENABLED(CHAMBER_VENT)
#define CHAMBER_VENT_SERVO_NR 1 // Index of the vent servo
#define HIGH_EXCESS_HEAT_LIMIT 5 // How much above target temp to consider there is excess heat in the chamber
#define LOW_EXCESS_HEAT_LIMIT 3
#define MIN_COOLING_SLOPE_TIME_CHAMBER_VENT 20
#define MIN_COOLING_SLOPE_DEG_CHAMBER_VENT 1.5
#endif #endif
#endif #endif
@ -487,7 +512,7 @@
#define CASE_LIGHT_MAX_PWM 255 // Limit pwm #define CASE_LIGHT_MAX_PWM 255 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu #define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting. #define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED. //#define CASE_LIGHT_USE_NEOPIXEL // Use NeoPixel LED as case light, requires NEOPIXEL_LED.
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL) #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
#define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White } #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
#endif #endif
@ -771,6 +796,7 @@
// //
//#define ASSISTED_TRAMMING //#define ASSISTED_TRAMMING
#if ENABLED(ASSISTED_TRAMMING) #if ENABLED(ASSISTED_TRAMMING)
// Define positions for probing points, use the hotend as reference not the sensor. // Define positions for probing points, use the hotend as reference not the sensor.
#define TRAMMING_POINT_XY { { 20, 20 }, { 200, 20 }, { 200, 200 }, { 20, 200 } } #define TRAMMING_POINT_XY { { 20, 20 }, { 200, 20 }, { 200, 200 }, { 20, 200 } }
@ -793,6 +819,7 @@
* M5: 50 = Clockwise, 51 = Counter-Clockwise * M5: 50 = Clockwise, 51 = Counter-Clockwise
*/ */
#define TRAMMING_SCREW_THREAD 30 #define TRAMMING_SCREW_THREAD 30
#endif #endif
// @section motion // @section motion
@ -1048,6 +1075,14 @@
#if HAS_LCD_MENU #if HAS_LCD_MENU
// Add Probe Z Offset calibration to the Z Probe Offsets menu
#if HAS_BED_PROBE
//#define PROBE_OFFSET_WIZARD
#if ENABLED(PROBE_OFFSET_WIZARD)
#define PROBE_OFFSET_START -4.0 // Estimated nozzle-to-probe Z offset, plus a little extra
#endif
#endif
// Include a page of printer information in the LCD Main Menu // Include a page of printer information in the LCD Main Menu
#define LCD_INFO_MENU #define LCD_INFO_MENU
#if ENABLED(LCD_INFO_MENU) #if ENABLED(LCD_INFO_MENU)
@ -1327,7 +1362,7 @@
* controller events, as there is a trade-off between reliable * controller events, as there is a trade-off between reliable
* printing performance versus fast display updates. * printing performance versus fast display updates.
*/ */
#if HAS_GRAPHICAL_LCD #if HAS_MARLINUI_U8GLIB
// Show SD percentage next to the progress bar // Show SD percentage next to the progress bar
//#define DOGM_SD_PERCENT //#define DOGM_SD_PERCENT
@ -1342,7 +1377,7 @@
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
//#define USE_BIG_EDIT_FONT //#define USE_BIG_EDIT_FONT
// A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. // A smaller font may be used on the Info Screen. Costs 2434 bytes of PROGMEM.
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
//#define USE_SMALL_INFOFONT //#define USE_SMALL_INFOFONT
@ -1527,7 +1562,7 @@
#endif #endif
// //
// FSMC / SPI Graphical TFT // Classic UI Options
// //
#if TFT_SCALED_DOGLCD #if TFT_SCALED_DOGLCD
#define TFT_MARLINUI_COLOR COLOR_WHITE // White #define TFT_MARLINUI_COLOR COLOR_WHITE // White
@ -1767,6 +1802,7 @@
#define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
//#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
//#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
//#define SF_ARC_FIX // Enable only if using SkeinForge with "Arc Point" fillet procedure
#endif #endif
// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes. // Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
@ -3342,6 +3378,25 @@
//#define JOYSTICK_DEBUG //#define JOYSTICK_DEBUG
#endif #endif
/**
* Mechanical Gantry Calibration
* Modern replacement for the Prusa TMC_Z_CALIBRATION.
* Adds capability to work with any adjustable current drivers.
* Implemented as G34 because M915 is deprecated.
*/
//#define MECHANICAL_GANTRY_CALIBRATION
#if ENABLED(MECHANICAL_GANTRY_CALIBRATION)
#define GANTRY_CALIBRATION_CURRENT 600 // Default calibration current in ma
#define GANTRY_CALIBRATION_EXTRA_HEIGHT 15 // Extra distance in mm past Z_###_POS to move
#define GANTRY_CALIBRATION_FEEDRATE 500 // Feedrate for correction move
//#define GANTRY_CALIBRATION_TO_MIN // Enable to calibrate Z in the MIN direction
//#define GANTRY_CALIBRATION_SAFE_POSITION { X_CENTER, Y_CENTER } // Safe position for nozzle
//#define GANTRY_CALIBRATION_XY_PARK_FEEDRATE 3000 // XY Park Feedrate - MMM
//#define GANTRY_CALIBRATION_COMMANDS_PRE ""
#define GANTRY_CALIBRATION_COMMANDS_POST "G28" // G28 highly recommended to ensure an accurate position
#endif
/** /**
* MAX7219 Debug Matrix * MAX7219 Debug Matrix
* *
@ -3523,6 +3578,11 @@
// //
//#define M100_FREE_MEMORY_WATCHER //#define M100_FREE_MEMORY_WATCHER
//
// M42 - Set pin states
//
//#define DIRECT_PIN_CONTROL
// //
// M43 - display pin status, toggle pins, watch pins, watch endstops & toggle LED, test servo probe // M43 - display pin status, toggle pins, watch pins, watch endstops & toggle LED, test servo probe
// //

159
Marlin/Makefile

@ -22,8 +22,10 @@
# (e.g. UPLOAD_PORT = /dev/tty.USB0). If the exact name of this file # (e.g. UPLOAD_PORT = /dev/tty.USB0). If the exact name of this file
# changes, you can use * as a wild card (e.g. UPLOAD_PORT = /dev/tty.usb*). # changes, you can use * as a wild card (e.g. UPLOAD_PORT = /dev/tty.usb*).
# #
# 3. Set the line containing "MCU" to match your board's processor. # 3. Set the line containing "MCU" to match your board's processor. Set
# Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth # "PROG_MCU" as the AVR part name corresponding to "MCU". You can use the
# following command to get a list of correspondences: `avrdude -c alf -p x`
# Older boards are atmega8 based, newer ones like Arduino Mini, Bluetooth
# or Diecimila have the atmega168. If you're using a LilyPad Arduino, # or Diecimila have the atmega168. If you're using a LilyPad Arduino,
# change F_CPU to 8000000. If you are using Gen7 electronics, you # change F_CPU to 8000000. If you are using Gen7 electronics, you
# probably need to use 20000000. Either way, you must regenerate # probably need to use 20000000. Either way, you must regenerate
@ -34,18 +36,18 @@
# 5. Type "make upload", reset your Arduino board, and press enter to # 5. Type "make upload", reset your Arduino board, and press enter to
# upload your program to the Arduino board. # upload your program to the Arduino board.
# #
# Note that all settings at the top of this file can be overriden from # Note that all settings at the top of this file can be overridden from
# the command line with, for example, "make HARDWARE_MOTHERBOARD=71" # the command line with, for example, "make HARDWARE_MOTHERBOARD=71"
# #
# To compile for RAMPS (atmega2560) with Arduino 1.6.9 at root/arduino you would use... # To compile for RAMPS (atmega2560) with Arduino 1.6.9 at root/arduino you would use...
# #
# make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \ # make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
# HARDWARE_MOTHERBOARD=33 ARDUINO_INSTALL_DIR=/root/arduino # HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino
# #
# To compile and upload simply add "upload" to the end of the line... # To compile and upload simply add "upload" to the end of the line...
# #
# make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \ # make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
# HARDWARE_MOTHERBOARD=33 ARDUINO_INSTALL_DIR=/root/arduino upload # HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino upload
# #
# If uploading doesn't work try adding the parameter "AVRDUDE_PROGRAMMER=wiring" or # If uploading doesn't work try adding the parameter "AVRDUDE_PROGRAMMER=wiring" or
# start upload manually (using stk500) like so: # start upload manually (using stk500) like so:
@ -57,7 +59,26 @@
# #
# This defines the board to compile for (see boards.h for your board's ID) # This defines the board to compile for (see boards.h for your board's ID)
HARDWARE_MOTHERBOARD ?= 11 HARDWARE_MOTHERBOARD ?= 1020
ifeq ($(OS),Windows_NT)
# Windows
ARDUINO_INSTALL_DIR ?= ${HOME}/Arduino
ARDUINO_USER_DIR ?= ${HOME}/Arduino
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
# Linux
ARDUINO_INSTALL_DIR ?= /usr/share/arduino
ARDUINO_USER_DIR ?= ${HOME}/Arduino
endif
ifeq ($(UNAME_S),Darwin)
# Darwin (macOS)
ARDUINO_INSTALL_DIR ?= /Applications/Arduino.app/Contents/Java
ARDUINO_USER_DIR ?= ${HOME}/Documents/Arduino
AVR_TOOLS_PATH ?= /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/
endif
endif
# Arduino source install directory, and version number # Arduino source install directory, and version number
# On most linuxes this will be /usr/share/arduino # On most linuxes this will be /usr/share/arduino
@ -67,32 +88,38 @@ ARDUINO_VERSION ?= 106
# The installed Libraries are in the User folder # The installed Libraries are in the User folder
ARDUINO_USER_DIR ?= ${HOME}/Arduino ARDUINO_USER_DIR ?= ${HOME}/Arduino
# You can optionally set a path to the avr-gcc tools. Requires a trailing slash. (ex: /usr/local/avr-gcc/bin) # You can optionally set a path to the avr-gcc tools.
# Requires a trailing slash. For example, /usr/local/avr-gcc/bin/
AVR_TOOLS_PATH ?= AVR_TOOLS_PATH ?=
#Programmer configuration # Programmer configuration
UPLOAD_RATE ?= 57600 UPLOAD_RATE ?= 57600
AVRDUDE_PROGRAMMER ?= arduino AVRDUDE_PROGRAMMER ?= arduino
# on most linuxes this will be /dev/ttyACM0 or /dev/ttyACM1 # On most linuxes this will be /dev/ttyACM0 or /dev/ttyACM1
UPLOAD_PORT ?= /dev/ttyUSB0 UPLOAD_PORT ?= /dev/ttyUSB0
#Directory used to build files in, contains all the build files, from object files to the final hex file # Directory used to build files in, contains all the build files, from object
#on linux it is best to put an absolute path like /home/username/tmp . # files to the final hex file on linux it is best to put an absolute path
# like /home/username/tmp .
BUILD_DIR ?= applet BUILD_DIR ?= applet
# This defines whether Liquid_TWI2 support will be built # This defines whether Liquid_TWI2 support will be built
LIQUID_TWI2 ?= 0 LIQUID_TWI2 ?= 0
# this defines if Wire is needed # This defines if Wire is needed
WIRE ?= 0 WIRE ?= 0
# this defines if U8GLIB is needed (may require RELOC_WORKAROUND) # This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
U8GLIB ?= 1 # Disabling this (and SPEAKER) saves approximatively 350 bytes of memory.
TONE ?= 1
# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
U8GLIB ?= 0
# this defines whether to include the Trinamic TMCStepper library # This defines whether to include the Trinamic TMCStepper library
TMC ?= 1 TMC ?= 0
# this defines whether to include the AdaFruit NeoPixel library # This defines whether to include the AdaFruit NeoPixel library
NEOPIXEL ?= 0 NEOPIXEL ?= 0
############ ############
@ -209,6 +236,7 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1120)
# Ultimaker (Older electronics. Pre 1.5.4. This is rare) # Ultimaker (Older electronics. Pre 1.5.4. This is rare)
else ifeq ($(HARDWARE_MOTHERBOARD),1121) else ifeq ($(HARDWARE_MOTHERBOARD),1121)
MCU ?= atmega1280 MCU ?= atmega1280
PROG_MCU ?= m1280
# Azteeg X3 # Azteeg X3
else ifeq ($(HARDWARE_MOTHERBOARD),1122) else ifeq ($(HARDWARE_MOTHERBOARD),1122)
@ -350,9 +378,11 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1320)
# Minitronics v1.0/1.1 # Minitronics v1.0/1.1
else ifeq ($(HARDWARE_MOTHERBOARD),1400) else ifeq ($(HARDWARE_MOTHERBOARD),1400)
MCU ?= atmega1281 MCU ?= atmega1281
PROG_MCU ?= m1281
# Silvergate v1.0 # Silvergate v1.0
else ifeq ($(HARDWARE_MOTHERBOARD),1401) else ifeq ($(HARDWARE_MOTHERBOARD),1401)
MCU ?= atmega1281 MCU ?= atmega1281
PROG_MCU ?= m1281
# #
# Sanguinololu and Derivatives - ATmega644P, ATmega1284P # Sanguinololu and Derivatives - ATmega644P, ATmega1284P
@ -362,46 +392,57 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1401)
else ifeq ($(HARDWARE_MOTHERBOARD),1500) else ifeq ($(HARDWARE_MOTHERBOARD),1500)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Sanguinololu 1.2 and above # Sanguinololu 1.2 and above
else ifeq ($(HARDWARE_MOTHERBOARD),1501) else ifeq ($(HARDWARE_MOTHERBOARD),1501)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Melzi # Melzi
else ifeq ($(HARDWARE_MOTHERBOARD),1502) else ifeq ($(HARDWARE_MOTHERBOARD),1502)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Melzi V2.0 # Melzi V2.0
else ifeq ($(HARDWARE_MOTHERBOARD),1503) else ifeq ($(HARDWARE_MOTHERBOARD),1503)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Melzi with ATmega1284 (MaKr3d version) # Melzi with ATmega1284 (MaKr3d version)
else ifeq ($(HARDWARE_MOTHERBOARD),1504) else ifeq ($(HARDWARE_MOTHERBOARD),1504)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Melzi Creality3D board (for CR-10 etc) # Melzi Creality3D board (for CR-10 etc)
else ifeq ($(HARDWARE_MOTHERBOARD),1505) else ifeq ($(HARDWARE_MOTHERBOARD),1505)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Melzi Malyan M150 board # Melzi Malyan M150 board
else ifeq ($(HARDWARE_MOTHERBOARD),1506) else ifeq ($(HARDWARE_MOTHERBOARD),1506)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Tronxy X5S # Tronxy X5S
else ifeq ($(HARDWARE_MOTHERBOARD),1507) else ifeq ($(HARDWARE_MOTHERBOARD),1507)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# STB V1.1 # STB V1.1
else ifeq ($(HARDWARE_MOTHERBOARD),1508) else ifeq ($(HARDWARE_MOTHERBOARD),1508)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Azteeg X1 # Azteeg X1
else ifeq ($(HARDWARE_MOTHERBOARD),1509) else ifeq ($(HARDWARE_MOTHERBOARD),1509)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# Anet 1.0 (Melzi clone) # Anet 1.0 (Melzi clone)
else ifeq ($(HARDWARE_MOTHERBOARD),1510) else ifeq ($(HARDWARE_MOTHERBOARD),1510)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
# #
# Other ATmega644P, ATmega644, ATmega1284P # Other ATmega644P, ATmega644, ATmega1284P
@ -411,50 +452,61 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1510)
else ifeq ($(HARDWARE_MOTHERBOARD),1600) else ifeq ($(HARDWARE_MOTHERBOARD),1600)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Gen3+ # Gen3+
else ifeq ($(HARDWARE_MOTHERBOARD),1601) else ifeq ($(HARDWARE_MOTHERBOARD),1601)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Gen6 # Gen6
else ifeq ($(HARDWARE_MOTHERBOARD),1602) else ifeq ($(HARDWARE_MOTHERBOARD),1602)
HARDWARE_VARIANT ?= Gen6 HARDWARE_VARIANT ?= Gen6
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Gen6 deluxe # Gen6 deluxe
else ifeq ($(HARDWARE_MOTHERBOARD),1603) else ifeq ($(HARDWARE_MOTHERBOARD),1603)
HARDWARE_VARIANT ?= Gen6 HARDWARE_VARIANT ?= Gen6
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Gen7 custom (Alfons3 Version) # Gen7 custom (Alfons3 Version)
else ifeq ($(HARDWARE_MOTHERBOARD),1604) else ifeq ($(HARDWARE_MOTHERBOARD),1604)
HARDWARE_VARIANT ?= Gen7 HARDWARE_VARIANT ?= Gen7
MCU ?= atmega644 MCU ?= atmega644
PROG_MCU ?= m644
F_CPU ?= 20000000 F_CPU ?= 20000000
# Gen7 v1.1, v1.2 # Gen7 v1.1, v1.2
else ifeq ($(HARDWARE_MOTHERBOARD),1605) else ifeq ($(HARDWARE_MOTHERBOARD),1605)
HARDWARE_VARIANT ?= Gen7 HARDWARE_VARIANT ?= Gen7
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
F_CPU ?= 20000000 F_CPU ?= 20000000
# Gen7 v1.3 # Gen7 v1.3
else ifeq ($(HARDWARE_MOTHERBOARD),1606) else ifeq ($(HARDWARE_MOTHERBOARD),1606)
HARDWARE_VARIANT ?= Gen7 HARDWARE_VARIANT ?= Gen7
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
F_CPU ?= 20000000 F_CPU ?= 20000000
# Gen7 v1.4 # Gen7 v1.4
else ifeq ($(HARDWARE_MOTHERBOARD),1607) else ifeq ($(HARDWARE_MOTHERBOARD),1607)
HARDWARE_VARIANT ?= Gen7 HARDWARE_VARIANT ?= Gen7
MCU ?= atmega1284p MCU ?= atmega1284p
PROG_MCU ?= m1284p
F_CPU ?= 20000000 F_CPU ?= 20000000
# Alpha OMCA board # Alpha OMCA board
else ifeq ($(HARDWARE_MOTHERBOARD),1608) else ifeq ($(HARDWARE_MOTHERBOARD),1608)
HARDWARE_VARIANT ?= SanguinoA HARDWARE_VARIANT ?= SanguinoA
MCU ?= atmega644 MCU ?= atmega644
PROG_MCU ?= m644
# Final OMCA board # Final OMCA board
else ifeq ($(HARDWARE_MOTHERBOARD),1609) else ifeq ($(HARDWARE_MOTHERBOARD),1609)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# Sethi 3D_1 # Sethi 3D_1
else ifeq ($(HARDWARE_MOTHERBOARD),1610) else ifeq ($(HARDWARE_MOTHERBOARD),1610)
HARDWARE_VARIANT ?= Sanguino HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega644p MCU ?= atmega644p
PROG_MCU ?= m644p
# #
# Teensyduino - AT90USB1286, AT90USB1286P # Teensyduino - AT90USB1286, AT90USB1286P
@ -464,51 +516,60 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1610)
else ifeq ($(HARDWARE_MOTHERBOARD),1700) else ifeq ($(HARDWARE_MOTHERBOARD),1700)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# Printrboard (AT90USB1286) # Printrboard (AT90USB1286)
else ifeq ($(HARDWARE_MOTHERBOARD),1701) else ifeq ($(HARDWARE_MOTHERBOARD),1701)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# Printrboard Revision F (AT90USB1286) # Printrboard Revision F (AT90USB1286)
else ifeq ($(HARDWARE_MOTHERBOARD),1702) else ifeq ($(HARDWARE_MOTHERBOARD),1702)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# Brainwave (AT90USB646) # Brainwave (AT90USB646)
else ifeq ($(HARDWARE_MOTHERBOARD),1703) else ifeq ($(HARDWARE_MOTHERBOARD),1703)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb646 MCU ?= at90usb646
PROG_MCU ?= usb646
# Brainwave Pro (AT90USB1286) # Brainwave Pro (AT90USB1286)
else ifeq ($(HARDWARE_MOTHERBOARD),1704) else ifeq ($(HARDWARE_MOTHERBOARD),1704)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# SAV Mk-I (AT90USB1286) # SAV Mk-I (AT90USB1286)
else ifeq ($(HARDWARE_MOTHERBOARD),1705) else ifeq ($(HARDWARE_MOTHERBOARD),1705)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# Teensy++2.0 (AT90USB1286) # Teensy++2.0 (AT90USB1286)
else ifeq ($(HARDWARE_MOTHERBOARD),1706) else ifeq ($(HARDWARE_MOTHERBOARD),1706)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# 5DPrint D8 Driver Board # 5DPrint D8 Driver Board
else ifeq ($(HARDWARE_MOTHERBOARD),1707) else ifeq ($(HARDWARE_MOTHERBOARD),1707)
HARDWARE_VARIANT ?= Teensy HARDWARE_VARIANT ?= Teensy
MCU ?= at90usb1286 MCU ?= at90usb1286
PROG_MCU ?= usb1286
# UltiMachine Archim1 (with DRV8825 drivers) # UltiMachine Archim1 (with DRV8825 drivers)
else ifeq ($(HARDWARE_MOTHERBOARD),3023) else ifeq ($(HARDWARE_MOTHERBOARD),3023)
HARDWARE_VARIANT ?= archim HARDWARE_VARIANT ?= archim
MCPU = cortex-m3 MCPU = cortex-m3
F_CPU = 84000000L F_CPU = 84000000
IS_MCU = 0 IS_MCU = 0
# UltiMachine Archim2 (with TMC2130 drivers) # UltiMachine Archim2 (with TMC2130 drivers)
else ifeq ($(HARDWARE_MOTHERBOARD),3024) else ifeq ($(HARDWARE_MOTHERBOARD),3024)
HARDWARE_VARIANT ?= archim HARDWARE_VARIANT ?= archim
MCPU = cortex-m3 MCPU = cortex-m3
F_CPU = 84000000L F_CPU = 84000000
IS_MCU = 0 IS_MCU = 0
endif endif
# Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py # Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py
# if you are setting this to something other than 16MHz # if you are setting this to something other than 16MHz
# Do not put the UL suffix, it's done later on.
# Set to 16Mhz if not yet set. # Set to 16Mhz if not yet set.
F_CPU ?= 16000000 F_CPU ?= 16000000
@ -519,6 +580,7 @@ ifeq ($(IS_MCU),1)
# Set to arduino, ATmega2560 if not yet set. # Set to arduino, ATmega2560 if not yet set.
HARDWARE_VARIANT ?= arduino HARDWARE_VARIANT ?= arduino
MCU ?= atmega2560 MCU ?= atmega2560
PROG_MCU ?= m2560
TOOL_PREFIX = avr TOOL_PREFIX = avr
MCU_FLAGS = -mmcu=$(MCU) MCU_FLAGS = -mmcu=$(MCU)
@ -549,27 +611,36 @@ VPATH += $(BUILD_DIR)
VPATH += $(HARDWARE_SRC) VPATH += $(HARDWARE_SRC)
ifeq ($(HARDWARE_VARIANT), $(filter $(HARDWARE_VARIANT),arduino Teensy Sanguino)) ifeq ($(HARDWARE_VARIANT), $(filter $(HARDWARE_VARIANT),arduino Teensy Sanguino))
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/marlin/avr/libraries/LiquidCrystal/src # Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/marlin/avr/libraries/SPI VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
# New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
endif endif
ifeq ($(IS_MCU),1) ifeq ($(IS_MCU),1)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/cores/arduino VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/cores/arduino
# Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial
# New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial/src VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial/src
endif endif
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidCrystal/src VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidCrystal/src
ifeq ($(LIQUID_TWI2), 1) ifeq ($(LIQUID_TWI2), 1)
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire WIRE = 1
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
endif endif
ifeq ($(WIRE), 1) ifeq ($(WIRE), 1)
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire # Old libraries (avr-core 1.6.21 / Arduino < 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Wire/utility VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/utility
# New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src
VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src/utility
endif endif
ifeq ($(NEOPIXEL), 1) ifeq ($(NEOPIXEL), 1)
VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Adafruit_NeoPixel VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Adafruit_NeoPixel
@ -641,13 +712,23 @@ ifeq ($(WIRE), 1)
LIB_CXXSRC += Wire.cpp LIB_CXXSRC += Wire.cpp
endif endif
ifeq ($(TONE), 1)
LIB_CXXSRC += Tone.cpp
endif
ifeq ($(U8GLIB), 1) ifeq ($(U8GLIB), 1)
LIB_CXXSRC += U8glib.cpp LIB_CXXSRC += U8glib.cpp
LIB_SRC += u8g_ll_api.c u8g_bitmap.c u8g_clip.c u8g_com_null.c u8g_delay.c u8g_page.c u8g_pb.c u8g_pb16h1.c u8g_rect.c u8g_state.c u8g_font.c u8g_font_6x13.c u8g_font_04b_03.c u8g_font_5x8.c LIB_SRC += u8g_ll_api.c u8g_bitmap.c u8g_clip.c u8g_com_null.c u8g_delay.c \
u8g_page.c u8g_pb.c u8g_pb16h1.c u8g_rect.c u8g_state.c u8g_font.c \
u8g_font_6x13.c u8g_font_04b_03.c u8g_font_5x8.c
endif endif
ifeq ($(TMC), 1) ifeq ($(TMC), 1)
LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp \
CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp \
DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp \
SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp \
TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
endif endif
ifeq ($(RELOC_WORKAROUND), 1) ifeq ($(RELOC_WORKAROUND), 1)
@ -689,7 +770,7 @@ REMOVE = rm -f
MV = mv -f MV = mv -f
# Place -D or -U options here # Place -D or -U options here
CDEFS = -DF_CPU=$(F_CPU) ${addprefix -D , $(DEFINES)} -DARDUINO=$(ARDUINO_VERSION) CDEFS = -DF_CPU=$(F_CPU)UL ${addprefix -D , $(DEFINES)} -DARDUINO=$(ARDUINO_VERSION)
CXXDEFS = $(CDEFS) CXXDEFS = $(CDEFS)
ifeq ($(HARDWARE_VARIANT), Teensy) ifeq ($(HARDWARE_VARIANT), Teensy)
@ -698,8 +779,14 @@ ifeq ($(HARDWARE_VARIANT), Teensy)
LIB_CXXSRC += usb_api.cpp LIB_CXXSRC += usb_api.cpp
else ifeq ($(HARDWARE_VARIANT), archim) else ifeq ($(HARDWARE_VARIANT), archim)
CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__ -DUSB_VID=0x27b1 -DUSB_PID=0x0001 -DUSBCON '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT_STRING="Archim"' CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__
LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp PluggableUSB.cpp USBCore.cpp CDEFS += -DUSB_VID=0x27B1 -DUSB_PID=0x0001 -DUSBCON
CDEFS += '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT_STRING="Archim"'
LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp \
UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp \
PluggableUSB.cpp USBCore.cpp
LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
ifeq ($(U8GLIB), 1) ifeq ($(U8GLIB), 1)
@ -725,16 +812,20 @@ CTUNING = -fsigned-char -funsigned-bitfields -fno-exceptions \
ifneq ($(HARDWARE_MOTHERBOARD),) ifneq ($(HARDWARE_MOTHERBOARD),)
CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD} CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
endif endif
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
CXXEXTRA = -fno-use-cxa-atexit -fno-threadsafe-statics -fno-rtti CXXEXTRA = -fno-use-cxa-atexit -fno-threadsafe-statics -fno-rtti
CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CEXTRA) $(CTUNING) $(CSTANDARD) CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CEXTRA) $(CTUNING) $(CSTANDARD)
CXXFLAGS := $(CDEFS) $(CINCS) -O$(OPT) $(CXXEXTRA) $(CTUNING) $(CXXSTANDARD) CXXFLAGS := $(CDEFS) $(CINCS) -O$(OPT) $(CXXEXTRA) $(CTUNING) $(CXXSTANDARD)
ASFLAGS := $(CDEFS) ASFLAGS := $(CDEFS)
#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
ifeq ($(HARDWARE_VARIANT), archim) ifeq ($(HARDWARE_VARIANT), archim)
LD_PREFIX = -Wl,--gc-sections,-Map,Marlin.ino.map,--cref,--check-sections,--entry=Reset_Handler,--unresolved-symbols=report-all,--warn-common,--warn-section-align LD_PREFIX = -Wl,--gc-sections,-Map,Marlin.ino.map,--cref,--check-sections,--entry=Reset_Handler,--unresolved-symbols=report-all,--warn-common,--warn-section-align
LD_SUFFIX = $(LDLIBS) LD_SUFFIX = $(LDLIBS)
LDFLAGS = -lm -T$(LDSCRIPT) -u _sbrk -u link -u _close -u _fstat -u _isatty -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
LDFLAGS = -lm -T$(LDSCRIPT) -u _sbrk -u link -u _close -u _fstat -u _isatty
LDFLAGS += -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
else else
LD_PREFIX = -Wl,--gc-sections,--relax LD_PREFIX = -Wl,--gc-sections,--relax
LDFLAGS = -lm LDFLAGS = -lm
@ -750,7 +841,7 @@ else
AVRDUDE_CONF = $(ARDUINO_INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf AVRDUDE_CONF = $(ARDUINO_INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
endif endif
AVRDUDE_FLAGS = -D -C$(AVRDUDE_CONF) \ AVRDUDE_FLAGS = -D -C$(AVRDUDE_CONF) \
-p$(MCU) -P$(AVRDUDE_PORT) -c$(AVRDUDE_PROGRAMMER) \ -p$(PROG_MCU) -P$(AVRDUDE_PORT) -c$(AVRDUDE_PROGRAMMER) \
-b$(UPLOAD_RATE) -b$(UPLOAD_RATE)
# Since Marlin 2.0, the source files may be distributed into several # Since Marlin 2.0, the source files may be distributed into several
@ -865,7 +956,7 @@ extcoff: $(TARGET).elf
$(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h $(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
$(Pecho) " CXX $@" $(Pecho) " CXX $@"
$P $(CC) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX) $P $(CXX) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX)
# Object files that were found in "src" will be stored in $(BUILD_DIR) # Object files that were found in "src" will be stored in $(BUILD_DIR)
# in directories that mirror the structure of "src" # in directories that mirror the structure of "src"

2
Marlin/Version.h

@ -28,7 +28,7 @@
/** /**
* Marlin release version identifier * Marlin release version identifier
*/ */
//#define SHORT_BUILD_VERSION "2.0.7" //#define SHORT_BUILD_VERSION "2.0.7.2"
/** /**
* Verbose version identifier which should contain a reference to the location * Verbose version identifier which should contain a reference to the location

6
Marlin/src/HAL/AVR/HAL.h

@ -25,7 +25,7 @@
#include "watchdog.h" #include "watchdog.h"
#include "math.h" #include "math.h"
#ifdef USBCON #ifdef IS_AT90USB
#include <HardwareSerial.h> #include <HardwareSerial.h>
#else #else
#define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion #define HardwareSerial_h // Hack to prevent HardwareSerial.h header inclusion
@ -81,7 +81,7 @@ typedef int8_t pin_t;
//extern uint8_t MCUSR; //extern uint8_t MCUSR;
// Serial ports // Serial ports
#ifdef USBCON #ifdef IS_AT90USB
#define MYSERIAL0 TERN(BLUETOOTH, bluetoothSerial, Serial) #define MYSERIAL0 TERN(BLUETOOTH, bluetoothSerial, Serial)
#else #else
#if !WITHIN(SERIAL_PORT, -1, 3) #if !WITHIN(SERIAL_PORT, -1, 3)
@ -120,6 +120,8 @@ void HAL_init();
inline void HAL_clear_reset_source() { MCUSR = 0; } inline void HAL_clear_reset_source() { MCUSR = 0; }
inline uint8_t HAL_get_reset_source() { return MCUSR; } inline uint8_t HAL_get_reset_source() { return MCUSR; }
inline void HAL_reboot() {} // reboot the board or restart the bootloader
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function" #pragma GCC diagnostic ignored "-Wunused-function"
extern "C" { extern "C" {

6
Marlin/src/HAL/AVR/MarlinSerial.cpp

@ -38,7 +38,7 @@
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if !defined(USBCON) && (defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H)) #if !IS_AT90USB && (defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H))
#include "MarlinSerial.h" #include "MarlinSerial.h"
#include "../../MarlinCore.h" #include "../../MarlinCore.h"
@ -792,10 +792,10 @@ MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
#endif #endif
#endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H) #endif // !IS_AT90USB && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H)
// For AT90USB targets use the UART for BT interfacing // For AT90USB targets use the UART for BT interfacing
#if defined(USBCON) && ENABLED(BLUETOOTH) #if BOTH(IS_AT90USB, BLUETOOTH)
HardwareSerial bluetoothSerial; HardwareSerial bluetoothSerial;
#endif #endif

2
Marlin/src/HAL/AVR/MarlinSerial.h

@ -327,6 +327,6 @@
#endif #endif
// Use the UART for Bluetooth in AT90USB configurations // Use the UART for Bluetooth in AT90USB configurations
#if defined(USBCON) && ENABLED(BLUETOOTH) #if BOTH(IS_AT90USB, BLUETOOTH)
extern HardwareSerial bluetoothSerial; extern HardwareSerial bluetoothSerial;
#endif #endif

4
Marlin/src/HAL/AVR/fast_pwm.cpp

@ -185,8 +185,8 @@ void set_pwm_frequency(const pin_t pin, int f_desired) {
res_temp_phase_correct = rtf / 2; res_temp_phase_correct = rtf / 2;
} }
LIMIT(res_temp_fast, 1u, size); LIMIT(res_temp_fast, 1U, size);
LIMIT(res_temp_phase_correct, 1u, size); LIMIT(res_temp_phase_correct, 1U, size);
// Calculate frequencies of test prescaler and resolution values // Calculate frequencies of test prescaler and resolution values
const int f_temp_fast = (F_CPU) / (prescaler[i] * (1 + res_temp_fast)), const int f_temp_fast = (F_CPU) / (prescaler[i] * (1 + res_temp_fast)),
f_temp_phase_correct = (F_CPU) / (2 * prescaler[i] * res_temp_phase_correct), f_temp_phase_correct = (F_CPU) / (2 * prescaler[i] * res_temp_phase_correct),

4
Marlin/src/HAL/DUE/HAL.cpp

@ -19,9 +19,7 @@
*/ */
/** /**
* Description: HAL for Arduino Due and compatible (SAM3X8E) * HAL for Arduino Due and compatible (SAM3X8E)
*
* For ARDUINO_ARCH_SAM
*/ */
#ifdef ARDUINO_ARCH_SAM #ifdef ARDUINO_ARCH_SAM

8
Marlin/src/HAL/DUE/HAL.h

@ -22,9 +22,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for Arduino Due and compatible (SAM3X8E) * HAL for Arduino Due and compatible (SAM3X8E)
*
* For ARDUINO_ARCH_SAM
*/ */
#define CPU_32_BIT #define CPU_32_BIT
@ -107,13 +105,15 @@ void sei(); // Enable interrupts
void HAL_clear_reset_source(); // clear reset reason void HAL_clear_reset_source(); // clear reset reason
uint8_t HAL_get_reset_source(); // get reset reason uint8_t HAL_get_reset_source(); // get reset reason
inline void HAL_reboot() {} // reboot the board or restart the bootloader
// //
// ADC // ADC
// //
extern uint16_t HAL_adc_result; // result of last ADC conversion extern uint16_t HAL_adc_result; // result of last ADC conversion
#ifndef analogInputToDigitalPin #ifndef analogInputToDigitalPin
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1) #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
#endif #endif
#define HAL_ANALOG_SELECT(ch) #define HAL_ANALOG_SELECT(ch)

2
Marlin/src/HAL/DUE/HAL_SPI.cpp

@ -30,7 +30,7 @@
*/ */
/** /**
* Description: HAL for Arduino Due and compatible (SAM3X8E) * HAL for Arduino Due and compatible (SAM3X8E)
* *
* For ARDUINO_ARCH_SAM * For ARDUINO_ARCH_SAM
*/ */

2
Marlin/src/HAL/DUE/eeprom_flash.cpp

@ -60,7 +60,7 @@
#define EEPROMSize 4096 #define EEPROMSize 4096
#define PagesPerGroup 128 #define PagesPerGroup 128
#define GroupCount 2 #define GroupCount 2
#define PageSize 256u #define PageSize 256U
/* Flash storage */ /* Flash storage */
typedef struct FLASH_SECTOR { typedef struct FLASH_SECTOR {

2
Marlin/src/HAL/DUE/fastio/G2_PWM.cpp

@ -154,7 +154,7 @@ void Stepper::digipot_init() {
NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0)); // normal priority for PWM module (can stand some jitter on the Vref signals) NVIC_SetPriority(PWM_IRQn, NVIC_EncodePriority(0, 10, 0)); // normal priority for PWM module (can stand some jitter on the Vref signals)
} }
void Stepper::digipot_current(const uint8_t driver, const int16_t current) { void Stepper::set_digipot_current(const uint8_t driver, const int16_t current) {
if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init(); // Init PWM system if needed if (!(PWM->PWM_CH_NUM[0].PWM_CPRD == PWM_PERIOD_US)) digipot_init(); // Init PWM system if needed

4
Marlin/src/HAL/DUE/timers.cpp

@ -21,9 +21,7 @@
*/ */
/** /**
* Description: HAL for Arduino Due and compatible (SAM3X8E) * HAL Timers for Arduino Due and compatible (SAM3X8E)
*
* For ARDUINO_ARCH_SAM
*/ */
#ifdef ARDUINO_ARCH_SAM #ifdef ARDUINO_ARCH_SAM

4
Marlin/src/HAL/DUE/timers.h

@ -21,9 +21,7 @@
#pragma once #pragma once
/** /**
* HAL for Arduino Due and compatible (SAM3X8E) * HAL Timers for Arduino Due and compatible (SAM3X8E)
*
* For ARDUINO_ARCH_SAM
*/ */
#include <stdint.h> #include <stdint.h>

2
Marlin/src/HAL/DUE/upload_extra_script.py

@ -14,5 +14,5 @@ if current_OS == 'Windows':
# Use bossac.exe on Windows # Use bossac.exe on Windows
env.Replace( env.Replace(
UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot" UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot $SOURCE"
) )

126
Marlin/src/HAL/DUE/usb/compiler.h

@ -609,37 +609,37 @@ typedef struct
# define clz(u) ((u) ? __CLZ(u) : 32) # define clz(u) ((u) ? __CLZ(u) : 32)
#else #else
# define clz(u) (((u) == 0) ? 32 : \ # define clz(u) (((u) == 0) ? 32 : \
((u) & (1ul << 31)) ? 0 : \ ((u) & (1UL << 31)) ? 0 : \
((u) & (1ul << 30)) ? 1 : \ ((u) & (1UL << 30)) ? 1 : \
((u) & (1ul << 29)) ? 2 : \ ((u) & (1UL << 29)) ? 2 : \
((u) & (1ul << 28)) ? 3 : \ ((u) & (1UL << 28)) ? 3 : \
((u) & (1ul << 27)) ? 4 : \ ((u) & (1UL << 27)) ? 4 : \
((u) & (1ul << 26)) ? 5 : \ ((u) & (1UL << 26)) ? 5 : \
((u) & (1ul << 25)) ? 6 : \ ((u) & (1UL << 25)) ? 6 : \
((u) & (1ul << 24)) ? 7 : \ ((u) & (1UL << 24)) ? 7 : \
((u) & (1ul << 23)) ? 8 : \ ((u) & (1UL << 23)) ? 8 : \
((u) & (1ul << 22)) ? 9 : \ ((u) & (1UL << 22)) ? 9 : \
((u) & (1ul << 21)) ? 10 : \ ((u) & (1UL << 21)) ? 10 : \
((u) & (1ul << 20)) ? 11 : \ ((u) & (1UL << 20)) ? 11 : \
((u) & (1ul << 19)) ? 12 : \ ((u) & (1UL << 19)) ? 12 : \
((u) & (1ul << 18)) ? 13 : \ ((u) & (1UL << 18)) ? 13 : \
((u) & (1ul << 17)) ? 14 : \ ((u) & (1UL << 17)) ? 14 : \
((u) & (1ul << 16)) ? 15 : \ ((u) & (1UL << 16)) ? 15 : \
((u) & (1ul << 15)) ? 16 : \ ((u) & (1UL << 15)) ? 16 : \
((u) & (1ul << 14)) ? 17 : \ ((u) & (1UL << 14)) ? 17 : \
((u) & (1ul << 13)) ? 18 : \ ((u) & (1UL << 13)) ? 18 : \
((u) & (1ul << 12)) ? 19 : \ ((u) & (1UL << 12)) ? 19 : \
((u) & (1ul << 11)) ? 20 : \ ((u) & (1UL << 11)) ? 20 : \
((u) & (1ul << 10)) ? 21 : \ ((u) & (1UL << 10)) ? 21 : \
((u) & (1ul << 9)) ? 22 : \ ((u) & (1UL << 9)) ? 22 : \
((u) & (1ul << 8)) ? 23 : \ ((u) & (1UL << 8)) ? 23 : \
((u) & (1ul << 7)) ? 24 : \ ((u) & (1UL << 7)) ? 24 : \
((u) & (1ul << 6)) ? 25 : \ ((u) & (1UL << 6)) ? 25 : \
((u) & (1ul << 5)) ? 26 : \ ((u) & (1UL << 5)) ? 26 : \
((u) & (1ul << 4)) ? 27 : \ ((u) & (1UL << 4)) ? 27 : \
((u) & (1ul << 3)) ? 28 : \ ((u) & (1UL << 3)) ? 28 : \
((u) & (1ul << 2)) ? 29 : \ ((u) & (1UL << 2)) ? 29 : \
((u) & (1ul << 1)) ? 30 : \ ((u) & (1UL << 1)) ? 30 : \
31) 31)
#endif #endif
#endif #endif
@ -654,38 +654,38 @@ typedef struct
#if (defined __GNUC__) || (defined __CC_ARM) #if (defined __GNUC__) || (defined __CC_ARM)
# define ctz(u) ((u) ? __builtin_ctz(u) : 32) # define ctz(u) ((u) ? __builtin_ctz(u) : 32)
#else #else
# define ctz(u) ((u) & (1ul << 0) ? 0 : \ # define ctz(u) ((u) & (1UL << 0) ? 0 : \
(u) & (1ul << 1) ? 1 : \ (u) & (1UL << 1) ? 1 : \
(u) & (1ul << 2) ? 2 : \ (u) & (1UL << 2) ? 2 : \
(u) & (1ul << 3) ? 3 : \ (u) & (1UL << 3) ? 3 : \
(u) & (1ul << 4) ? 4 : \ (u) & (1UL << 4) ? 4 : \
(u) & (1ul << 5) ? 5 : \ (u) & (1UL << 5) ? 5 : \
(u) & (1ul << 6) ? 6 : \ (u) & (1UL << 6) ? 6 : \
(u) & (1ul << 7) ? 7 : \ (u) & (1UL << 7) ? 7 : \
(u) & (1ul << 8) ? 8 : \ (u) & (1UL << 8) ? 8 : \
(u) & (1ul << 9) ? 9 : \ (u) & (1UL << 9) ? 9 : \
(u) & (1ul << 10) ? 10 : \ (u) & (1UL << 10) ? 10 : \
(u) & (1ul << 11) ? 11 : \ (u) & (1UL << 11) ? 11 : \
(u) & (1ul << 12) ? 12 : \ (u) & (1UL << 12) ? 12 : \
(u) & (1ul << 13) ? 13 : \ (u) & (1UL << 13) ? 13 : \
(u) & (1ul << 14) ? 14 : \ (u) & (1UL << 14) ? 14 : \
(u) & (1ul << 15) ? 15 : \ (u) & (1UL << 15) ? 15 : \
(u) & (1ul << 16) ? 16 : \ (u) & (1UL << 16) ? 16 : \
(u) & (1ul << 17) ? 17 : \ (u) & (1UL << 17) ? 17 : \
(u) & (1ul << 18) ? 18 : \ (u) & (1UL << 18) ? 18 : \
(u) & (1ul << 19) ? 19 : \ (u) & (1UL << 19) ? 19 : \
(u) & (1ul << 20) ? 20 : \ (u) & (1UL << 20) ? 20 : \
(u) & (1ul << 21) ? 21 : \ (u) & (1UL << 21) ? 21 : \
(u) & (1ul << 22) ? 22 : \ (u) & (1UL << 22) ? 22 : \
(u) & (1ul << 23) ? 23 : \ (u) & (1UL << 23) ? 23 : \
(u) & (1ul << 24) ? 24 : \ (u) & (1UL << 24) ? 24 : \
(u) & (1ul << 25) ? 25 : \ (u) & (1UL << 25) ? 25 : \
(u) & (1ul << 26) ? 26 : \ (u) & (1UL << 26) ? 26 : \
(u) & (1ul << 27) ? 27 : \ (u) & (1UL << 27) ? 27 : \
(u) & (1ul << 28) ? 28 : \ (u) & (1UL << 28) ? 28 : \
(u) & (1ul << 29) ? 29 : \ (u) & (1UL << 29) ? 29 : \
(u) & (1ul << 30) ? 30 : \ (u) & (1UL << 30) ? 30 : \
(u) & (1ul << 31) ? 31 : \ (u) & (1UL << 31) ? 31 : \
32) 32)
#endif #endif
#endif #endif

8
Marlin/src/HAL/ESP32/HAL.h

@ -20,7 +20,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for Espressif ESP32 WiFi * HAL for Espressif ESP32 WiFi
*/ */
#define CPU_32_BIT #define CPU_32_BIT
@ -96,6 +96,8 @@ void HAL_clear_reset_source();
// reset reason // reset reason
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
void _delay_ms(int delay); void _delay_ms(int delay);
#pragma GCC diagnostic push #pragma GCC diagnostic push
@ -155,14 +157,14 @@ FORCE_INLINE static void DELAY_CYCLES(uint32_t x) {
if (stop >= start) { if (stop >= start) {
// no overflow, so only loop while in between start and stop: // no overflow, so only loop while in between start and stop:
// 0x00000000 -----------------start****stop-- 0xffffffff // 0x00000000 -----------------start****stop-- 0xFFFFFFFF
while (ccount >= start && ccount < stop) { while (ccount >= start && ccount < stop) {
__asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) );
} }
} }
else { else {
// stop did overflow, so only loop while outside of stop and start: // stop did overflow, so only loop while outside of stop and start:
// 0x00000000 **stop-------------------start** 0xffffffff // 0x00000000 **stop-------------------start** 0xFFFFFFFF
while (ccount >= start || ccount < stop) { while (ccount >= start || ccount < stop) {
__asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) );
} }

2
Marlin/src/HAL/HAL.h

@ -34,7 +34,7 @@
#define HAL_ADC_RANGE _BV(HAL_ADC_RESOLUTION) #define HAL_ADC_RANGE _BV(HAL_ADC_RESOLUTION)
#ifndef I2C_ADDRESS #ifndef I2C_ADDRESS
#define I2C_ADDRESS(A) (A) #define I2C_ADDRESS(A) uint8_t(A)
#endif #endif
// Needed for AVR sprintf_P PROGMEM extension // Needed for AVR sprintf_P PROGMEM extension

2
Marlin/src/HAL/LINUX/HAL.h

@ -101,6 +101,8 @@ uint16_t HAL_adc_get_result();
inline void HAL_clear_reset_source(void) {} inline void HAL_clear_reset_source(void) {}
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
inline void HAL_reboot() {} // reboot the board or restart the bootloader
/* ---------------- Delay in cycles */ /* ---------------- Delay in cycles */
FORCE_INLINE static void DELAY_CYCLES(uint64_t x) { FORCE_INLINE static void DELAY_CYCLES(uint64_t x) {
Clock::delayCycles(x); Clock::delayCycles(x);

2
Marlin/src/HAL/LPC1768/HAL.h

@ -200,6 +200,8 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255,
void HAL_clear_reset_source(void); void HAL_clear_reset_source(void);
uint8_t HAL_get_reset_source(void); uint8_t HAL_get_reset_source(void);
inline void HAL_reboot() {} // reboot the board or restart the bootloader
// Add strcmp_P if missing // Add strcmp_P if missing
#ifndef strcmp_P #ifndef strcmp_P
#define strcmp_P(a, b) strcmp((a), (b)) #define strcmp_P(a, b) strcmp((a), (b))

7
Marlin/src/HAL/LPC1768/inc/Conditionals_LCD.h

@ -24,10 +24,3 @@
#if HAS_FSMC_TFT #if HAS_FSMC_TFT
#error "Sorry! FSMC TFT displays are not current available for HAL/LPC1768." #error "Sorry! FSMC TFT displays are not current available for HAL/LPC1768."
#endif #endif
// This emulated DOGM has 'touch/xpt2046', not 'tft/xpt2046'
#if ENABLED(TOUCH_SCREEN) && !HAS_GRAPHICAL_TFT
#undef TOUCH_SCREEN
#undef TOUCH_SCREEN_CALIBRATION
#define HAS_TOUCH_XPT2046 1
#endif

2
Marlin/src/HAL/LPC1768/inc/SanityCheck.h

@ -191,7 +191,7 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o
// //
// Flag any i2c pin conflicts // Flag any i2c pin conflicts
// //
#if ANY(HAS_I2C_DIGIPOT, DAC_STEPPER_CURRENT, EXPERIMENTAL_I2CBUS, I2C_POSITION_ENCODERS, PCA9632, I2C_EEPROM) #if ANY(HAS_MOTOR_CURRENT_I2C, HAS_MOTOR_CURRENT_DAC, EXPERIMENTAL_I2CBUS, I2C_POSITION_ENCODERS, PCA9632, I2C_EEPROM)
#define USEDI2CDEV_M 1 // <Arduino>/Wire.cpp #define USEDI2CDEV_M 1 // <Arduino>/Wire.cpp
#if USEDI2CDEV_M == 0 // P0_27 [D57] (AUX-1) .......... P0_28 [D58] (AUX-1) #if USEDI2CDEV_M == 0 // P0_27 [D57] (AUX-1) .......... P0_28 [D58] (AUX-1)

2
Marlin/src/HAL/LPC1768/tft/tft_spi.h

@ -36,7 +36,7 @@
#define DATASIZE_8BIT SSP_DATABIT_8 #define DATASIZE_8BIT SSP_DATABIT_8
#define DATASIZE_16BIT SSP_DATABIT_16 #define DATASIZE_16BIT SSP_DATABIT_16
#define TFT_IO TFT_SPI #define TFT_IO_DRIVER TFT_SPI
#define DMA_MINC_ENABLE 1 #define DMA_MINC_ENABLE 1
#define DMA_MINC_DISABLE 0 #define DMA_MINC_DISABLE 0

2
Marlin/src/HAL/SAMD51/HAL.h

@ -88,6 +88,8 @@ typedef int8_t pin_t;
void HAL_clear_reset_source(); // clear reset reason void HAL_clear_reset_source(); // clear reset reason
uint8_t HAL_get_reset_source(); // get reset reason uint8_t HAL_get_reset_source(); // get reset reason
inline void HAL_reboot() {} // reboot the board or restart the bootloader
// //
// ADC // ADC
// //

2
Marlin/src/HAL/SAMD51/QSPIFlash.cpp

@ -26,7 +26,7 @@
#include "QSPIFlash.h" #include "QSPIFlash.h"
#define INVALID_ADDR 0xffffffff #define INVALID_ADDR 0xFFFFFFFF
#define SECTOR_OF(a) (a & ~(SFLASH_SECTOR_SIZE - 1)) #define SECTOR_OF(a) (a & ~(SFLASH_SECTOR_SIZE - 1))
#define OFFSET_OF(a) (a & (SFLASH_SECTOR_SIZE - 1)) #define OFFSET_OF(a) (a & (SFLASH_SECTOR_SIZE - 1))

9
Marlin/src/HAL/STM32/HAL.cpp

@ -63,7 +63,7 @@ uint16_t HAL_adc_result;
void HAL_init() { void HAL_init() {
FastIO_init(); FastIO_init();
#if ENABLED(SDSUPPORT) && DISABLED(SDIO_SUPPORT) #if ENABLED(SDSUPPORT) && DISABLED(SDIO_SUPPORT) && (defined(SDSS) && SDSS != -1)
OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up
#endif #endif
@ -122,9 +122,14 @@ extern "C" {
// TODO: Make sure this doesn't cause any delay // TODO: Make sure this doesn't cause any delay
void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); }
uint16_t HAL_adc_get_result() { return HAL_adc_result; } uint16_t HAL_adc_get_result() { return HAL_adc_result; }
// Reset the system (to initiate a firmware flash)
void flashFirmware(const int16_t) { NVIC_SystemReset(); } void flashFirmware(const int16_t) { NVIC_SystemReset(); }
// Maple Compatibility
systickCallback_t systick_user_callback;
void systick_attach_callback(systickCallback_t cb) { systick_user_callback = cb; }
void HAL_SYSTICK_Callback() { if (systick_user_callback) systick_user_callback(); }
#endif // ARDUINO_ARCH_STM32 && !STM32GENERIC #endif // ARDUINO_ARCH_STM32 && !STM32GENERIC

7
Marlin/src/HAL/STM32/HAL.h

@ -134,6 +134,8 @@ void HAL_clear_reset_source();
// Reset reason // Reset reason
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
void _delay_ms(const int delay); void _delay_ms(const int delay);
extern "C" char* _sbrk(int incr); extern "C" char* _sbrk(int incr);
@ -177,3 +179,8 @@ uint16_t HAL_adc_get_result();
#define PLATFORM_M997_SUPPORT #define PLATFORM_M997_SUPPORT
void flashFirmware(const int16_t); void flashFirmware(const int16_t);
// Maple Compatibility
typedef void (*systickCallback_t)(void);
void systick_attach_callback(systickCallback_t cb);
void HAL_SYSTICK_Callback();

14
Marlin/src/HAL/STM32/HAL_SPI.cpp

@ -132,11 +132,9 @@ static SPISettings spiConfig;
* @details Only configures SS pin since stm32duino creates and initialize the SPI object * @details Only configures SS pin since stm32duino creates and initialize the SPI object
*/ */
void spiBegin() { void spiBegin() {
#if !PIN_EXISTS(SS) #if PIN_EXISTS(SS)
#error "SS_PIN not defined!"
#endif
OUT_WRITE(SS_PIN, HIGH); OUT_WRITE(SS_PIN, HIGH);
#endif
} }
// Configure SPI for specified SPI speed // Configure SPI for specified SPI speed
@ -173,9 +171,7 @@ static SPISettings spiConfig;
* @details * @details
*/ */
uint8_t spiRec() { uint8_t spiRec() {
SPI.beginTransaction(spiConfig);
uint8_t returnByte = SPI.transfer(0xFF); uint8_t returnByte = SPI.transfer(0xFF);
SPI.endTransaction();
return returnByte; return returnByte;
} }
@ -191,9 +187,7 @@ static SPISettings spiConfig;
void spiRead(uint8_t* buf, uint16_t nbyte) { void spiRead(uint8_t* buf, uint16_t nbyte) {
if (nbyte == 0) return; if (nbyte == 0) return;
memset(buf, 0xFF, nbyte); memset(buf, 0xFF, nbyte);
SPI.beginTransaction(spiConfig);
SPI.transfer(buf, nbyte); SPI.transfer(buf, nbyte);
SPI.endTransaction();
} }
/** /**
@ -204,9 +198,7 @@ static SPISettings spiConfig;
* @details * @details
*/ */
void spiSend(uint8_t b) { void spiSend(uint8_t b) {
SPI.beginTransaction(spiConfig);
SPI.transfer(b); SPI.transfer(b);
SPI.endTransaction();
} }
/** /**
@ -219,10 +211,8 @@ static SPISettings spiConfig;
*/ */
void spiSendBlock(uint8_t token, const uint8_t* buf) { void spiSendBlock(uint8_t token, const uint8_t* buf) {
uint8_t rxBuf[512]; uint8_t rxBuf[512];
SPI.beginTransaction(spiConfig);
SPI.transfer(token); SPI.transfer(token);
SPI.transfer((uint8_t*)buf, &rxBuf, 512); SPI.transfer((uint8_t*)buf, &rxBuf, 512);
SPI.endTransaction();
} }
#endif // SOFTWARE_SPI #endif // SOFTWARE_SPI

8
Marlin/src/HAL/STM32/fastio.h

@ -63,7 +63,7 @@ void FastIO_init(); // Must be called before using fast io macros
#define _GET_MODE(IO) #define _GET_MODE(IO)
#define _SET_MODE(IO,M) pinMode(IO, M) #define _SET_MODE(IO,M) pinMode(IO, M)
#define _SET_OUTPUT(IO) pinMode(IO, OUTPUT) /*!< Output Push Pull Mode & GPIO_NOPULL */ #define _SET_OUTPUT(IO) pinMode(IO, OUTPUT) //!< Output Push Pull Mode & GPIO_NOPULL
#define _SET_OUTPUT_OD(IO) pinMode(IO, OUTPUT_OPEN_DRAIN) #define _SET_OUTPUT_OD(IO) pinMode(IO, OUTPUT_OPEN_DRAIN)
#define WRITE(IO,V) _WRITE(IO,V) #define WRITE(IO,V) _WRITE(IO,V)
@ -73,9 +73,9 @@ void FastIO_init(); // Must be called before using fast io macros
#define OUT_WRITE(IO,V) do{ _SET_OUTPUT(IO); WRITE(IO,V); }while(0) #define OUT_WRITE(IO,V) do{ _SET_OUTPUT(IO); WRITE(IO,V); }while(0)
#define OUT_WRITE_OD(IO,V) do{ _SET_OUTPUT_OD(IO); WRITE(IO,V); }while(0) #define OUT_WRITE_OD(IO,V) do{ _SET_OUTPUT_OD(IO); WRITE(IO,V); }while(0)
#define SET_INPUT(IO) _SET_MODE(IO, INPUT) /*!< Input Floating Mode */ #define SET_INPUT(IO) _SET_MODE(IO, INPUT) //!< Input Floating Mode
#define SET_INPUT_PULLUP(IO) _SET_MODE(IO, INPUT_PULLUP) /*!< Input with Pull-up activation */ #define SET_INPUT_PULLUP(IO) _SET_MODE(IO, INPUT_PULLUP) //!< Input with Pull-up activation
#define SET_INPUT_PULLDOWN(IO) _SET_MODE(IO, INPUT_PULLDOWN) /*!< Input with Pull-down activation */ #define SET_INPUT_PULLDOWN(IO) _SET_MODE(IO, INPUT_PULLDOWN) //!< Input with Pull-down activation
#define SET_OUTPUT(IO) OUT_WRITE(IO, LOW) #define SET_OUTPUT(IO) OUT_WRITE(IO, LOW)
#define SET_PWM(IO) _SET_MODE(IO, PWM) #define SET_PWM(IO) _SET_MODE(IO, PWM)

2
Marlin/src/HAL/STM32/tft/tft_fsmc.h

@ -38,7 +38,7 @@
#define DATASIZE_8BIT SPI_DATASIZE_8BIT #define DATASIZE_8BIT SPI_DATASIZE_8BIT
#define DATASIZE_16BIT SPI_DATASIZE_16BIT #define DATASIZE_16BIT SPI_DATASIZE_16BIT
#define TFT_IO TFT_FSMC #define TFT_IO_DRIVER TFT_FSMC
#ifdef STM32F1xx #ifdef STM32F1xx
#define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CCR & DMA_CCR_EN) #define __IS_DMA_ENABLED(__HANDLE__) ((__HANDLE__)->Instance->CCR & DMA_CCR_EN)

2
Marlin/src/HAL/STM32/tft/tft_spi.h

@ -38,7 +38,7 @@
#define DATASIZE_8BIT SPI_DATASIZE_8BIT #define DATASIZE_8BIT SPI_DATASIZE_8BIT
#define DATASIZE_16BIT SPI_DATASIZE_16BIT #define DATASIZE_16BIT SPI_DATASIZE_16BIT
#define TFT_IO TFT_SPI #define TFT_IO_DRIVER TFT_SPI
class TFT_SPI { class TFT_SPI {
private: private:

6
Marlin/src/HAL/STM32/watchdog.cpp

@ -30,7 +30,11 @@
#include "watchdog.h" #include "watchdog.h"
#include <IWatchdog.h> #include <IWatchdog.h>
void watchdog_init() { IWatchdog.begin(4000000); } // 4 sec timeout void watchdog_init() {
#if DISABLED(DISABLE_WATCHDOG_INIT)
IWatchdog.begin(4000000); // 4 sec timeout
#endif
}
void HAL_watchdog_refresh() { void HAL_watchdog_refresh() {
IWatchdog.reload(); IWatchdog.reload();

9
Marlin/src/HAL/STM32F1/HAL.cpp

@ -97,6 +97,9 @@ const uint8_t adc_pins[] = {
#if HAS_TEMP_ADC_0 #if HAS_TEMP_ADC_0
TEMP_0_PIN, TEMP_0_PIN,
#endif #endif
#if HAS_TEMP_ADC_PROBE
TEMP_PROBE_PIN,
#endif
#if HAS_HEATED_BED #if HAS_HEATED_BED
TEMP_BED_PIN, TEMP_BED_PIN,
#endif #endif
@ -151,6 +154,9 @@ enum TempPinIndex : char {
#if HAS_TEMP_ADC_0 #if HAS_TEMP_ADC_0
TEMP_0, TEMP_0,
#endif #endif
#if HAS_TEMP_ADC_PROBE
TEMP_PROBE,
#endif
#if HAS_HEATED_BED #if HAS_HEATED_BED
TEMP_BED, TEMP_BED,
#endif #endif
@ -341,6 +347,9 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) {
#if HAS_TEMP_ADC_0 #if HAS_TEMP_ADC_0
case TEMP_0_PIN: pin_index = TEMP_0; break; case TEMP_0_PIN: pin_index = TEMP_0; break;
#endif #endif
#if HAS_TEMP_ADC_PROBE
case TEMP_PROBE_PIN: pin_index = TEMP_PROBE; break;
#endif
#if HAS_HEATED_BED #if HAS_HEATED_BED
case TEMP_BED_PIN: pin_index = TEMP_BED; break; case TEMP_BED_PIN: pin_index = TEMP_BED; break;
#endif #endif

2
Marlin/src/HAL/STM32F1/HAL.h

@ -185,6 +185,8 @@ void HAL_clear_reset_source();
// Reset reason // Reset reason
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
void _delay_ms(const int delay); void _delay_ms(const int delay);
#pragma GCC diagnostic push #pragma GCC diagnostic push

7
Marlin/src/HAL/STM32F1/HAL_SPI.cpp

@ -24,9 +24,6 @@
/** /**
* Software SPI functions originally from Arduino Sd2Card Library * Software SPI functions originally from Arduino Sd2Card Library
* Copyright (c) 2009 by William Greiman * Copyright (c) 2009 by William Greiman
*/
/**
* Adapted to the STM32F1 HAL * Adapted to the STM32F1 HAL
*/ */
@ -113,7 +110,7 @@ void spiInit(uint8_t spiRate) {
* @details * @details
*/ */
uint8_t spiRec() { uint8_t spiRec() {
uint8_t returnByte = SPI.transfer(ff); uint8_t returnByte = SPI.transfer(0xFF);
return returnByte; return returnByte;
} }
@ -157,7 +154,7 @@ void spiSendBlock(uint8_t token, const uint8_t* buf) {
#if ENABLED(SPI_EEPROM) #if ENABLED(SPI_EEPROM)
// Read single byte from specified SPI channel // Read single byte from specified SPI channel
uint8_t spiRec(uint32_t chan) { return SPI.transfer(ff); } uint8_t spiRec(uint32_t chan) { return SPI.transfer(0xFF); }
// Write single byte to specified SPI channel // Write single byte to specified SPI channel
void spiSend(uint32_t chan, byte b) { SPI.send(b); } void spiSend(uint32_t chan, byte b) { SPI.send(b); }

3
Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp

@ -22,7 +22,6 @@
#if BOTH(HAS_MARLINUI_U8GLIB, FORCE_SOFT_SPI) #if BOTH(HAS_MARLINUI_U8GLIB, FORCE_SOFT_SPI)
#include "../HAL.h"
#include <U8glib.h> #include <U8glib.h>
#undef SPI_SPEED #undef SPI_SPEED
@ -161,5 +160,5 @@ uint8_t u8g_com_HAL_STM32F1_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val,
return 1; return 1;
} }
#endif // HAS_MARLINUI_U8GLIB #endif // HAS_MARLINUI_U8GLIB && FORCE_SOFT_SPI
#endif // STM32F1 #endif // STM32F1

3
Marlin/src/HAL/STM32F1/eeprom_bl24cxx.cpp

@ -25,6 +25,8 @@
* with simple implementations supplied by Marlin. * with simple implementations supplied by Marlin.
*/ */
#ifdef __STM32F1__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(IIC_BL24CXX_EEPROM) #if ENABLED(IIC_BL24CXX_EEPROM)
@ -79,3 +81,4 @@ bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t
} }
#endif // IIC_BL24CXX_EEPROM #endif // IIC_BL24CXX_EEPROM
#endif // __STM32F1__

3
Marlin/src/HAL/STM32F1/eeprom_if_iic.cpp

@ -25,6 +25,8 @@
* Enable USE_SHARED_EEPROM if not supplied by the framework. * Enable USE_SHARED_EEPROM if not supplied by the framework.
*/ */
#ifdef __STM32F1__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(IIC_BL24CXX_EEPROM) #if ENABLED(IIC_BL24CXX_EEPROM)
@ -49,3 +51,4 @@ uint8_t eeprom_read_byte(uint8_t *pos) {
} }
#endif // IIC_BL24CXX_EEPROM #endif // IIC_BL24CXX_EEPROM
#endif // __STM32F1__

10
Marlin/src/HAL/STM32F1/eeprom_wired.cpp

@ -17,17 +17,17 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL PersistentStore for STM32F1
*/
#ifdef __STM32F1__ #ifdef __STM32F1__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if USE_WIRED_EEPROM #if USE_WIRED_EEPROM
/**
* PersistentStore for Arduino-style EEPROM interface
* with simple implementations supplied by Marlin.
*/
#include "../shared/eeprom_if.h" #include "../shared/eeprom_if.h"
#include "../shared/eeprom_api.h" #include "../shared/eeprom_api.h"

7
Marlin/src/HAL/STM32F1/inc/Conditionals_LCD.h

@ -25,10 +25,3 @@
//#warning "SD_CHECK_AND_RETRY isn't needed with USE_USB_COMPOSITE." //#warning "SD_CHECK_AND_RETRY isn't needed with USE_USB_COMPOSITE."
#undef SD_CHECK_AND_RETRY #undef SD_CHECK_AND_RETRY
#endif #endif
// This emulated DOGM has 'touch/xpt2046', not 'tft/xpt2046'
#if ENABLED(TOUCH_SCREEN) && !HAS_GRAPHICAL_TFT
#undef TOUCH_SCREEN
#undef TOUCH_SCREEN_CALIBRATION
#define HAS_TOUCH_XPT2046 1
#endif

4
Marlin/src/HAL/STM32F1/msc_sd.cpp

@ -13,7 +13,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
#ifdef USE_USB_COMPOSITE #if defined(__STM32F1__) && defined(USE_USB_COMPOSITE)
#include "msc_sd.h" #include "msc_sd.h"
#include "SPI.h" #include "SPI.h"
@ -77,4 +77,4 @@ void MSC_SD_init() {
#endif #endif
} }
#endif // USE_USB_COMPOSITE #endif // __STM32F1__ && USE_USB_COMPOSITE

4
Marlin/src/HAL/STM32F1/onboard_sd.cpp

@ -11,6 +11,8 @@
* Redistributions of source code must retain the above copyright notice. * Redistributions of source code must retain the above copyright notice.
*/ */
#ifdef __STM32F1__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#ifndef MKS_WIFI #ifndef MKS_WIFI
@ -556,3 +558,5 @@ DRESULT disk_read (
#endif // SD_CONNECTION_IS(ONBOARD) #endif // SD_CONNECTION_IS(ONBOARD)
#endif #endif
#endif

13
Marlin/src/HAL/STM32F1/tft/tft_fsmc.cpp

@ -89,25 +89,12 @@ void TFT_FSMC::Init() {
uint8_t cs = FSMC_CS_PIN, rs = FSMC_RS_PIN; uint8_t cs = FSMC_CS_PIN, rs = FSMC_RS_PIN;
uint32_t controllerAddress; uint32_t controllerAddress;
#if PIN_EXISTS(TFT_BACKLIGHT)
OUT_WRITE(TFT_BACKLIGHT_PIN, DISABLED(DELAYED_BACKLIGHT_INIT));
#endif
#if ENABLED(LCD_USE_DMA_FSMC) #if ENABLED(LCD_USE_DMA_FSMC)
dma_init(FSMC_DMA_DEV); dma_init(FSMC_DMA_DEV);
dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL); dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM); dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM);
#endif #endif
#if PIN_EXISTS(TFT_RESET)
OUT_WRITE(TFT_RESET_PIN, HIGH);
delay(100);
#endif
#if PIN_EXISTS(TFT_BACKLIGHT)
OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
#endif
struct fsmc_nor_psram_reg_map* fsmcPsramRegion; struct fsmc_nor_psram_reg_map* fsmcPsramRegion;
if (fsmcInit) return; if (fsmcInit) return;

2
Marlin/src/HAL/STM32F1/tft/tft_fsmc.h

@ -32,7 +32,7 @@
#define DATASIZE_8BIT DMA_SIZE_8BITS #define DATASIZE_8BIT DMA_SIZE_8BITS
#define DATASIZE_16BIT DMA_SIZE_16BITS #define DATASIZE_16BIT DMA_SIZE_16BITS
#define TFT_IO TFT_FSMC #define TFT_IO_DRIVER TFT_FSMC
typedef struct { typedef struct {
__IO uint16_t REG; __IO uint16_t REG;

2
Marlin/src/HAL/STM32F1/tft/tft_spi.h

@ -34,7 +34,7 @@
#define DATASIZE_8BIT DATA_SIZE_8BIT #define DATASIZE_8BIT DATA_SIZE_8BIT
#define DATASIZE_16BIT DATA_SIZE_16BIT #define DATASIZE_16BIT DATA_SIZE_16BIT
#define TFT_IO TFT_SPI #define TFT_IO_DRIVER TFT_SPI
#define DMA_MINC_ENABLE 1 #define DMA_MINC_ENABLE 1
#define DMA_MINC_DISABLE 0 #define DMA_MINC_DISABLE 0

4
Marlin/src/HAL/STM32F1/watchdog.cpp

@ -52,7 +52,9 @@ void watchdogSetup() {
* @details The watchdog clock is 40Khz. We need a 4 seconds interval, so use a /256 preescaler and 625 reload value (counts down to 0) * @details The watchdog clock is 40Khz. We need a 4 seconds interval, so use a /256 preescaler and 625 reload value (counts down to 0)
*/ */
void watchdog_init() { void watchdog_init() {
//iwdg_init(IWDG_PRE_256, STM32F1_WD_RELOAD); #if DISABLED(DISABLE_WATCHDOG_INIT)
iwdg_init(IWDG_PRE_256, STM32F1_WD_RELOAD);
#endif
} }
#endif // USE_WATCHDOG #endif // USE_WATCHDOG

2
Marlin/src/HAL/STM32_F4_F7/HAL.h

@ -142,6 +142,8 @@ void HAL_clear_reset_source();
// Reset reason // Reset reason
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
void _delay_ms(const int delay); void _delay_ms(const int delay);
/* /*

58
Marlin/src/HAL/STM32_F4_F7/STM32F7/TMC2660.cpp

@ -45,8 +45,8 @@
#define DEFAULT_MICROSTEPPING_VALUE 32 #define DEFAULT_MICROSTEPPING_VALUE 32
//TMC26X register definitions //TMC26X register definitions
#define DRIVER_CONTROL_REGISTER 0x0ul #define DRIVER_CONTROL_REGISTER 0x0UL
#define CHOPPER_CONFIG_REGISTER 0x80000ul #define CHOPPER_CONFIG_REGISTER 0x80000UL
#define COOL_STEP_REGISTER 0xA0000ul #define COOL_STEP_REGISTER 0xA0000ul
#define STALL_GUARD2_LOAD_MEASURE_REGISTER 0xC0000ul #define STALL_GUARD2_LOAD_MEASURE_REGISTER 0xC0000ul
#define DRIVER_CONFIG_REGISTER 0xE0000ul #define DRIVER_CONFIG_REGISTER 0xE0000ul
@ -55,58 +55,58 @@
//definitions for the driver control register //definitions for the driver control register
#define MICROSTEPPING_PATTERN 0xFul #define MICROSTEPPING_PATTERN 0xFul
#define STEP_INTERPOLATION 0x200ul #define STEP_INTERPOLATION 0x200UL
#define DOUBLE_EDGE_STEP 0x100ul #define DOUBLE_EDGE_STEP 0x100UL
#define VSENSE 0x40ul #define VSENSE 0x40UL
#define READ_MICROSTEP_POSTION 0x0ul #define READ_MICROSTEP_POSTION 0x0UL
#define READ_STALL_GUARD_READING 0x10ul #define READ_STALL_GUARD_READING 0x10UL
#define READ_STALL_GUARD_AND_COOL_STEP 0x20ul #define READ_STALL_GUARD_AND_COOL_STEP 0x20UL
#define READ_SELECTION_PATTERN 0x30ul #define READ_SELECTION_PATTERN 0x30UL
//definitions for the chopper config register //definitions for the chopper config register
#define CHOPPER_MODE_STANDARD 0x0ul #define CHOPPER_MODE_STANDARD 0x0UL
#define CHOPPER_MODE_T_OFF_FAST_DECAY 0x4000ul #define CHOPPER_MODE_T_OFF_FAST_DECAY 0x4000UL
#define T_OFF_PATTERN 0xFul #define T_OFF_PATTERN 0xFul
#define RANDOM_TOFF_TIME 0x2000ul #define RANDOM_TOFF_TIME 0x2000UL
#define BLANK_TIMING_PATTERN 0x18000ul #define BLANK_TIMING_PATTERN 0x18000UL
#define BLANK_TIMING_SHIFT 15 #define BLANK_TIMING_SHIFT 15
#define HYSTERESIS_DECREMENT_PATTERN 0x1800ul #define HYSTERESIS_DECREMENT_PATTERN 0x1800UL
#define HYSTERESIS_DECREMENT_SHIFT 11 #define HYSTERESIS_DECREMENT_SHIFT 11
#define HYSTERESIS_LOW_VALUE_PATTERN 0x780ul #define HYSTERESIS_LOW_VALUE_PATTERN 0x780UL
#define HYSTERESIS_LOW_SHIFT 7 #define HYSTERESIS_LOW_SHIFT 7
#define HYSTERESIS_START_VALUE_PATTERN 0x78ul #define HYSTERESIS_START_VALUE_PATTERN 0x78UL
#define HYSTERESIS_START_VALUE_SHIFT 4 #define HYSTERESIS_START_VALUE_SHIFT 4
#define T_OFF_TIMING_PATERN 0xFul #define T_OFF_TIMING_PATERN 0xFul
//definitions for cool step register //definitions for cool step register
#define MINIMUM_CURRENT_FOURTH 0x8000ul #define MINIMUM_CURRENT_FOURTH 0x8000UL
#define CURRENT_DOWN_STEP_SPEED_PATTERN 0x6000ul #define CURRENT_DOWN_STEP_SPEED_PATTERN 0x6000UL
#define SE_MAX_PATTERN 0xF00ul #define SE_MAX_PATTERN 0xF00ul
#define SE_CURRENT_STEP_WIDTH_PATTERN 0x60ul #define SE_CURRENT_STEP_WIDTH_PATTERN 0x60UL
#define SE_MIN_PATTERN 0xFul #define SE_MIN_PATTERN 0xFul
//definitions for StallGuard2 current register //definitions for StallGuard2 current register
#define STALL_GUARD_FILTER_ENABLED 0x10000ul #define STALL_GUARD_FILTER_ENABLED 0x10000UL
#define STALL_GUARD_TRESHHOLD_VALUE_PATTERN 0x17F00ul #define STALL_GUARD_TRESHHOLD_VALUE_PATTERN 0x17F00ul
#define CURRENT_SCALING_PATTERN 0x1Ful #define CURRENT_SCALING_PATTERN 0x1Ful
#define STALL_GUARD_CONFIG_PATTERN 0x17F00ul #define STALL_GUARD_CONFIG_PATTERN 0x17F00ul
#define STALL_GUARD_VALUE_PATTERN 0x7F00ul #define STALL_GUARD_VALUE_PATTERN 0x7F00ul
//definitions for the input from the TMC2660 //definitions for the input from the TMC2660
#define STATUS_STALL_GUARD_STATUS 0x1ul #define STATUS_STALL_GUARD_STATUS 0x1UL
#define STATUS_OVER_TEMPERATURE_SHUTDOWN 0x2ul #define STATUS_OVER_TEMPERATURE_SHUTDOWN 0x2UL
#define STATUS_OVER_TEMPERATURE_WARNING 0x4ul #define STATUS_OVER_TEMPERATURE_WARNING 0x4UL
#define STATUS_SHORT_TO_GROUND_A 0x8ul #define STATUS_SHORT_TO_GROUND_A 0x8UL
#define STATUS_SHORT_TO_GROUND_B 0x10ul #define STATUS_SHORT_TO_GROUND_B 0x10UL
#define STATUS_OPEN_LOAD_A 0x20ul #define STATUS_OPEN_LOAD_A 0x20UL
#define STATUS_OPEN_LOAD_B 0x40ul #define STATUS_OPEN_LOAD_B 0x40UL
#define STATUS_STAND_STILL 0x80ul #define STATUS_STAND_STILL 0x80UL
#define READOUT_VALUE_PATTERN 0xFFC00ul #define READOUT_VALUE_PATTERN 0xFFC00ul
#define CPU_32_BIT #define CPU_32_BIT
//default values //default values
#define INITIAL_MICROSTEPPING 0x3ul //32th microstepping #define INITIAL_MICROSTEPPING 0x3UL //32th microstepping
SPIClass SPI_6(SPI6, SPI6_MOSI_PIN, SPI6_MISO_PIN, SPI6_SCK_PIN); SPIClass SPI_6(SPI6, SPI6_MOSI_PIN, SPI6_MISO_PIN, SPI6_SCK_PIN);

3
Marlin/src/HAL/TEENSY31_32/HAL.cpp

@ -20,9 +20,8 @@
* *
*/ */
/** /**
* Description: HAL for Teensy32 (MK20DX256) * HAL for Teensy 3.2 (MK20DX256)
*/ */
#ifdef __MK20DX256__ #ifdef __MK20DX256__

11
Marlin/src/HAL/TEENSY31_32/HAL.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for Teensy 3.5 and Teensy 3.6 * HAL for Teensy 3.2 (MK20DX256)
*/ */
#define CPU_32_BIT #define CPU_32_BIT
@ -44,8 +44,9 @@
//#undef MOTHERBOARD //#undef MOTHERBOARD
//#define MOTHERBOARD BOARD_TEENSY31_32 //#define MOTHERBOARD BOARD_TEENSY31_32
#ifdef __MK20DX256__ #define IS_32BIT_TEENSY 1
#define IS_32BIT_TEENSY 1 #define IS_TEENSY_31_32 1
#ifndef IS_TEENSY31
#define IS_TEENSY32 1 #define IS_TEENSY32 1
#endif #endif
@ -64,7 +65,7 @@
typedef int8_t pin_t; typedef int8_t pin_t;
#ifndef analogInputToDigitalPin #ifndef analogInputToDigitalPin
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1) #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
#endif #endif
#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() #define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq()
@ -92,6 +93,8 @@ void HAL_clear_reset_source();
// Get the reason for the reset // Get the reason for the reset
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); }
#pragma GCC diagnostic push #pragma GCC diagnostic push

1
Marlin/src/HAL/TEENSY31_32/Servo.cpp

@ -51,5 +51,4 @@ void libServo::move(const int value) {
} }
#endif // HAS_SERVOS #endif // HAS_SERVOS
#endif // __MK20DX256__ #endif // __MK20DX256__

3
Marlin/src/HAL/TEENSY31_32/eeprom.cpp

@ -23,8 +23,7 @@
#if USE_WIRED_EEPROM #if USE_WIRED_EEPROM
/** /**
* PersistentStore for Arduino-style EEPROM interface * HAL PersistentStore for Teensy 3.2 (MK20DX256)
* with implementations supplied by the framework.
*/ */
#include "../shared/eeprom_api.h" #include "../shared/eeprom_api.h"

2
Marlin/src/HAL/TEENSY31_32/timers.cpp

@ -21,7 +21,7 @@
*/ */
/** /**
* Teensy3.2 __MK20DX256__ * HAL Timers for Teensy 3.2 (MK20DX256)
*/ */
#ifdef __MK20DX256__ #ifdef __MK20DX256__

3
Marlin/src/HAL/TEENSY31_32/timers.h

@ -22,8 +22,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for * HAL Timers for Teensy 3.2 (MK20DX256)
* Teensy3.2 (__MK20DX256__)
*/ */
#include <stdint.h> #include <stdint.h>

2
Marlin/src/HAL/TEENSY35_36/HAL.cpp

@ -21,7 +21,7 @@
*/ */
/** /**
* Description: HAL for Teensy35 (MK64FX512) * HAL for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/ */
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK64FX512__) || defined(__MK66FX1M0__)

15
Marlin/src/HAL/TEENSY35_36/HAL.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for Teensy 3.5 and Teensy 3.6 * HAL for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/ */
#define CPU_32_BIT #define CPU_32_BIT
@ -45,13 +45,12 @@
// Defines // Defines
// ------------------------ // ------------------------
#ifdef __MK64FX512__ #define IS_32BIT_TEENSY 1
#define IS_32BIT_TEENSY 1 #define IS_TEENSY_35_36 1
#define IS_TEENSY35 1
#endif
#ifdef __MK66FX1M0__ #ifdef __MK66FX1M0__
#define IS_32BIT_TEENSY 1
#define IS_TEENSY36 1 #define IS_TEENSY36 1
#else // __MK64FX512__
#define IS_TEENSY35 1
#endif #endif
#define _MSERIAL(X) Serial##X #define _MSERIAL(X) Serial##X
@ -69,7 +68,7 @@
typedef int8_t pin_t; typedef int8_t pin_t;
#ifndef analogInputToDigitalPin #ifndef analogInputToDigitalPin
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1) #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
#endif #endif
#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() #define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq()
@ -100,6 +99,8 @@ void HAL_clear_reset_source();
// Reset reason // Reset reason
uint8_t HAL_get_reset_source(); uint8_t HAL_get_reset_source();
inline void HAL_reboot() {} // reboot the board or restart the bootloader
FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); }
#pragma GCC diagnostic push #pragma GCC diagnostic push

5
Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp

@ -19,6 +19,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL SPI for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
#include "HAL.h" #include "HAL.h"

6
Marlin/src/HAL/TEENSY35_36/Servo.cpp

@ -19,6 +19,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL Servo for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
@ -51,5 +56,4 @@ void libServo::move(const int value) {
} }
#endif // HAS_SERVOS #endif // HAS_SERVOS
#endif // __MK64FX512__ || __MK66FX1M0__ #endif // __MK64FX512__ || __MK66FX1M0__

4
Marlin/src/HAL/TEENSY35_36/Servo.h

@ -21,6 +21,10 @@
*/ */
#pragma once #pragma once
/**
* HAL Servo for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#include <Servo.h> #include <Servo.h>
// Inherit and expand on core Servo library // Inherit and expand on core Servo library

9
Marlin/src/HAL/TEENSY35_36/eeprom.cpp

@ -22,15 +22,14 @@
*/ */
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
/**
* HAL PersistentStore for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if USE_WIRED_EEPROM #if USE_WIRED_EEPROM
/**
* PersistentStore for Arduino-style EEPROM interface
* with implementations supplied by the framework.
*/
#include "../shared/eeprom_api.h" #include "../shared/eeprom_api.h"
#include <avr/eeprom.h> #include <avr/eeprom.h>

2
Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Endstop Interrupts * HAL Endstop Interrupts for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
* *
* Without endstop interrupts the endstop pins must be polled continually in * Without endstop interrupts the endstop pins must be polled continually in
* the temperature-ISR via endstops.update(), most of the time finding no change. * the temperature-ISR via endstops.update(), most of the time finding no change.

4
Marlin/src/HAL/TEENSY35_36/pinsDebug.h

@ -18,6 +18,10 @@
*/ */
#pragma once #pragma once
/**
* HAL Pins Debugging for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS #define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin #define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin

4
Marlin/src/HAL/TEENSY35_36/spi_pins.h

@ -21,6 +21,10 @@
*/ */
#pragma once #pragma once
/**
* HAL SPI Pins for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
*/
#define SCK_PIN 13 #define SCK_PIN 13
#define MISO_PIN 12 #define MISO_PIN 12
#define MOSI_PIN 11 #define MOSI_PIN 11

3
Marlin/src/HAL/TEENSY35_36/timers.cpp

@ -21,8 +21,7 @@
*/ */
/** /**
* Teensy3.5 __MK64FX512__ * HAL Timers for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
* Teensy3.6 __MK66FX1M0__
*/ */
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) #if defined(__MK64FX512__) || defined(__MK66FX1M0__)

4
Marlin/src/HAL/TEENSY35_36/timers.h

@ -21,9 +21,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for * HAL Timers for Teensy 3.5 (MK64FX512) and Teensy 3.6 (MK66FX1M0)
* Teensy3.5 (__MK64FX512__)
* Teensy3.6 (__MK66FX1M0__)
*/ */
#include <stdint.h> #include <stdint.h>

2
Marlin/src/HAL/TEENSY40_41/HAL.cpp

@ -21,7 +21,7 @@
*/ */
/** /**
* Description: HAL for Teensy40 (IMXRT1062) * HAL for Teensy 4.0 / 4.1 (IMXRT1062)
*/ */
#ifdef __IMXRT1062__ #ifdef __IMXRT1062__

9
Marlin/src/HAL/TEENSY40_41/HAL.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for Teensy 4.0 and Teensy 4.1 * HAL for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/ */
#define CPU_32_BIT #define CPU_32_BIT
@ -45,8 +45,9 @@
// Defines // Defines
// ------------------------ // ------------------------
#ifdef __IMXRT1062__ #define IS_32BIT_TEENSY 1
#define IS_32BIT_TEENSY 1 #define IS_TEENSY_40_41 1
#ifndef IS_TEENSY40
#define IS_TEENSY41 1 #define IS_TEENSY41 1
#endif #endif
@ -77,7 +78,7 @@
typedef int8_t pin_t; typedef int8_t pin_t;
#ifndef analogInputToDigitalPin #ifndef analogInputToDigitalPin
#define analogInputToDigitalPin(p) ((p < 12u) ? (p) + 54u : -1) #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
#endif #endif
#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() #define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq()

5
Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp

@ -19,6 +19,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL SPI for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#ifdef __IMXRT1062__ #ifdef __IMXRT1062__
#include "HAL.h" #include "HAL.h"

6
Marlin/src/HAL/TEENSY40_41/Servo.cpp

@ -19,6 +19,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL Servo for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#ifdef __IMXRT1062__ #ifdef __IMXRT1062__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
@ -53,5 +58,4 @@ void libServo::detach() {
} }
#endif // HAS_SERVOS #endif // HAS_SERVOS
#endif // __IMXRT1062__ #endif // __IMXRT1062__

4
Marlin/src/HAL/TEENSY40_41/Servo.h

@ -21,6 +21,10 @@
*/ */
#pragma once #pragma once
/**
* HAL Servo for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#include <PWMServo.h> #include <PWMServo.h>
// Inherit and expand on core Servo library // Inherit and expand on core Servo library

3
Marlin/src/HAL/TEENSY40_41/eeprom.cpp

@ -27,8 +27,7 @@
#if USE_WIRED_EEPROM #if USE_WIRED_EEPROM
/** /**
* PersistentStore for Arduino-style EEPROM interface * HAL PersistentStore for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
* with implementations supplied by the framework.
*/ */
#include "../shared/eeprom_api.h" #include "../shared/eeprom_api.h"

2
Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Endstop Interrupts * HAL Endstop Interrupts for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
* *
* Without endstop interrupts the endstop pins must be polled continually in * Without endstop interrupts the endstop pins must be polled continually in
* the temperature-ISR via endstops.update(), most of the time finding no change. * the temperature-ISR via endstops.update(), most of the time finding no change.

2
Marlin/src/HAL/TEENSY40_41/fastio.h

@ -23,7 +23,7 @@
#pragma once #pragma once
/** /**
* Fast I/O interfaces for Teensy 4 * Fast I/O interfaces for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
* These use GPIO functions instead of Direct Port Manipulation, as on AVR. * These use GPIO functions instead of Direct Port Manipulation, as on AVR.
*/ */

4
Marlin/src/HAL/TEENSY40_41/pinsDebug.h

@ -18,6 +18,10 @@
*/ */
#pragma once #pragma once
/**
* HAL Pins Debugging for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#warning "PINS_DEBUGGING is not fully supported for Teensy 4.0 / 4.1 so 'M43' may cause hangs." #warning "PINS_DEBUGGING is not fully supported for Teensy 4.0 / 4.1 so 'M43' may cause hangs."
#define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS #define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS

4
Marlin/src/HAL/TEENSY40_41/spi_pins.h

@ -21,6 +21,10 @@
*/ */
#pragma once #pragma once
/**
* HAL SPI Pins for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#define SCK_PIN 13 #define SCK_PIN 13
#define MISO_PIN 12 #define MISO_PIN 12
#define MOSI_PIN 11 #define MOSI_PIN 11

2
Marlin/src/HAL/TEENSY40_41/timers.cpp

@ -21,7 +21,7 @@
*/ */
/** /**
* Teensy4.0/4.1 (__IMXRT1062__) * HAL Timers for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/ */
#ifdef __IMXRT1062__ #ifdef __IMXRT1062__

3
Marlin/src/HAL/TEENSY40_41/timers.h

@ -21,8 +21,7 @@
#pragma once #pragma once
/** /**
* Description: HAL for * HAL Timers for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
* Teensy4.0/4.1 (__IMXRT1062__)
*/ */
#include <stdint.h> #include <stdint.h>

6
Marlin/src/HAL/TEENSY40_41/watchdog.cpp

@ -19,6 +19,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
/**
* HAL Watchdog for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/
#ifdef __IMXRT1062__ #ifdef __IMXRT1062__
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
@ -48,5 +53,4 @@ void HAL_watchdog_refresh() {
} }
#endif // USE_WATCHDOG #endif // USE_WATCHDOG
#endif // __IMXRT1062__ #endif // __IMXRT1062__

2
Marlin/src/HAL/TEENSY40_41/watchdog.h

@ -22,7 +22,7 @@
#pragma once #pragma once
/** /**
* Watchdog for Teensy4.0/4.1 (__IMXRT1062__) * HAL Watchdog for Teensy 4.0 (IMXRT1062DVL6A) / 4.1 (IMXRT1062DVJ6A)
*/ */
void watchdog_init(); void watchdog_init();

17
Marlin/src/MarlinCore.cpp

@ -97,7 +97,7 @@
#include "feature/closedloop.h" #include "feature/closedloop.h"
#endif #endif
#if HAS_I2C_DIGIPOT #if HAS_MOTOR_CURRENT_I2C
#include "feature/digipot/digipot.h" #include "feature/digipot/digipot.h"
#endif #endif
@ -125,7 +125,7 @@
#include "module/servo.h" #include "module/servo.h"
#endif #endif
#if ENABLED(DAC_STEPPER_CURRENT) #if ENABLED(HAS_MOTOR_CURRENT_DAC)
#include "feature/dac/stepper_dac.h" #include "feature/dac/stepper_dac.h"
#endif #endif
@ -1048,6 +1048,11 @@ void setup() {
SERIAL_ECHO_MSG("Compiled: " __DATE__); SERIAL_ECHO_MSG("Compiled: " __DATE__);
SERIAL_ECHO_MSG(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE)); SERIAL_ECHO_MSG(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE));
// Init buzzer pin(s)
#if USE_BEEPER
SETUP_RUN(buzzer.init());
#endif
// Set up LEDs early // Set up LEDs early
#if HAS_COLOR_LEDS #if HAS_COLOR_LEDS
SETUP_RUN(leds.setup()); SETUP_RUN(leds.setup());
@ -1132,12 +1137,12 @@ void setup() {
SETUP_RUN(enableStepperDrivers()); SETUP_RUN(enableStepperDrivers());
#endif #endif
#if HAS_I2C_DIGIPOT #if HAS_MOTOR_CURRENT_I2C
SETUP_RUN(digipot_i2c_init()); SETUP_RUN(digipot_i2c.init());
#endif #endif
#if ENABLED(DAC_STEPPER_CURRENT) #if ENABLED(HAS_MOTOR_CURRENT_DAC)
SETUP_RUN(dac_init()); SETUP_RUN(stepper_dac.init());
#endif #endif
#if EITHER(Z_PROBE_SLED, SOLENOID_PROBE) && HAS_SOLENOID_1 #if EITHER(Z_PROBE_SLED, SOLENOID_PROBE) && HAS_SOLENOID_1

1
Marlin/src/core/boards.h

@ -320,6 +320,7 @@
#define BOARD_CREALITY_V4 4034 // Creality v4.x (STM32F103RE) #define BOARD_CREALITY_V4 4034 // Creality v4.x (STM32F103RE)
#define BOARD_CREALITY_V427 4035 // Creality v4.2.7 (STM32F103RE) #define BOARD_CREALITY_V427 4035 // Creality v4.2.7 (STM32F103RE)
#define BOARD_TRIGORILLA_PRO 4036 // Trigorilla Pro (STM32F103ZET6) #define BOARD_TRIGORILLA_PRO 4036 // Trigorilla Pro (STM32F103ZET6)
#define BOARD_FLY_MINI 4037 // FLY MINI (STM32F103RCT6)
// //
// ARM Cortex-M4F // ARM Cortex-M4F

2
Marlin/src/core/language.h

@ -303,7 +303,7 @@
#define LCD_STR_C STR_C #define LCD_STR_C STR_C
#define LCD_STR_E STR_E #define LCD_STR_E STR_E
#if HAS_MARLINUI_HD44780 #if EITHER(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL)
// Custom characters defined in the first 8 characters of the LCD // Custom characters defined in the first 8 characters of the LCD
#define LCD_STR_BEDTEMP "\x00" // Print only as a char. This will have 'unexpected' results when used in a string! #define LCD_STR_BEDTEMP "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!

7
Marlin/src/core/macros.h

@ -215,6 +215,7 @@
#define WITHIN(N,L,H) ((N) >= (L) && (N) <= (H)) #define WITHIN(N,L,H) ((N) >= (L) && (N) <= (H))
#define NUMERIC(a) WITHIN(a, '0', '9') #define NUMERIC(a) WITHIN(a, '0', '9')
#define DECIMAL(a) (NUMERIC(a) || a == '.') #define DECIMAL(a) (NUMERIC(a) || a == '.')
#define HEXCHR(a) (NUMERIC(a) ? (a) - '0' : WITHIN(a, 'a', 'f') ? ((a) - 'a' + 10) : WITHIN(a, 'A', 'F') ? ((a) - 'A' + 10) : -1)
#define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+') #define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+')
#define DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+') #define DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+')
#define COUNT(a) (sizeof(a)/sizeof(*a)) #define COUNT(a) (sizeof(a)/sizeof(*a))
@ -451,6 +452,12 @@
#define HAS_ARGS(V...) _BOOL(FIRST(_END_OF_ARGUMENTS_ V)()) #define HAS_ARGS(V...) _BOOL(FIRST(_END_OF_ARGUMENTS_ V)())
#define _END_OF_ARGUMENTS_() 0 #define _END_OF_ARGUMENTS_() 0
// Simple Inline IF Macros, friendly to use in other macro definitions
#define IF(O, A, B) ((O) ? (A) : (B))
#define IF_0(O, A) IF(O, A, 0)
#define IF_1(O, A) IF(O, A, 1)
// //
// REPEAT core macros. Recurse N times with ascending I. // REPEAT core macros. Recurse N times with ascending I.
// //

2
Marlin/src/core/utility.h

@ -71,7 +71,7 @@ public:
inline void restore() { ref_ = val_; } inline void restore() { ref_ = val_; }
}; };
#define REMEMBER(N,X,V...) restorer<typeof(X)> restorer_##N(X, ##V) #define REMEMBER(N,X,V...) restorer<__typeof__(X)> restorer_##N(X, ##V)
#define RESTORE(N) restorer_##N.restore() #define RESTORE(N) restorer_##N.restore()
// Converts from an uint8_t in the range of 0-255 to an uint8_t // Converts from an uint8_t in the range of 0-255 to an uint8_t

4
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp

@ -1009,6 +1009,8 @@
lcd_mesh_edit_setup(new_z); lcd_mesh_edit_setup(new_z);
SET_SOFT_ENDSTOP_LOOSE(true);
do { do {
idle(); idle();
new_z = lcd_mesh_edit(); new_z = lcd_mesh_edit();
@ -1016,6 +1018,8 @@
SERIAL_FLUSH(); // Prevent host M105 buffer overrun. SERIAL_FLUSH(); // Prevent host M105 buffer overrun.
} while (!ui.button_pressed()); } while (!ui.button_pressed());
SET_SOFT_ENDSTOP_LOOSE(false);
if (!lcd_map_control) ui.return_to_status(); // Just editing a single point? Return to status if (!lcd_map_control) ui.return_to_status(); // Just editing a single point? Return to status
if (click_and_hold(abort_fine_tune)) break; // Button held down? Abort editing if (click_and_hold(abort_fine_tune)) break; // Button held down? Abort editing

50
Marlin/src/feature/dac/dac_mcp4728.cpp

@ -32,16 +32,18 @@
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(DAC_STEPPER_CURRENT) #if ENABLED(HAS_MOTOR_CURRENT_DAC)
#include "dac_mcp4728.h" #include "dac_mcp4728.h"
xyze_uint_t mcp4728_values; MCP4728 mcp4728;
xyze_uint_t dac_values;
/** /**
* Begin I2C, get current values (input register and eeprom) of mcp4728 * Begin I2C, get current values (input register and eeprom) of mcp4728
*/ */
void mcp4728_init() { void MCP4728::init() {
Wire.begin(); Wire.begin();
Wire.requestFrom(I2C_ADDRESS(DAC_DEV_ADDRESS), uint8_t(24)); Wire.requestFrom(I2C_ADDRESS(DAC_DEV_ADDRESS), uint8_t(24));
while (Wire.available()) { while (Wire.available()) {
@ -50,7 +52,7 @@ void mcp4728_init() {
loByte = Wire.read(); loByte = Wire.read();
if (!(deviceID & 0x08)) if (!(deviceID & 0x08))
mcp4728_values[(deviceID & 0x30) >> 4] = word((hiByte & 0x0F), loByte); dac_values[(deviceID & 0x30) >> 4] = word((hiByte & 0x0F), loByte);
} }
} }
@ -58,9 +60,9 @@ void mcp4728_init() {
* Write input resister value to specified channel using fastwrite method. * Write input resister value to specified channel using fastwrite method.
* Channel : 0-3, Values : 0-4095 * Channel : 0-3, Values : 0-4095
*/ */
uint8_t mcp4728_analogWrite(const uint8_t channel, const uint16_t value) { uint8_t MCP4728::analogWrite(const uint8_t channel, const uint16_t value) {
mcp4728_values[channel] = value; dac_values[channel] = value;
return mcp4728_fastWrite(); return fastWrite();
} }
/** /**
@ -68,12 +70,12 @@ uint8_t mcp4728_analogWrite(const uint8_t channel, const uint16_t value) {
* This will update both input register and EEPROM value * This will update both input register and EEPROM value
* This will also write current Vref, PowerDown, Gain settings to EEPROM * This will also write current Vref, PowerDown, Gain settings to EEPROM
*/ */
uint8_t mcp4728_eepromWrite() { uint8_t MCP4728::eepromWrite() {
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS)); Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
Wire.write(SEQWRITE); Wire.write(SEQWRITE);
LOOP_XYZE(i) { LOOP_XYZE(i) {
Wire.write(DAC_STEPPER_VREF << 7 | DAC_STEPPER_GAIN << 4 | highByte(mcp4728_values[i])); Wire.write(DAC_STEPPER_VREF << 7 | DAC_STEPPER_GAIN << 4 | highByte(dac_values[i]));
Wire.write(lowByte(mcp4728_values[i])); Wire.write(lowByte(dac_values[i]));
} }
return Wire.endTransmission(); return Wire.endTransmission();
} }
@ -81,7 +83,7 @@ uint8_t mcp4728_eepromWrite() {
/** /**
* Write Voltage reference setting to all input regiters * Write Voltage reference setting to all input regiters
*/ */
uint8_t mcp4728_setVref_all(const uint8_t value) { uint8_t MCP4728::setVref_all(const uint8_t value) {
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS)); Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
Wire.write(VREFWRITE | (value ? 0x0F : 0x00)); Wire.write(VREFWRITE | (value ? 0x0F : 0x00));
return Wire.endTransmission(); return Wire.endTransmission();
@ -89,7 +91,7 @@ uint8_t mcp4728_setVref_all(const uint8_t value) {
/** /**
* Write Gain setting to all input regiters * Write Gain setting to all input regiters
*/ */
uint8_t mcp4728_setGain_all(const uint8_t value) { uint8_t MCP4728::setGain_all(const uint8_t value) {
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS)); Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
Wire.write(GAINWRITE | (value ? 0x0F : 0x00)); Wire.write(GAINWRITE | (value ? 0x0F : 0x00));
return Wire.endTransmission(); return Wire.endTransmission();
@ -98,16 +100,16 @@ uint8_t mcp4728_setGain_all(const uint8_t value) {
/** /**
* Return Input Register value * Return Input Register value
*/ */
uint16_t mcp4728_getValue(const uint8_t channel) { return mcp4728_values[channel]; } uint16_t MCP4728::getValue(const uint8_t channel) { return dac_values[channel]; }
#if 0 #if 0
/** /**
* Steph: Might be useful in the future * Steph: Might be useful in the future
* Return Vout * Return Vout
*/ */
uint16_t mcp4728_getVout(const uint8_t channel) { uint16_t MCP4728::getVout(const uint8_t channel) {
const uint32_t vref = 2048, const uint32_t vref = 2048,
vOut = (vref * mcp4728_values[channel] * (_DAC_STEPPER_GAIN + 1)) / 4096; vOut = (vref * dac_values[channel] * (_DAC_STEPPER_GAIN + 1)) / 4096;
return _MIN(vOut, defaultVDD); return _MIN(vOut, defaultVDD);
} }
#endif #endif
@ -115,15 +117,15 @@ uint16_t mcp4728_getVout(const uint8_t channel) {
/** /**
* Returns DAC values as a 0-100 percentage of drive strength * Returns DAC values as a 0-100 percentage of drive strength
*/ */
uint8_t mcp4728_getDrvPct(const uint8_t channel) { return uint8_t(100.0 * mcp4728_values[channel] / (DAC_STEPPER_MAX) + 0.5); } uint8_t MCP4728::getDrvPct(const uint8_t channel) { return uint8_t(100.0 * dac_values[channel] / (DAC_STEPPER_MAX) + 0.5); }
/** /**
* Receives all Drive strengths as 0-100 percent values, updates * Receives all Drive strengths as 0-100 percent values, updates
* DAC Values array and calls fastwrite to update the DAC. * DAC Values array and calls fastwrite to update the DAC.
*/ */
void mcp4728_setDrvPct(xyze_uint8_t &pct) { void MCP4728::setDrvPct(xyze_uint8_t &pct) {
mcp4728_values *= 0.01 * pct * (DAC_STEPPER_MAX); dac_values *= 0.01 * pct * (DAC_STEPPER_MAX);
mcp4728_fastWrite(); fastWrite();
} }
/** /**
@ -131,11 +133,11 @@ void mcp4728_setDrvPct(xyze_uint8_t &pct) {
* DAC Input and PowerDown bits update. * DAC Input and PowerDown bits update.
* No EEPROM update * No EEPROM update
*/ */
uint8_t mcp4728_fastWrite() { uint8_t MCP4728::fastWrite() {
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS)); Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
LOOP_XYZE(i) { LOOP_XYZE(i) {
Wire.write(highByte(mcp4728_values[i])); Wire.write(highByte(dac_values[i]));
Wire.write(lowByte(mcp4728_values[i])); Wire.write(lowByte(dac_values[i]));
} }
return Wire.endTransmission(); return Wire.endTransmission();
} }
@ -143,10 +145,10 @@ uint8_t mcp4728_fastWrite() {
/** /**
* Common function for simple general commands * Common function for simple general commands
*/ */
uint8_t mcp4728_simpleCommand(const byte simpleCommand) { uint8_t MCP4728::simpleCommand(const byte simpleCommand) {
Wire.beginTransmission(I2C_ADDRESS(GENERALCALL)); Wire.beginTransmission(I2C_ADDRESS(GENERALCALL));
Wire.write(simpleCommand); Wire.write(simpleCommand);
return Wire.endTransmission(); return Wire.endTransmission();
} }
#endif // DAC_STEPPER_CURRENT #endif // HAS_MOTOR_CURRENT_DAC

27
Marlin/src/feature/dac/dac_mcp4728.h

@ -40,7 +40,7 @@
#endif #endif
#ifndef lowByte #ifndef lowByte
#define lowByte(w) ((uint8_t) ((w) & 0xff)) #define lowByte(w) ((uint8_t) ((w) & 0xFF))
#endif #endif
#ifndef highByte #ifndef highByte
@ -65,13 +65,18 @@
// DAC_OR_ADDRESS defined in pins_BOARD.h file // DAC_OR_ADDRESS defined in pins_BOARD.h file
#define DAC_DEV_ADDRESS (BASE_ADDR | DAC_OR_ADDRESS) #define DAC_DEV_ADDRESS (BASE_ADDR | DAC_OR_ADDRESS)
void mcp4728_init(); class MCP4728 {
uint8_t mcp4728_analogWrite(const uint8_t channel, const uint16_t value); public:
uint8_t mcp4728_eepromWrite(); static void init();
uint8_t mcp4728_setVref_all(const uint8_t value); static uint8_t analogWrite(const uint8_t channel, const uint16_t value);
uint8_t mcp4728_setGain_all(const uint8_t value); static uint8_t eepromWrite();
uint16_t mcp4728_getValue(const uint8_t channel); static uint8_t setVref_all(const uint8_t value);
uint8_t mcp4728_fastWrite(); static uint8_t setGain_all(const uint8_t value);
uint8_t mcp4728_simpleCommand(const byte simpleCommand); static uint16_t getValue(const uint8_t channel);
uint8_t mcp4728_getDrvPct(const uint8_t channel); static uint8_t fastWrite();
void mcp4728_setDrvPct(xyze_uint8_t &pct); static uint8_t simpleCommand(const byte simpleCommand);
static uint8_t getDrvPct(const uint8_t channel);
static void setDrvPct(xyze_uint8_t &pct);
};
extern MCP4728 mcp4728;

55
Marlin/src/feature/dac/stepper_dac.cpp

@ -26,7 +26,7 @@
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#if ENABLED(DAC_STEPPER_CURRENT) #if ENABLED(HAS_MOTOR_CURRENT_DAC)
#include "stepper_dac.h" #include "stepper_dac.h"
#include "../../MarlinCore.h" // for SP_X_LBL... #include "../../MarlinCore.h" // for SP_X_LBL...
@ -35,56 +35,53 @@ bool dac_present = false;
constexpr xyze_uint8_t dac_order = DAC_STEPPER_ORDER; constexpr xyze_uint8_t dac_order = DAC_STEPPER_ORDER;
xyze_uint8_t dac_channel_pct = DAC_MOTOR_CURRENT_DEFAULT; xyze_uint8_t dac_channel_pct = DAC_MOTOR_CURRENT_DEFAULT;
int dac_init() { StepperDAC stepper_dac;
int StepperDAC::init() {
#if PIN_EXISTS(DAC_DISABLE) #if PIN_EXISTS(DAC_DISABLE)
OUT_WRITE(DAC_DISABLE_PIN, LOW); // set pin low to enable DAC OUT_WRITE(DAC_DISABLE_PIN, LOW); // set pin low to enable DAC
#endif #endif
mcp4728_init(); mcp4728.init();
if (mcp4728_simpleCommand(RESET)) return -1; if (mcp4728.simpleCommand(RESET)) return -1;
dac_present = true; dac_present = true;
mcp4728_setVref_all(DAC_STEPPER_VREF); mcp4728.setVref_all(DAC_STEPPER_VREF);
mcp4728_setGain_all(DAC_STEPPER_GAIN); mcp4728.setGain_all(DAC_STEPPER_GAIN);
if (mcp4728_getDrvPct(0) < 1 || mcp4728_getDrvPct(1) < 1 || mcp4728_getDrvPct(2) < 1 || mcp4728_getDrvPct(3) < 1 ) { if (mcp4728.getDrvPct(0) < 1 || mcp4728.getDrvPct(1) < 1 || mcp4728.getDrvPct(2) < 1 || mcp4728.getDrvPct(3) < 1 ) {
mcp4728_setDrvPct(dac_channel_pct); mcp4728.setDrvPct(dac_channel_pct);
mcp4728_eepromWrite(); mcp4728.eepromWrite();
} }
return 0; return 0;
} }
void dac_current_percent(uint8_t channel, float val) { void StepperDAC::set_current_value(const uint8_t channel, uint16_t val) {
if (!dac_present) return; if (!dac_present) return;
NOMORE(val, 100); NOMORE(val, uint16_t(DAC_STEPPER_MAX));
mcp4728_analogWrite(dac_order[channel], val * 0.01 * (DAC_STEPPER_MAX)); mcp4728.analogWrite(dac_order[channel], val);
mcp4728_simpleCommand(UPDATE); mcp4728.simpleCommand(UPDATE);
} }
void dac_current_raw(uint8_t channel, uint16_t val) { void StepperDAC::set_current_percent(const uint8_t channel, float val) {
if (!dac_present) return; set_current_value(channel, _MIN(val, 100.0f) * (DAC_STEPPER_MAX) / 100.0f);
NOMORE(val, uint16_t(DAC_STEPPER_MAX));
mcp4728_analogWrite(dac_order[channel], val);
mcp4728_simpleCommand(UPDATE);
} }
static float dac_perc(int8_t n) { return 100.0 * mcp4728_getValue(dac_order[n]) * RECIPROCAL(DAC_STEPPER_MAX); } static float dac_perc(int8_t n) { return 100.0 * mcp4728.getValue(dac_order[n]) * RECIPROCAL(DAC_STEPPER_MAX); }
static float dac_amps(int8_t n) { return mcp4728_getDrvPct(dac_order[n]) * (DAC_STEPPER_MAX) * 0.125 * RECIPROCAL(DAC_STEPPER_SENSE); } static float dac_amps(int8_t n) { return mcp4728.getDrvPct(dac_order[n]) * (DAC_STEPPER_MAX) * 0.125 * RECIPROCAL(DAC_STEPPER_SENSE); }
uint8_t dac_current_get_percent(const AxisEnum axis) { return mcp4728_getDrvPct(dac_order[axis]); } uint8_t StepperDAC::get_current_percent(const AxisEnum axis) { return mcp4728.getDrvPct(dac_order[axis]); }
void dac_current_set_percents(xyze_uint8_t &pct) { void StepperDAC::set_current_percents(xyze_uint8_t &pct) {
LOOP_XYZE(i) dac_channel_pct[i] = pct[dac_order[i]]; LOOP_XYZE(i) dac_channel_pct[i] = pct[dac_order[i]];
mcp4728_setDrvPct(dac_channel_pct); mcp4728.setDrvPct(dac_channel_pct);
} }
void dac_print_values() { void StepperDAC::print_values() {
if (!dac_present) return; if (!dac_present) return;
SERIAL_ECHO_MSG("Stepper current values in % (Amps):"); SERIAL_ECHO_MSG("Stepper current values in % (Amps):");
SERIAL_ECHO_START(); SERIAL_ECHO_START();
@ -94,9 +91,9 @@ void dac_print_values() {
SERIAL_ECHOLNPAIR_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")")); SERIAL_ECHOLNPAIR_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
} }
void dac_commit_eeprom() { void StepperDAC::commit_eeprom() {
if (!dac_present) return; if (!dac_present) return;
mcp4728_eepromWrite(); mcp4728.eepromWrite();
} }
#endif // DAC_STEPPER_CURRENT #endif // HAS_MOTOR_CURRENT_DAC

19
Marlin/src/feature/dac/stepper_dac.h

@ -27,10 +27,15 @@
#include "dac_mcp4728.h" #include "dac_mcp4728.h"
int dac_init(); class StepperDAC {
void dac_current_percent(uint8_t channel, float val); public:
void dac_current_raw(uint8_t channel, uint16_t val); static int init();
void dac_print_values(); static void set_current_percent(const uint8_t channel, float val);
void dac_commit_eeprom(); static void set_current_value(const uint8_t channel, uint16_t val);
uint8_t dac_current_get_percent(AxisEnum axis); static void print_values();
void dac_current_set_percents(xyze_uint8_t &pct); static void commit_eeprom();
static uint8_t get_current_percent(AxisEnum axis);
static void set_current_percents(xyze_uint8_t &pct);
};
extern StepperDAC stepper_dac;

12
Marlin/src/feature/digipot/digipot.h

@ -21,5 +21,13 @@
*/ */
#pragma once #pragma once
void digipot_i2c_set_current(const uint8_t channel, const float current); //
void digipot_i2c_init(); // Header for MCP4018 and MCP4451 current control i2c devices
//
class DigipotI2C {
public:
static void init();
static void set_current(const uint8_t channel, const float current);
};
DigipotI2C digipot_i2c;

12
Marlin/src/feature/digipot/digipot_mcp4018.cpp

@ -24,6 +24,8 @@
#if ENABLED(DIGIPOT_MCP4018) #if ENABLED(DIGIPOT_MCP4018)
#include "digipot.h"
#include <Stream.h> #include <Stream.h>
#include <SlowSoftI2CMaster.h> // https://github.com/stawel/SlowSoftI2CMaster #include <SlowSoftI2CMaster.h> // https://github.com/stawel/SlowSoftI2CMaster
@ -68,7 +70,7 @@ static SlowSoftI2CMaster pots[DIGIPOT_I2C_NUM_CHANNELS] = {
#endif #endif
}; };
static void i2c_send(const uint8_t channel, const byte v) { static void digipot_i2c_send(const uint8_t channel, const byte v) {
if (WITHIN(channel, 0, DIGIPOT_I2C_NUM_CHANNELS - 1)) { if (WITHIN(channel, 0, DIGIPOT_I2C_NUM_CHANNELS - 1)) {
pots[channel].i2c_start(((DIGIPOT_I2C_ADDRESS_A) << 1) | I2C_WRITE); pots[channel].i2c_start(((DIGIPOT_I2C_ADDRESS_A) << 1) | I2C_WRITE);
pots[channel].i2c_write(v); pots[channel].i2c_write(v);
@ -77,12 +79,12 @@ static void i2c_send(const uint8_t channel, const byte v) {
} }
// This is for the MCP4018 I2C based digipot // This is for the MCP4018 I2C based digipot
void digipot_i2c_set_current(const uint8_t channel, const float current) { void DigipotI2C::set_current(const uint8_t channel, const float current) {
const float ival = _MIN(_MAX(current, 0), float(DIGIPOT_MCP4018_MAX_VALUE)); const float ival = _MIN(_MAX(current, 0), float(DIGIPOT_MCP4018_MAX_VALUE));
i2c_send(channel, current_to_wiper(ival)); digipot_i2c_send(channel, current_to_wiper(ival));
} }
void digipot_i2c_init() { void DigipotI2C::init() {
LOOP_L_N(i, DIGIPOT_I2C_NUM_CHANNELS) pots[i].i2c_init(); LOOP_L_N(i, DIGIPOT_I2C_NUM_CHANNELS) pots[i].i2c_init();
// Init currents according to Configuration_adv.h // Init currents according to Configuration_adv.h
@ -94,7 +96,7 @@ void digipot_i2c_init() {
#endif #endif
; ;
LOOP_L_N(i, COUNT(digipot_motor_current)) LOOP_L_N(i, COUNT(digipot_motor_current))
digipot_i2c_set_current(i, pgm_read_float(&digipot_motor_current[i])); set_current(i, pgm_read_float(&digipot_motor_current[i]));
} }
#endif // DIGIPOT_MCP4018 #endif // DIGIPOT_MCP4018

8
Marlin/src/feature/digipot/digipot_mcp4451.cpp

@ -24,6 +24,8 @@
#if ENABLED(DIGIPOT_MCP4451) #if ENABLED(DIGIPOT_MCP4451)
#include "digipot.h"
#include <Stream.h> #include <Stream.h>
#include <Wire.h> #include <Wire.h>
@ -61,7 +63,7 @@ static void digipot_i2c_send(const byte addr, const byte a, const byte b) {
} }
// This is for the MCP4451 I2C based digipot // This is for the MCP4451 I2C based digipot
void digipot_i2c_set_current(const uint8_t channel, const float current) { void DigipotI2C::set_current(const uint8_t channel, const float current) {
// These addresses are specific to Azteeg X3 Pro, can be set to others. // These addresses are specific to Azteeg X3 Pro, can be set to others.
// In this case first digipot is at address A0=0, A1=0, second one is at A0=0, A1=1 // In this case first digipot is at address A0=0, A1=0, second one is at A0=0, A1=1
const byte addr = channel < 4 ? DIGIPOT_I2C_ADDRESS_A : DIGIPOT_I2C_ADDRESS_B; // channel 0-3 vs 4-7 const byte addr = channel < 4 ? DIGIPOT_I2C_ADDRESS_A : DIGIPOT_I2C_ADDRESS_B; // channel 0-3 vs 4-7
@ -75,7 +77,7 @@ void digipot_i2c_set_current(const uint8_t channel, const float current) {
digipot_i2c_send(addr, addresses[channel & 0x3], current_to_wiper(_MIN(float(_MAX(current, 0)), DIGIPOT_I2C_MAX_CURRENT))); digipot_i2c_send(addr, addresses[channel & 0x3], current_to_wiper(_MIN(float(_MAX(current, 0)), DIGIPOT_I2C_MAX_CURRENT)));
} }
void digipot_i2c_init() { void DigipotI2C::init() {
#if MB(MKS_SBASE) #if MB(MKS_SBASE)
configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400kHz configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400kHz
#else #else
@ -90,7 +92,7 @@ void digipot_i2c_init() {
#endif #endif
; ;
LOOP_L_N(i, COUNT(digipot_motor_current)) LOOP_L_N(i, COUNT(digipot_motor_current))
digipot_i2c_set_current(i, pgm_read_float(&digipot_motor_current[i])); set_current(i, pgm_read_float(&digipot_motor_current[i]));
} }
#endif // DIGIPOT_MCP4451 #endif // DIGIPOT_MCP4451

11
Marlin/src/feature/e_parser.h

@ -88,10 +88,8 @@ public:
case EP_N: case EP_N:
switch (c) { switch (c) {
case '0': case '1': case '2': case '0' ... '9':
case '3': case '4': case '5': case '-': case ' ': break;
case '6': case '7': case '8':
case '9': case '-': case ' ': break;
case 'M': state = EP_M; break; case 'M': state = EP_M; break;
default: state = EP_IGNORE; default: state = EP_IGNORE;
} }
@ -153,10 +151,7 @@ public:
case EP_M876S: case EP_M876S:
switch (c) { switch (c) {
case ' ': break; case ' ': break;
case '0': case '1': case '2': case '0' ... '9':
case '3': case '4': case '5':
case '6': case '7': case '8':
case '9':
state = EP_M876SN; state = EP_M876SN;
M876_reason = (uint8_t)(c - '0'); M876_reason = (uint8_t)(c - '0');
break; break;

8
Marlin/src/feature/mmu2/mmu2.cpp

@ -340,17 +340,17 @@ void MMU2::mmu_loop() {
#endif #endif
if (rx_ok()) { if (rx_ok()) {
// response to C0 mmu command in PRUSA_MMU2_S_MODE // Response to C0 mmu command in PRUSA_MMU2_S_MODE
bool can_reset = true; bool can_reset = true;
if (ENABLED(PRUSA_MMU2_S_MODE) && last_cmd == MMU_CMD_C0) { #if ENABLED(PRUSA_MMU2_S_MODE)
if (!mmu2s_triggered) { if (!mmu2s_triggered && last_cmd == MMU_CMD_C0) {
can_reset = false; can_reset = false;
// MMU ok received but filament sensor not triggered, retrying... // MMU ok received but filament sensor not triggered, retrying...
DEBUG_ECHOLNPGM("MMU => 'ok' (filament not present in gears)"); DEBUG_ECHOLNPGM("MMU => 'ok' (filament not present in gears)");
DEBUG_ECHOLNPGM("MMU <= 'C0' (keep trying)"); DEBUG_ECHOLNPGM("MMU <= 'C0' (keep trying)");
MMU2_COMMAND("C0"); MMU2_COMMAND("C0");
} }
} #endif
if (can_reset) { if (can_reset) {
DEBUG_ECHOLNPGM("MMU => 'ok'"); DEBUG_ECHOLNPGM("MMU => 'ok'");
ready = true; ready = true;

9
Marlin/src/feature/pause.cpp

@ -61,6 +61,10 @@
#include "../libs/buzzer.h" #include "../libs/buzzer.h"
#endif #endif
#if ENABLED(POWER_LOSS_RECOVERY)
#include "powerloss.h"
#endif
#include "../libs/nozzle.h" #include "../libs/nozzle.h"
#include "pause.h" #include "pause.h"
@ -612,11 +616,13 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
// Retract to prevent oozing // Retract to prevent oozing
unscaled_e_move(-(PAUSE_PARK_RETRACT_LENGTH), feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); unscaled_e_move(-(PAUSE_PARK_RETRACT_LENGTH), feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE));
if (!axes_should_home()) {
// Move XY to starting position, then Z // Move XY to starting position, then Z
do_blocking_move_to_xy(resume_position, feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); do_blocking_move_to_xy(resume_position, feedRate_t(NOZZLE_PARK_XY_FEEDRATE));
// Move Z_AXIS to saved position // Move Z_AXIS to saved position
do_blocking_move_to_z(resume_position.z, feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); do_blocking_move_to_z(resume_position.z, feedRate_t(NOZZLE_PARK_Z_FEEDRATE));
}
// Unretract // Unretract
unscaled_e_move(PAUSE_PARK_RETRACT_LENGTH, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); unscaled_e_move(PAUSE_PARK_RETRACT_LENGTH, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE));
@ -638,6 +644,9 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
// Set extruder to saved position // Set extruder to saved position
planner.set_e_position_mm((destination.e = current_position.e = resume_position.e)); planner.set_e_position_mm((destination.e = current_position.e = resume_position.e));
// Write PLR now to update the z axis value
TERN_(POWER_LOSS_RECOVERY, if (recovery.enabled) recovery.save(true));
TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_STATUS)); TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_STATUS));
#ifdef ACTION_ON_RESUMED #ifdef ACTION_ON_RESUMED

2
Marlin/src/feature/tmc_util.h

@ -38,7 +38,7 @@
#define CHOPPER_09STEP_24V { 3, -1, 5 } #define CHOPPER_09STEP_24V { 3, -1, 5 }
#if ENABLED(MONITOR_DRIVER_STATUS) && !defined(MONITOR_DRIVER_STATUS_INTERVAL_MS) #if ENABLED(MONITOR_DRIVER_STATUS) && !defined(MONITOR_DRIVER_STATUS_INTERVAL_MS)
#define MONITOR_DRIVER_STATUS_INTERVAL_MS 500u #define MONITOR_DRIVER_STATUS_INTERVAL_MS 500U
#endif #endif
constexpr uint16_t _tmc_thrs(const uint16_t msteps, const uint32_t thrs, const uint32_t spmm) { constexpr uint16_t _tmc_thrs(const uint16_t msteps, const uint32_t thrs, const uint32_t spmm) {

4
Marlin/src/gcode/bedlevel/G26.cpp

@ -511,11 +511,9 @@ void GcodeSuite::G26() {
g26_keep_heaters_on = parser.boolval('K'); g26_keep_heaters_on = parser.boolval('K');
// Accept 'I' if temperature presets are defined // Accept 'I' if temperature presets are defined
const uint8_t preset_index = (0
#if PREHEAT_COUNT #if PREHEAT_COUNT
+ (parser.seenval('I') ? _MIN(parser.value_byte(), PREHEAT_COUNT - 1) + 1 : 0) const uint8_t preset_index = parser.seenval('I') ? _MIN(parser.value_byte(), PREHEAT_COUNT - 1) + 1 : 0;
#endif #endif
);
#if HAS_HEATED_BED #if HAS_HEATED_BED

3
Marlin/src/gcode/bedlevel/G35.cpp

@ -157,9 +157,10 @@ void GcodeSuite::G35() {
const int minutes = trunc(decimal_part * 60.0f); const int minutes = trunc(decimal_part * 60.0f);
SERIAL_ECHOPAIR("Turn ", tramming_point_name[i], SERIAL_ECHOPAIR("Turn ", tramming_point_name[i],
" ", (screw_thread & 1) == (adjust > 0) ? "Counter-Clockwise" : "Clockwise", " ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW",
" by ", abs(full_turns), " turns"); " by ", abs(full_turns), " turns");
if (minutes) SERIAL_ECHOPAIR(" and ", abs(minutes), " minutes"); if (minutes) SERIAL_ECHOPAIR(" and ", abs(minutes), " minutes");
if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPAIR(" (", -diff, "mm)");
SERIAL_EOL(); SERIAL_EOL();
} }
} }

16
Marlin/src/gcode/bedlevel/abl/G29.cpp

@ -201,10 +201,6 @@ G29_TYPE GcodeSuite::G29() {
ABL_VAR int abl_probe_index; ABL_VAR int abl_probe_index;
#endif #endif
#if BOTH(HAS_SOFTWARE_ENDSTOPS, PROBE_MANUALLY)
ABL_VAR bool saved_soft_endstops_state = true;
#endif
#if ABL_GRID #if ABL_GRID
#if ENABLED(PROBE_MANUALLY) #if ENABLED(PROBE_MANUALLY)
@ -461,7 +457,7 @@ G29_TYPE GcodeSuite::G29() {
// Abort current G29 procedure, go back to idle state // Abort current G29 procedure, go back to idle state
if (seenA && g29_in_progress) { if (seenA && g29_in_progress) {
SERIAL_ECHOLNPGM("Manual G29 aborted"); SERIAL_ECHOLNPGM("Manual G29 aborted");
TERN_(HAS_SOFTWARE_ENDSTOPS, soft_endstops_enabled = saved_soft_endstops_state); SET_SOFT_ENDSTOP_LOOSE(false);
set_bed_leveling_enabled(abl_should_enable); set_bed_leveling_enabled(abl_should_enable);
g29_in_progress = false; g29_in_progress = false;
TERN_(LCD_BED_LEVELING, ui.wait_for_move = false); TERN_(LCD_BED_LEVELING, ui.wait_for_move = false);
@ -482,7 +478,7 @@ G29_TYPE GcodeSuite::G29() {
if (abl_probe_index == 0) { if (abl_probe_index == 0) {
// For the initial G29 S2 save software endstop state // For the initial G29 S2 save software endstop state
TERN_(HAS_SOFTWARE_ENDSTOPS, saved_soft_endstops_state = soft_endstops_enabled); SET_SOFT_ENDSTOP_LOOSE(true);
// Move close to the bed before the first point // Move close to the bed before the first point
do_blocking_move_to_z(0); do_blocking_move_to_z(0);
} }
@ -552,14 +548,14 @@ G29_TYPE GcodeSuite::G29() {
_manual_goto_xy(probePos); // Can be used here too! _manual_goto_xy(probePos); // Can be used here too!
// Disable software endstops to allow manual adjustment // Disable software endstops to allow manual adjustment
// If G29 is not completed, they will not be re-enabled // If G29 is not completed, they will not be re-enabled
TERN_(HAS_SOFTWARE_ENDSTOPS, soft_endstops_enabled = false); SET_SOFT_ENDSTOP_LOOSE(true);
G29_RETURN(false); G29_RETURN(false);
} }
else { else {
// Leveling done! Fall through to G29 finishing code below // Leveling done! Fall through to G29 finishing code below
SERIAL_ECHOLNPGM("Grid probing done."); SERIAL_ECHOLNPGM("Grid probing done.");
// Re-enable software endstops, if needed // Re-enable software endstops, if needed
TERN_(HAS_SOFTWARE_ENDSTOPS, soft_endstops_enabled = saved_soft_endstops_state); SET_SOFT_ENDSTOP_LOOSE(false);
} }
#elif ENABLED(AUTO_BED_LEVELING_3POINT) #elif ENABLED(AUTO_BED_LEVELING_3POINT)
@ -570,7 +566,7 @@ G29_TYPE GcodeSuite::G29() {
_manual_goto_xy(probePos); _manual_goto_xy(probePos);
// Disable software endstops to allow manual adjustment // Disable software endstops to allow manual adjustment
// If G29 is not completed, they will not be re-enabled // If G29 is not completed, they will not be re-enabled
TERN_(HAS_SOFTWARE_ENDSTOPS, soft_endstops_enabled = false); SET_SOFT_ENDSTOP_LOOSE(true);
G29_RETURN(false); G29_RETURN(false);
} }
else { else {
@ -578,7 +574,7 @@ G29_TYPE GcodeSuite::G29() {
SERIAL_ECHOLNPGM("3-point probing done."); SERIAL_ECHOLNPGM("3-point probing done.");
// Re-enable software endstops, if needed // Re-enable software endstops, if needed
TERN_(HAS_SOFTWARE_ENDSTOPS, soft_endstops_enabled = saved_soft_endstops_state); SET_SOFT_ENDSTOP_LOOSE(false);
if (!dryrun) { if (!dryrun) {
vector_3 planeNormal = vector_3::cross(points[0] - points[1], points[2] - points[1]).get_normal(); vector_3 planeNormal = vector_3::cross(points[0] - points[1], points[2] - points[1]).get_normal();

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save