From b7806bf25f507a16b5c514bc449cfe5a8b0729e0 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 28 Jan 2022 15:22:08 +0100 Subject: [PATCH] Crash if pullups get enabled on the thermistor inputs --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 4 ++++ Firmware/stepper.cpp | 4 ++++ Firmware/temperature.cpp | 5 +++++ Firmware/xflash_dump.h | 2 ++ 5 files changed, 16 insertions(+) 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