@@ -64,11 +64,12 @@ void xs_digital_monitor_destructor(void *data)
64
64
65
65
// disable interrupt for this pin
66
66
gpio_set_irq_enabled (monitor -> pin , GPIO_IRQ_EDGE_FALL | GPIO_IRQ_EDGE_RISE , false);
67
- gpio_init (monitor -> pin );
68
67
69
68
// remove ISR
70
- // if (NULL == gMonitors)
71
- // ETS_GPIO_INTR_DISABLE();
69
+ if (NULL == gMonitors )
70
+ gpio_set_irq_enabled_with_callback (monitor -> pin , GPIO_IRQ_EDGE_FALL | GPIO_IRQ_EDGE_RISE , false, NULL );
71
+
72
+ gpio_init (monitor -> pin );
72
73
73
74
modCriticalSectionEnd ();
74
75
@@ -134,7 +135,6 @@ void xs_digital_monitor(xsMachine *the)
134
135
135
136
// enable interrupt for this pin
136
137
gpio_set_irq_enabled (monitor -> pin , edge << 2 , true); // shift to GPIO_IRQ_EDGE_FALL | GPIO_IRQ_EDGE_RISE
137
-
138
138
}
139
139
140
140
void xs_digital_monitor_close (xsMachine * the )
@@ -182,17 +182,13 @@ void gpioISR(uint gpio, uint32_t events)
182
182
continue ;
183
183
184
184
if (gpio_get (gpio )) {
185
- if (1 & walker -> edge ) {
185
+ if (1 & walker -> edge )
186
186
walker -> rises += 1 ;
187
- doUpdate = !walker -> triggered ;
188
- walker -> triggered = true;
189
- }
190
187
}
191
- else if (2 & walker -> edge ) {
188
+ else if (2 & walker -> edge )
192
189
walker -> falls += 1 ;
193
- doUpdate = !walker -> triggered ;
194
- walker -> triggered = true;
195
- }
190
+ doUpdate = !walker -> triggered ;
191
+ walker -> triggered = true;
196
192
break ;
197
193
}
198
194
0 commit comments