added protection against retriggering stepper irq
This commit is contained in:
parent
db193f4336
commit
b85b575b9b
@ -50,6 +50,7 @@ uint8_t out_bits;
|
|||||||
struct Line *current_line;
|
struct Line *current_line;
|
||||||
volatile int32_t counter_x, counter_y, counter_z;
|
volatile int32_t counter_x, counter_y, counter_z;
|
||||||
uint32_t iterations;
|
uint32_t iterations;
|
||||||
|
volatile busy;
|
||||||
|
|
||||||
void config_step_timer(uint32_t microseconds);
|
void config_step_timer(uint32_t microseconds);
|
||||||
|
|
||||||
@ -96,9 +97,11 @@ SIGNAL(SIG_OUTPUT_COMPARE1A)
|
|||||||
TCNT2 = -(((STEP_PULSE_MICROSECONDS-4)*TICKS_PER_MICROSECOND)/8);
|
TCNT2 = -(((STEP_PULSE_MICROSECONDS-4)*TICKS_PER_MICROSECOND)/8);
|
||||||
// Enable interrupts in order for SIG_OVERFLOW2 to be able to be triggered
|
// Enable interrupts in order for SIG_OVERFLOW2 to be able to be triggered
|
||||||
// and reset the stepper signal even before this handler is done. Needed
|
// and reset the stepper signal even before this handler is done. Needed
|
||||||
// to generate a clean stepper-signal even if this is going to be a time consuming
|
// to generate a clean stepper-signal in the event that this is going to be a time consuming
|
||||||
// time oround in this interrupt e.g. if we just completed a line and need to
|
// time oround in this interrupt e.g. if we just completed a line and need to
|
||||||
// set up another.
|
// set up another. The busy-flag is used to avoid retriggering this interrupt.
|
||||||
|
if(busy){return;}
|
||||||
|
busy = TRUE;
|
||||||
sei();
|
sei();
|
||||||
|
|
||||||
// If there is no current line, attempt to pop one from the buffer
|
// If there is no current line, attempt to pop one from the buffer
|
||||||
@ -149,6 +152,7 @@ SIGNAL(SIG_OUTPUT_COMPARE1A)
|
|||||||
out_bits = 0;
|
out_bits = 0;
|
||||||
}
|
}
|
||||||
out_bits ^= STEPPING_INVERT_MASK;
|
out_bits ^= STEPPING_INVERT_MASK;
|
||||||
|
busy=FALSE;
|
||||||
PORTD &= ~(1<<3);
|
PORTD &= ~(1<<3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user