|
@@ -91,8 +91,8 @@ volatile uint32_t Stepper::step_events_completed = 0; // The number of step even
|
91
|
91
|
|
92
|
92
|
#if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
|
93
|
93
|
|
94
|
|
- unsigned char Stepper::old_OCR0A = 0;
|
95
|
|
- volatile unsigned char Stepper::eISR_Rate = 200; // Keep the ISR at a low rate until needed
|
|
94
|
+ uint8_t Stepper::old_OCR0A = 0;
|
|
95
|
+ volatile uint8_t Stepper::eISR_Rate = 200; // Keep the ISR at a low rate until needed
|
96
|
96
|
|
97
|
97
|
#if ENABLED(LIN_ADVANCE)
|
98
|
98
|
volatile int Stepper::e_steps[E_STEPPERS];
|
|
@@ -328,12 +328,12 @@ ISR(TIMER1_COMPA_vect) { Stepper::isr(); }
|
328
|
328
|
|
329
|
329
|
void Stepper::isr() {
|
330
|
330
|
if (cleaning_buffer_counter) {
|
|
331
|
+ --cleaning_buffer_counter;
|
331
|
332
|
current_block = NULL;
|
332
|
333
|
planner.discard_current_block();
|
333
|
334
|
#ifdef SD_FINISHED_RELEASECOMMAND
|
334
|
|
- if ((cleaning_buffer_counter == 1) && (SD_FINISHED_STEPPERRELEASE)) enqueue_and_echo_commands_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
|
335
|
+ if (!cleaning_buffer_counter && (SD_FINISHED_STEPPERRELEASE)) enqueue_and_echo_commands_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
335
|
336
|
#endif
|
336
|
|
- cleaning_buffer_counter--;
|
337
|
337
|
OCR1A = 200; // Run at max speed - 10 KHz
|
338
|
338
|
return;
|
339
|
339
|
}
|
|
@@ -551,7 +551,6 @@ void Stepper::isr() {
|
551
|
551
|
#endif
|
552
|
552
|
|
553
|
553
|
// Calculate new timer value
|
554
|
|
- uint16_t timer, step_rate;
|
555
|
554
|
if (step_events_completed <= (uint32_t)current_block->accelerate_until) {
|
556
|
555
|
|
557
|
556
|
MultiU24X32toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate);
|
|
@@ -561,7 +560,7 @@ void Stepper::isr() {
|
561
|
560
|
NOMORE(acc_step_rate, current_block->nominal_rate);
|
562
|
561
|
|
563
|
562
|
// step_rate to timer interval
|
564
|
|
- timer = calc_timer(acc_step_rate);
|
|
563
|
+ uint16_t timer = calc_timer(acc_step_rate);
|
565
|
564
|
OCR1A = timer;
|
566
|
565
|
acceleration_time += timer;
|
567
|
566
|
|
|
@@ -603,6 +602,7 @@ void Stepper::isr() {
|
603
|
602
|
#endif
|
604
|
603
|
}
|
605
|
604
|
else if (step_events_completed > (uint32_t)current_block->decelerate_after) {
|
|
605
|
+ uint16_t step_rate;
|
606
|
606
|
MultiU24X32toH16(step_rate, deceleration_time, current_block->acceleration_rate);
|
607
|
607
|
|
608
|
608
|
if (step_rate < acc_step_rate) { // Still decelerating?
|
|
@@ -613,7 +613,7 @@ void Stepper::isr() {
|
613
|
613
|
step_rate = current_block->final_rate;
|
614
|
614
|
|
615
|
615
|
// step_rate to timer interval
|
616
|
|
- timer = calc_timer(step_rate);
|
|
616
|
+ uint16_t timer = calc_timer(step_rate);
|
617
|
617
|
OCR1A = timer;
|
618
|
618
|
deceleration_time += timer;
|
619
|
619
|
|