1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-23 08:06:13 +01:00

protect analog read with cli()

This commit is contained in:
Harald Barth 2022-01-30 23:56:16 +01:00
parent 05545321a9
commit 8af74f7082

View File

@ -152,16 +152,16 @@ int MotorDriver::getCurrentRaw() {
bool irq = disableInterrupts(); bool irq = disableInterrupts();
current = analogRead(currentPin)-senseOffset; current = analogRead(currentPin)-senseOffset;
enableInterrupts(irq); enableInterrupts(irq);
#elif defined(ARDUINO_TEENSY32) || defined(ARDUINO_TEENSY35)|| defined(ARDUINO_TEENSY36) #else // Uno, Mega and all the TEENSY3* but not TEENSY4*
unsigned char sreg_backup; unsigned char sreg_backup;
sreg_backup = SREG; /* save interrupt enable/disable state */ sreg_backup = SREG; /* save interrupt enable/disable state */
cli(); cli();
current = analogRead(currentPin)-senseOffset; current = analogRead(currentPin)-senseOffset;
#if defined(ARDUINO_TEENSY32) || defined(ARDUINO_TEENSY35)|| defined(ARDUINO_TEENSY36)
overflow_count = 0; overflow_count = 0;
SREG = sreg_backup; /* restore interrupt state */
#else
current = analogRead(currentPin)-senseOffset;
#endif #endif
if (sreg_backup & 128) sei(); /* restore interrupt state */
#endif // outer #
if (current<0) current=0-current; if (current<0) current=0-current;
if ((faultPin != UNUSED_PIN) && isLOW(fastFaultPin) && isHIGH(fastPowerPin)) if ((faultPin != UNUSED_PIN) && isLOW(fastFaultPin) && isHIGH(fastPowerPin))
return (current == 0 ? -1 : -current); return (current == 0 ? -1 : -current);