mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2025-01-31 14:12:52 +00:00
🔥 Always use ISR for BABYSTEPPING (#26035)
This commit is contained in:
parent
885e9cc057
commit
45193b4a1d
8 changed files with 18 additions and 34 deletions
|
@ -2206,7 +2206,6 @@
|
|||
*/
|
||||
//#define BABYSTEPPING
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
//#define INTEGRATED_BABYSTEPPING // Integration of babystepping into the Stepper ISR
|
||||
//#define EP_BABYSTEPPING // M293/M294 babystepping with EMERGENCY_PARSER support
|
||||
//#define BABYSTEP_WITHOUT_HOMING
|
||||
//#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement)
|
||||
|
|
|
@ -52,10 +52,6 @@
|
|||
#error "FAST_PWM_FAN is not available on TinyBee."
|
||||
#endif
|
||||
|
||||
#if ALL(I2S_STEPPER_STREAM, BABYSTEPPING) && DISABLED(INTEGRATED_BABYSTEPPING)
|
||||
#error "BABYSTEPPING on I2S stream requires INTEGRATED_BABYSTEPPING."
|
||||
#endif
|
||||
|
||||
#if USING_PULLDOWNS
|
||||
#error "PULLDOWN pin mode is not available on ESP32 boards."
|
||||
#endif
|
||||
|
|
|
@ -66,7 +66,7 @@ void Babystep::add_mm(const AxisEnum axis, const_float_t mm) {
|
|||
steps[BS_AXIS_IND(axis)] = distance;
|
||||
TERN_(BABYSTEP_DISPLAY_TOTAL, axis_total[BS_TOTAL_IND(axis)] = distance);
|
||||
TERN_(BABYSTEP_ALWAYS_AVAILABLE, gcode.reset_stepper_timeout());
|
||||
TERN_(INTEGRATED_BABYSTEPPING, if (has_steps()) stepper.initiateBabystepping());
|
||||
TERN_(BABYSTEPPING, if (has_steps()) stepper.initiateBabystepping());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -77,7 +77,7 @@ void Babystep::add_steps(const AxisEnum axis, const int16_t distance) {
|
|||
steps[BS_AXIS_IND(axis)] += distance;
|
||||
TERN_(BABYSTEP_DISPLAY_TOTAL, axis_total[BS_TOTAL_IND(axis)] += distance);
|
||||
TERN_(BABYSTEP_ALWAYS_AVAILABLE, gcode.reset_stepper_timeout());
|
||||
TERN_(INTEGRATED_BABYSTEPPING, if (has_steps()) stepper.initiateBabystepping());
|
||||
TERN_(BABYSTEPPING, if (has_steps()) stepper.initiateBabystepping());
|
||||
}
|
||||
|
||||
#if ENABLED(EP_BABYSTEPPING)
|
||||
|
|
|
@ -23,13 +23,8 @@
|
|||
|
||||
#include "../inc/MarlinConfigPre.h"
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#define BABYSTEPS_PER_SEC 1000UL
|
||||
#define BABYSTEP_TICKS ((STEPPER_TIMER_RATE) / (BABYSTEPS_PER_SEC))
|
||||
#else
|
||||
#define BABYSTEPS_PER_SEC 976UL
|
||||
#define BABYSTEP_TICKS ((TEMP_TIMER_RATE) / (BABYSTEPS_PER_SEC))
|
||||
#endif
|
||||
#define BABYSTEPS_PER_SEC 1000UL
|
||||
#define BABYSTEP_TICKS ((STEPPER_TIMER_RATE) / (BABYSTEPS_PER_SEC))
|
||||
|
||||
#if ANY(IS_CORE, BABYSTEP_XY, I2C_POSITION_ENCODERS)
|
||||
#define BS_AXIS_IND(A) A
|
||||
|
|
|
@ -659,6 +659,8 @@
|
|||
#error "Z3_USE_ENDSTOP is obsolete. Instead set Z2_STOP_PIN directly. (e.g., 'Z3_USE_ENDSTOP _ZMAX_' becomes 'Z3_STOP_PIN Z_MAX_PIN')"
|
||||
#elif defined(Z4_USE_ENDSTOP)
|
||||
#error "Z4_USE_ENDSTOP is obsolete. Instead set Z4_STOP_PIN directly. (e.g., 'Z4_USE_ENDSTOP _ZMAX_' becomes 'Z4_STOP_PIN Z_MAX_PIN')"
|
||||
#elif defined(INTEGRATED_BABYSTEPPING)
|
||||
#error "INTEGRATED_BABYSTEPPING is no longer needed and should be removed."
|
||||
#endif
|
||||
|
||||
// L64xx stepper drivers have been removed
|
||||
|
|
|
@ -106,7 +106,7 @@ Stepper stepper; // Singleton
|
|||
#include "../feature/bedlevel/bdl/bdl.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
#include "../feature/babystep.h"
|
||||
#endif
|
||||
|
||||
|
@ -273,7 +273,7 @@ uint32_t Stepper::advance_divisor = 0,
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
hal_timer_t Stepper::nextBabystepISR = BABYSTEP_NEVER;
|
||||
#endif
|
||||
|
||||
|
@ -1543,7 +1543,7 @@ void Stepper::isr() {
|
|||
// Define 2.5 msec task for auxilliary functions.
|
||||
if (!fxdTiCtrl_nextAuxISR) {
|
||||
endstops.update();
|
||||
TERN_(INTEGRATED_BABYSTEPPING, if (babystep.has_steps()) babystepping_isr());
|
||||
TERN_(BABYSTEPPING, if (babystep.has_steps()) babystepping_isr());
|
||||
fxdTiCtrl_refreshAxisDidMove();
|
||||
fxdTiCtrl_nextAuxISR = 0.0025f * (STEPPER_TIMER_RATE);
|
||||
}
|
||||
|
@ -1574,7 +1574,7 @@ void Stepper::isr() {
|
|||
nextAdvanceISR = la_interval;
|
||||
#endif
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
const bool is_babystep = (nextBabystepISR == 0); // 0 = Do Babystepping (XY)Z pulses
|
||||
if (is_babystep) nextBabystepISR = babystepping_isr();
|
||||
#endif
|
||||
|
@ -1583,7 +1583,7 @@ void Stepper::isr() {
|
|||
|
||||
if (!nextMainISR) nextMainISR = block_phase_isr(); // Manage acc/deceleration, get next block
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
if (is_babystep) // Avoid ANY stepping too soon after baby-stepping
|
||||
NOLESS(nextMainISR, (BABYSTEP_TICKS) / 8); // FULL STOP for 125µs after a baby-step
|
||||
|
||||
|
@ -1596,7 +1596,7 @@ void Stepper::isr() {
|
|||
TERN_(INPUT_SHAPING_X, NOMORE(interval, ShapingQueue::peek_x())); // Time until next input shaping echo for X
|
||||
TERN_(INPUT_SHAPING_Y, NOMORE(interval, ShapingQueue::peek_y())); // Time until next input shaping echo for Y
|
||||
TERN_(LIN_ADVANCE, NOMORE(interval, nextAdvanceISR)); // Come back early for Linear Advance?
|
||||
TERN_(INTEGRATED_BABYSTEPPING, NOMORE(interval, nextBabystepISR)); // Come back early for Babystepping?
|
||||
TERN_(BABYSTEPPING, NOMORE(interval, nextBabystepISR)); // Come back early for Babystepping?
|
||||
|
||||
//
|
||||
// Compute remaining time for each ISR phase
|
||||
|
@ -1608,7 +1608,7 @@ void Stepper::isr() {
|
|||
nextMainISR -= interval;
|
||||
TERN_(HAS_ZV_SHAPING, ShapingQueue::decrement_delays(interval));
|
||||
TERN_(LIN_ADVANCE, if (nextAdvanceISR != LA_ADV_NEVER) nextAdvanceISR -= interval);
|
||||
TERN_(INTEGRATED_BABYSTEPPING, if (nextBabystepISR != BABYSTEP_NEVER) nextBabystepISR -= interval);
|
||||
TERN_(BABYSTEPPING, if (nextBabystepISR != BABYSTEP_NEVER) nextBabystepISR -= interval);
|
||||
|
||||
} // standard motion control
|
||||
|
||||
|
@ -2807,7 +2807,7 @@ hal_timer_t Stepper::block_phase_isr() {
|
|||
|
||||
#endif // LIN_ADVANCE
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
|
||||
// Timer interrupt for baby-stepping
|
||||
hal_timer_t Stepper::babystepping_isr() {
|
||||
|
@ -3669,7 +3669,7 @@ void Stepper::report_positions() {
|
|||
// No other ISR should ever interrupt this!
|
||||
void Stepper::do_babystep(const AxisEnum axis, const bool direction) {
|
||||
|
||||
IF_DISABLED(INTEGRATED_BABYSTEPPING, cli());
|
||||
IF_DISABLED(BABYSTEPPING, cli());
|
||||
|
||||
switch (axis) {
|
||||
|
||||
|
@ -3750,7 +3750,7 @@ void Stepper::report_positions() {
|
|||
default: break;
|
||||
}
|
||||
|
||||
IF_DISABLED(INTEGRATED_BABYSTEPPING, sei());
|
||||
IF_DISABLED(BABYSTEPPING, sei());
|
||||
}
|
||||
|
||||
#endif // BABYSTEPPING
|
||||
|
|
|
@ -416,7 +416,7 @@ class Stepper {
|
|||
static bool la_active; // Whether linear advance is used on the present segment.
|
||||
#endif
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
static constexpr hal_timer_t BABYSTEP_NEVER = HAL_TIMER_TYPE_MAX;
|
||||
static hal_timer_t nextBabystepISR;
|
||||
#endif
|
||||
|
@ -475,7 +475,7 @@ class Stepper {
|
|||
static void advance_isr();
|
||||
#endif
|
||||
|
||||
#if ENABLED(INTEGRATED_BABYSTEPPING)
|
||||
#if ENABLED(BABYSTEPPING)
|
||||
// The Babystepping ISR phase
|
||||
static hal_timer_t babystepping_isr();
|
||||
FORCE_INLINE static void initiateBabystepping() {
|
||||
|
|
|
@ -160,10 +160,6 @@
|
|||
#include "stepper.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(BABYSTEPPING) && DISABLED(INTEGRATED_BABYSTEPPING)
|
||||
#include "../feature/babystep.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_WIDTH_SENSOR)
|
||||
#include "../feature/filwidth.h"
|
||||
#endif
|
||||
|
@ -4122,10 +4118,6 @@ void Temperature::isr() {
|
|||
// Additional ~1kHz Tasks
|
||||
//
|
||||
|
||||
#if ENABLED(BABYSTEPPING) && DISABLED(INTEGRATED_BABYSTEPPING)
|
||||
babystep.task();
|
||||
#endif
|
||||
|
||||
// Check fan tachometers
|
||||
TERN_(HAS_FANCHECK, fan_check.update_tachometers());
|
||||
|
||||
|
|
Loading…
Reference in a new issue