Skip to content

Commit 367962d

Browse files
committed
refactored xt_disable_intterupts to accept level
due to the rsil requirement that the level be a constant, the method was moved into a macro
1 parent b094b50 commit 367962d

File tree

2 files changed

+12
-18
lines changed

2 files changed

+12
-18
lines changed

cores/esp8266/Arduino.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,17 @@ void timer1_write(uint32_t ticks); //maximum ticks 8388607
124124
void ets_intr_lock();
125125
void ets_intr_unlock();
126126

127-
void xt_enable_interrupts();
128-
void xt_disable_interrupts();
127+
// level (0-15),
128+
// level 15 will disable ALL interrupts,
129+
// level 0 will disable most software interrupts
130+
//
131+
#define xt_disable_interrupts(state, level) __asm__ __volatile__("rsil %0," __STRINGIFY(level) "; esync; isync; dsync" : "=a" (state))
132+
#define xt_enable_interrupts(state) __asm__ __volatile__("wsr %0,ps; esync" :: "a" (state) : "memory")
129133

130-
#define interrupts() xt_enable_interrupts();
131-
#define noInterrupts() xt_disable_interrupts();
134+
extern uint32_t interruptsState;
135+
136+
#define interrupts() xt_enable_interrupts(interruptsState)
137+
#define noInterrupts() xt_disable_interrupts(interruptsState, 15)
132138

133139
#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
134140
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )

cores/esp8266/core_esp8266_wiring_digital.c

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,8 @@ extern void __detachInterrupt(uint8_t pin) {
139139
}
140140
}
141141

142-
static uint32_t interruptState = 0;
143-
144-
void xt_disable_interrupts()
145-
{
146-
__asm__ __volatile__("rsil %0,15":"=a" (interruptState));
147-
__asm__("esync");
148-
__asm__("isync");
149-
__asm__("dsync");
150-
}
151-
void xt_enable_interrupts()
152-
{
153-
__asm__ __volatile__("wsr %0,ps"::"a" (interruptState) : "memory");
154-
__asm__("esync");
155-
}
142+
// stored state for the noInterrupts/interrupts methods
143+
uint32_t interruptsState = 0;
156144

157145
void initPins() {
158146
//Disable UART interrupts

0 commit comments

Comments
 (0)