Browse Source

Crash if pullups get enabled on the thermistor inputs

Alex Voinea 2 years ago
parent
commit
b7806bf25f
5 changed files with 16 additions and 0 deletions
  1. 1 0
      Firmware/Marlin.h
  2. 4 0
      Firmware/Marlin_main.cpp
  3. 4 0
      Firmware/stepper.cpp
  4. 5 0
      Firmware/temperature.cpp
  5. 2 0
      Firmware/xflash_dump.h

+ 1 - 0
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;
 

+ 4 - 0
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();
 

+ 4 - 0
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

+ 5 - 0
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();
 

+ 2 - 0
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