diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 85c4dae10..f099c86b9 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -500,6 +500,7 @@ void raise_z_above(float target, bool plan=true); extern "C" void softReset(); void stack_error(); +void pullup_error(bool fromTempISR); extern uint32_t IP_address; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5a57808d0..fbdeac97a 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1754,6 +1754,10 @@ void stack_error() { crash_and_burn(dump_crash_reason::stack_error); } +void pullup_error(bool fromTempISR) { + crash_and_burn(fromTempISR ? dump_crash_reason::bad_pullup_temp_isr : dump_crash_reason::bad_pullup_step_isr); +} + void trace(); diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index c9cb8bebc..6a6673705 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -299,6 +299,10 @@ ISR(TIMER1_COMPA_vect) { if (sp < SP_min) SP_min = sp; #endif //DEBUG_STACK_MONITOR + // check for faulty pull-ups enabled on thermistor inputs + if (PORTF & 0x5F) + pullup_error(false); + #ifdef LIN_ADVANCE advance_isr_scheduler(); #else diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 87ffc6149..ec55c39b4 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1683,6 +1683,11 @@ void adc_ready(void) //callback from adc when sampling finished FORCE_INLINE static void temperature_isr() { + // check for faulty pull-ups enabled on thermistor inputs + if (PORTF & 0x5F) + pullup_error(true); + + if (!temp_meas_ready) adc_cycle(); lcd_buttons_update(); diff --git a/Firmware/xflash_dump.h b/Firmware/xflash_dump.h index 6ece99c68..d68b3639c 100644 --- a/Firmware/xflash_dump.h +++ b/Firmware/xflash_dump.h @@ -8,6 +8,8 @@ enum class dump_crash_reason : uint8_t stack_error, watchdog, bad_isr, + bad_pullup_temp_isr, + bad_pullup_step_isr, }; #ifdef XFLASH_DUMP