Skip to content

Commit

Permalink
Suspend Servos for STM32+NeoPixel (#19963)
Browse files Browse the repository at this point in the history
  • Loading branch information
sjasonsmith authored Dec 5, 2020
1 parent 21ee7b1 commit 2c8f566
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 14 deletions.
3 changes: 3 additions & 0 deletions Marlin/src/HAL/STM32/HAL.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "../shared/math_32bit.h"
#include "../shared/HAL_SPI.h"
#include "fastio.h"
#include "Servo.h"
#include "watchdog.h"
#include "MarlinSerial.h"

Expand Down Expand Up @@ -110,6 +111,8 @@
typedef int16_t pin_t;

#define HAL_SERVO_LIB libServo
#define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos()
#define RESUME_SERVO_OUTPUT() libServo::resume_all_servos()

// ------------------------
// Public Variables
Expand Down
17 changes: 4 additions & 13 deletions Marlin/src/HAL/STM32/eeprom_flash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,6 @@

#include "../shared/eeprom_api.h"

#if HAS_SERVOS
#include "Servo.h"
#define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos()
#define RESUME_SERVO_OUTPUT() libServo::resume_all_servos()
#else
#define PAUSE_SERVO_OUTPUT()
#define RESUME_SERVO_OUTPUT()
#endif

/**
* The STM32 HAL supports chips that deal with "pages" and some with "sectors" and some that
* even have multiple "banks" of flash.
Expand Down Expand Up @@ -172,11 +163,11 @@ bool PersistentStore::access_finish() {
current_slot = EEPROM_SLOTS - 1;
UNLOCK_FLASH();

PAUSE_SERVO_OUTPUT();
TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT());
DISABLE_ISRS();
status = HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError);
ENABLE_ISRS();
RESUME_SERVO_OUTPUT();
TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
if (status != HAL_OK) {
DEBUG_ECHOLNPAIR("HAL_FLASHEx_Erase=", status);
DEBUG_ECHOLNPAIR("GetError=", HAL_FLASH_GetError());
Expand Down Expand Up @@ -227,11 +218,11 @@ bool PersistentStore::access_finish() {
// Interrupts during this time can have unpredictable results, such as killing Servo
// output. Servo output still glitches with interrupts disabled, but recovers after the
// erase.
PAUSE_SERVO_OUTPUT();
TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT());
DISABLE_ISRS();
eeprom_buffer_flush();
ENABLE_ISRS();
RESUME_SERVO_OUTPUT();
TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());

eeprom_data_written = false;
#endif
Expand Down
3 changes: 3 additions & 0 deletions Marlin/src/feature/leds/neopixel.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ class Marlin_NeoPixel {
}

static inline void show() {
// Some platforms cannot maintain PWM output when NeoPixel disables interrupts for long durations.
TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT());
adaneo1.show();
#if PIN_EXISTS(NEOPIXEL2)
#if CONJOINED_NEOPIXEL
Expand All @@ -115,6 +117,7 @@ class Marlin_NeoPixel {
adaneo1.setPin(NEOPIXEL_PIN);
#endif
#endif
TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
}

#if 0
Expand Down
3 changes: 3 additions & 0 deletions Marlin/src/inc/Conditionals_post.h
Original file line number Diff line number Diff line change
Expand Up @@ -1997,6 +1997,9 @@
#if NUM_SERVOS > 0
#define HAS_SERVOS 1
#endif
#if HAS_SERVOS && defined(PAUSE_SERVO_OUTPUT) && defined(RESUME_SERVO_OUTPUT)
#define HAS_PAUSE_SERVO_OUTPUT 1
#endif

// Sensors
#if PIN_EXISTS(FILWIDTH)
Expand Down
3 changes: 2 additions & 1 deletion buildroot/tests/BIGTREE_GTR_V1_0-tests
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ opt_set E1_AUTO_FAN_PIN PC11
opt_set E2_AUTO_FAN_PIN PC12
opt_set X_DRIVER_TYPE TMC2208
opt_set Y_DRIVER_TYPE TMC2130
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
opt_set NEOPIXEL_PIN PF13
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER BLTOUCH NEOPIXEL_LED Z_SAFE_HOMING
opt_enable FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE
opt_set FIL_RUNOUT_PIN 3
opt_set FIL_RUNOUT2_PIN 4
Expand Down

0 comments on commit 2c8f566

Please sign in to comment.