@ -331,6 +331,14 @@ void Stepper::set_directions() {
ISR ( TIMER1_COMPA_vect ) { Stepper : : isr ( ) ; }
ISR ( TIMER1_COMPA_vect ) { Stepper : : isr ( ) ; }
void Stepper : : isr ( ) {
void Stepper : : isr ( ) {
//Disable Timer0 ISRs and enable global ISR again to capture UART events (incoming chars)
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
CBI ( TIMSK0 , OCIE0A ) ; //estepper ISR
# endif
CBI ( TIMSK0 , OCIE0B ) ; //Temperature ISR
DISABLE_STEPPER_DRIVER_INTERRUPT ( ) ;
sei ( ) ;
if ( cleaning_buffer_counter ) {
if ( cleaning_buffer_counter ) {
current_block = NULL ;
current_block = NULL ;
planner . discard_current_block ( ) ;
planner . discard_current_block ( ) ;
@ -339,6 +347,12 @@ void Stepper::isr() {
# endif
# endif
cleaning_buffer_counter - - ;
cleaning_buffer_counter - - ;
OCR1A = 200 ; // Run at max speed - 10 KHz
OCR1A = 200 ; // Run at max speed - 10 KHz
//re-enable ISRs
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
SBI ( TIMSK0 , OCIE0A ) ;
# endif
SBI ( TIMSK0 , OCIE0B ) ;
ENABLE_STEPPER_DRIVER_INTERRUPT ( ) ;
return ;
return ;
}
}
@ -368,6 +382,11 @@ void Stepper::isr() {
if ( current_block - > steps [ Z_AXIS ] > 0 ) {
if ( current_block - > steps [ Z_AXIS ] > 0 ) {
enable_z ( ) ;
enable_z ( ) ;
OCR1A = 2000 ; // Run at slow speed - 1 KHz
OCR1A = 2000 ; // Run at slow speed - 1 KHz
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
SBI ( TIMSK0 , OCIE0A ) ;
# endif
SBI ( TIMSK0 , OCIE0B ) ;
ENABLE_STEPPER_DRIVER_INTERRUPT ( ) ;
return ;
return ;
}
}
# endif
# endif
@ -378,6 +397,11 @@ void Stepper::isr() {
}
}
else {
else {
OCR1A = 2000 ; // Run at slow speed - 1 KHz
OCR1A = 2000 ; // Run at slow speed - 1 KHz
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
SBI ( TIMSK0 , OCIE0A ) ;
# endif
SBI ( TIMSK0 , OCIE0B ) ;
ENABLE_STEPPER_DRIVER_INTERRUPT ( ) ;
return ;
return ;
}
}
}
}
@ -402,10 +426,6 @@ void Stepper::isr() {
// Take multiple steps per interrupt (For high speed moves)
// Take multiple steps per interrupt (For high speed moves)
bool all_steps_done = false ;
bool all_steps_done = false ;
for ( int8_t i = 0 ; i < step_loops ; i + + ) {
for ( int8_t i = 0 ; i < step_loops ; i + + ) {
# ifndef USBCON
customizedSerial . checkRx ( ) ; // Check for serial chars.
# endif
# if ENABLED(LIN_ADVANCE)
# if ENABLED(LIN_ADVANCE)
counter_E + = current_block - > steps [ E_AXIS ] ;
counter_E + = current_block - > steps [ E_AXIS ] ;
@ -694,6 +714,11 @@ void Stepper::isr() {
current_block = NULL ;
current_block = NULL ;
planner . discard_current_block ( ) ;
planner . discard_current_block ( ) ;
}
}
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
SBI ( TIMSK0 , OCIE0A ) ;
# endif
SBI ( TIMSK0 , OCIE0B ) ;
ENABLE_STEPPER_DRIVER_INTERRUPT ( ) ;
}
}
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
# if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)