Documented the interrupt blocking by a main thread by its maximum time.
Added a debug output to serial line on stepper timer overflow.
This commit is contained in:
parent
9e534c1990
commit
17a8e2db01
3 changed files with 19 additions and 0 deletions
|
@ -627,6 +627,10 @@ void get_command()
|
||||||
sd_count.value = 0;
|
sd_count.value = 0;
|
||||||
|
|
||||||
cli();
|
cli();
|
||||||
|
// This block locks the interrupts globally for 3.56 us,
|
||||||
|
// which corresponds to a maximum repeat frequency of 280.70 kHz.
|
||||||
|
// This blocking is safe in the context of a 10kHz stepper driver interrupt
|
||||||
|
// or a 115200 Bd serial line receive interrupt, which will not trigger faster than 12kHz.
|
||||||
++ buflen;
|
++ buflen;
|
||||||
bufindw += len;
|
bufindw += len;
|
||||||
sdpos_atomic = card.get_sdpos()+1;
|
sdpos_atomic = card.get_sdpos()+1;
|
||||||
|
|
|
@ -264,6 +264,10 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
|
||||||
}
|
}
|
||||||
|
|
||||||
CRITICAL_SECTION_START; // Fill variables used by the stepper in a critical section
|
CRITICAL_SECTION_START; // Fill variables used by the stepper in a critical section
|
||||||
|
// This block locks the interrupts globally for 4.38 us,
|
||||||
|
// which corresponds to a maximum repeat frequency of 228.57 kHz.
|
||||||
|
// This blocking is safe in the context of a 10kHz stepper driver interrupt
|
||||||
|
// or a 115200 Bd serial line receive interrupt, which will not trigger faster than 12kHz.
|
||||||
if (! block->busy) { // Don't update variables if block is busy.
|
if (! block->busy) { // Don't update variables if block is busy.
|
||||||
block->accelerate_until = accelerate_steps;
|
block->accelerate_until = accelerate_steps;
|
||||||
block->decelerate_after = accelerate_steps+plateau_steps;
|
block->decelerate_after = accelerate_steps+plateau_steps;
|
||||||
|
|
|
@ -854,6 +854,11 @@ void isr() {
|
||||||
if (OCR1A < TCNT1) {
|
if (OCR1A < TCNT1) {
|
||||||
stepper_timer_overflow_state = true;
|
stepper_timer_overflow_state = true;
|
||||||
WRITE_NC(BEEPER, HIGH);
|
WRITE_NC(BEEPER, HIGH);
|
||||||
|
SERIAL_PROTOCOLPGM("Stepper timer overflow ");
|
||||||
|
SERIAL_PROTOCOL(OCR1A);
|
||||||
|
SERIAL_PROTOCOLPGM("<");
|
||||||
|
SERIAL_PROTOCOL(TCNT1);
|
||||||
|
SERIAL_PROTOCOLLN("!");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1137,6 +1142,7 @@ void st_init()
|
||||||
// create_speed_lookuptable.py
|
// create_speed_lookuptable.py
|
||||||
TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (2<<CS10);
|
TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (2<<CS10);
|
||||||
|
|
||||||
|
// Plan the first interrupt after 8ms from now.
|
||||||
OCR1A = 0x4000;
|
OCR1A = 0x4000;
|
||||||
TCNT1 = 0;
|
TCNT1 = 0;
|
||||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
|
@ -1176,6 +1182,11 @@ void st_synchronize()
|
||||||
void st_set_position(const long &x, const long &y, const long &z, const long &e)
|
void st_set_position(const long &x, const long &y, const long &z, const long &e)
|
||||||
{
|
{
|
||||||
CRITICAL_SECTION_START;
|
CRITICAL_SECTION_START;
|
||||||
|
// Copy 4x4B.
|
||||||
|
// This block locks the interrupts globally for 4.56 us,
|
||||||
|
// which corresponds to a maximum repeat frequency of 219.18 kHz.
|
||||||
|
// This blocking is safe in the context of a 10kHz stepper driver interrupt
|
||||||
|
// or a 115200 Bd serial line receive interrupt, which will not trigger faster than 12kHz.
|
||||||
count_position[X_AXIS] = x;
|
count_position[X_AXIS] = x;
|
||||||
count_position[Y_AXIS] = y;
|
count_position[Y_AXIS] = y;
|
||||||
count_position[Z_AXIS] = z;
|
count_position[Z_AXIS] = z;
|
||||||
|
|
Loading…
Reference in a new issue