@@ -137,17 +137,29 @@ void timer0_detachInterrupt(void);
137
137
void ets_intr_lock ();
138
138
void ets_intr_unlock ();
139
139
140
- // level (0-15),
141
- // level 15 will disable ALL interrupts,
142
- // level 0 will disable most software interrupts
140
+ #ifndef __STRINGIFY
141
+ #define __STRINGIFY (a ) #a
142
+ #endif
143
+
144
+ // these low level routines provide a replacement for SREG interrupt save that AVR uses
145
+ // but are esp8266 specific. A normal use pattern is like
143
146
//
144
- #define xt_disable_interrupts (state , level ) __asm__ __volatile__("rsil %0," __STRINGIFY(level) : "=a" (state))
145
- #define xt_enable_interrupts (state ) __asm__ __volatile__("wsr %0,ps; isync" :: "a" (state) : "memory")
147
+ //{
148
+ // uint32_t savedPS = xt_rsil(1); // this routine will allow level 2 and above
149
+ // // do work here
150
+ // xt_wsr_ps(savedPS); // restore the state
151
+ //}
152
+ //
153
+ // level (0-15), interrupts of the given level and above will be active
154
+ // level 15 will disable ALL interrupts,
155
+ // level 0 will enable ALL interrupts,
156
+ //
157
+ #define xt_rsil (level ) (__extension__({uint32_t state; __asm__ __volatile__("rsil %0," __STRINGIFY(level) : "=a" (state)); state;}))
158
+ #define xt_wsr_ps (state ) __asm__ __volatile__("wsr %0,ps; isync" :: "a" (state) : "memory")
146
159
147
- extern uint32_t interruptsState ;
160
+ #define interrupts () xt_rsil(0)
161
+ #define noInterrupts () xt_rsil(15)
148
162
149
- #define interrupts () xt_enable_interrupts(interruptsState)
150
- #define noInterrupts () __asm__ __volatile__("rsil %0,15" : "=a" (interruptsState))
151
163
152
164
#define clockCyclesPerMicrosecond () ( F_CPU / 1000000L )
153
165
#define clockCyclesToMicroseconds (a ) ( (a) / clockCyclesPerMicrosecond() )
@@ -179,12 +191,12 @@ void initVariant(void);
179
191
180
192
int atexit (void (* func )()) __attribute__((weak ));
181
193
182
- void pinMode (uint8_t , uint8_t );
183
- void digitalWrite (uint8_t , uint8_t );
184
- int digitalRead (uint8_t );
185
- int analogRead (uint8_t );
194
+ void pinMode (uint8_t pin , uint8_t mode );
195
+ void digitalWrite (uint8_t pin , uint8_t val );
196
+ int digitalRead (uint8_t pin );
197
+ int analogRead (uint8_t pin );
186
198
void analogReference (uint8_t mode );
187
- void analogWrite (uint8_t , int );
199
+ void analogWrite (uint8_t pin , int val );
188
200
void analogWriteFreq (uint32_t freq );
189
201
void analogWriteRange (uint32_t range );
190
202
@@ -198,8 +210,8 @@ unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);
198
210
void shiftOut (uint8_t dataPin , uint8_t clockPin , uint8_t bitOrder , uint8_t val );
199
211
uint8_t shiftIn (uint8_t dataPin , uint8_t clockPin , uint8_t bitOrder );
200
212
201
- void attachInterrupt (uint8_t , void (* )(void ), int mode );
202
- void detachInterrupt (uint8_t );
213
+ void attachInterrupt (uint8_t pin , void (* )(void ), int mode );
214
+ void detachInterrupt (uint8_t pin );
203
215
204
216
void setup (void );
205
217
void loop (void );
0 commit comments