Skip to content

Commit 36e047e

Browse files
authored
Allow stopWaveform to stop timed-out waveforms (#7236)
Fixes #7230.
1 parent 9b41d9a commit 36e047e

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

Diff for: cores/esp8266/core_esp8266_waveform.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -178,17 +178,15 @@ int ICACHE_RAM_ATTR stopWaveform(uint8_t pin) {
178178
}
179179
// If user sends in a pin >16 but <32, this will always point to a 0 bit
180180
// If they send >=32, then the shift will result in 0 and it will also return false
181-
uint32_t mask = 1<<pin;
182-
if (!(waveformEnabled & mask)) {
183-
return false; // It's not running, nothing to do here
184-
}
185-
waveformToDisable |= mask;
186-
// Ensure timely service....
187-
if (T1L > microsecondsToClockCycles(10)) {
188-
timer1_write(microsecondsToClockCycles(10));
189-
}
190-
while (waveformToDisable) {
191-
/* no-op */ // Can't delay() since stopWaveform may be called from an IRQ
181+
if (waveformEnabled & (1UL << pin)) {
182+
waveformToDisable = 1UL << pin;
183+
// Must not interfere if Timer is due shortly
184+
if (T1L > microsecondsToClockCycles(10)) {
185+
timer1_write(microsecondsToClockCycles(10));
186+
}
187+
while (waveformToDisable) {
188+
/* no-op */ // Can't delay() since stopWaveform may be called from an IRQ
189+
}
192190
}
193191
if (!waveformEnabled && !timer1CB) {
194192
deinitTimer();

0 commit comments

Comments
 (0)