Direct Stepping update (#19135)

This commit is contained in:
Colin Godsey
2020-08-26 00:32:56 -06:00
committed by GitHub
parent b07dd44ec2
commit 131ddeaeba
3 changed files with 34 additions and 51 deletions

View File

@ -1578,12 +1578,11 @@ void Stepper::pulse_phase_isr() {
#if STEPPER_PAGE_FORMAT == SP_4x4D_128
#define PAGE_SEGMENT_UPDATE(AXIS, VALUE, MID) do{ \
if ((VALUE) == MID) {} \
else if ((VALUE) < MID) SBI(dm, _AXIS(AXIS)); \
else CBI(dm, _AXIS(AXIS)); \
page_step_state.sd[_AXIS(AXIS)] = VALUE; \
page_step_state.bd[_AXIS(AXIS)] += VALUE; \
#define PAGE_SEGMENT_UPDATE(AXIS, VALUE) do{ \
if ((VALUE) < 7) SBI(dm, _AXIS(AXIS)); \
else if ((VALUE) > 7) CBI(dm, _AXIS(AXIS)); \
page_step_state.sd[_AXIS(AXIS)] = VALUE; \
page_step_state.bd[_AXIS(AXIS)] += VALUE; \
}while(0)
#define PAGE_PULSE_PREP(AXIS) do{ \
@ -1592,7 +1591,7 @@ void Stepper::pulse_phase_isr() {
}while(0)
switch (page_step_state.segment_steps) {
case 8:
case DirectStepping::Config::SEGMENT_STEPS:
page_step_state.segment_idx += 2;
page_step_state.segment_steps = 0;
// fallthru
@ -1601,10 +1600,10 @@ void Stepper::pulse_phase_isr() {
high = page_step_state.page[page_step_state.segment_idx + 1];
uint8_t dm = last_direction_bits;
PAGE_SEGMENT_UPDATE(X, low >> 4, 7);
PAGE_SEGMENT_UPDATE(Y, low & 0xF, 7);
PAGE_SEGMENT_UPDATE(Z, high >> 4, 7);
PAGE_SEGMENT_UPDATE(E, high & 0xF, 7);
PAGE_SEGMENT_UPDATE(X, low >> 4);
PAGE_SEGMENT_UPDATE(Y, low & 0xF);
PAGE_SEGMENT_UPDATE(Z, high >> 4);
PAGE_SEGMENT_UPDATE(E, high & 0xF);
if (dm != last_direction_bits) {
last_direction_bits = dm;
@ -1615,9 +1614,9 @@ void Stepper::pulse_phase_isr() {
default: break;
}
PAGE_PULSE_PREP(X),
PAGE_PULSE_PREP(Y),
PAGE_PULSE_PREP(Z),
PAGE_PULSE_PREP(X);
PAGE_PULSE_PREP(Y);
PAGE_PULSE_PREP(Z);
PAGE_PULSE_PREP(E);
page_step_state.segment_steps++;
@ -1634,7 +1633,7 @@ void Stepper::pulse_phase_isr() {
}while(0)
switch (page_step_state.segment_steps) {
case 4:
case DirectStepping::Config::SEGMENT_STEPS:
page_step_state.segment_idx++;
page_step_state.segment_steps = 0;
// fallthru
@ -1664,7 +1663,6 @@ void Stepper::pulse_phase_isr() {
}while(0)
uint8_t steps = page_step_state.page[page_step_state.segment_idx >> 1];
if (page_step_state.segment_idx & 0x1) steps >>= 4;
PAGE_PULSE_PREP(X, 3);