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;
|
||||
|
||||
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;
|
||||
bufindw += len;
|
||||
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
|
||||
// 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.
|
||||
block->accelerate_until = accelerate_steps;
|
||||
block->decelerate_after = accelerate_steps+plateau_steps;
|
||||
|
|
|
@ -854,6 +854,11 @@ void isr() {
|
|||
if (OCR1A < TCNT1) {
|
||||
stepper_timer_overflow_state = true;
|
||||
WRITE_NC(BEEPER, HIGH);
|
||||
SERIAL_PROTOCOLPGM("Stepper timer overflow ");
|
||||
SERIAL_PROTOCOL(OCR1A);
|
||||
SERIAL_PROTOCOLPGM("<");
|
||||
SERIAL_PROTOCOL(TCNT1);
|
||||
SERIAL_PROTOCOLLN("!");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -1137,6 +1142,7 @@ void st_init()
|
|||
// create_speed_lookuptable.py
|
||||
TCCR1B = (TCCR1B & ~(0x07<<CS10)) | (2<<CS10);
|
||||
|
||||
// Plan the first interrupt after 8ms from now.
|
||||
OCR1A = 0x4000;
|
||||
TCNT1 = 0;
|
||||
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)
|
||||
{
|
||||
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[Y_AXIS] = y;
|
||||
count_position[Z_AXIS] = z;
|
||||
|
|
Loading…
Reference in a new issue