mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-22 21:23:07 +03:00
Fixes issue of reentrant calls to nointerrupts() exposed functional replacements to cli sei and SREG when dealing with interrupts InterruptLock class to auto stop and restore interrupt level Fix user ISR calls to be like Arduino with interrupts disabled fully.
179 lines
4.9 KiB
C
179 lines
4.9 KiB
C
/*
|
|
* copyright (c) 2008 - 2011 Espressif System
|
|
*
|
|
* Define user specified Event signals and Task priorities here
|
|
*
|
|
*/
|
|
|
|
#ifndef _ETS_SYS_H
|
|
#define _ETS_SYS_H
|
|
|
|
#include "c_types.h"
|
|
#include "eagle_soc.h"
|
|
|
|
typedef uint32_t ETSSignal;
|
|
typedef uint32_t ETSParam;
|
|
|
|
typedef struct ETSEventTag ETSEvent;
|
|
|
|
struct ETSEventTag {
|
|
ETSSignal sig;
|
|
ETSParam par;
|
|
};
|
|
|
|
typedef void (*ETSTask)(ETSEvent *e);
|
|
|
|
/* timer related */
|
|
typedef uint32_t ETSHandle;
|
|
typedef void ETSTimerFunc(void *timer_arg);
|
|
|
|
typedef struct _ETSTIMER_ {
|
|
struct _ETSTIMER_ *timer_next;
|
|
uint32_t timer_expire;
|
|
uint32_t timer_period;
|
|
ETSTimerFunc *timer_func;
|
|
void *timer_arg;
|
|
} ETSTimer;
|
|
|
|
/* interrupt related */
|
|
|
|
typedef void (*int_handler_t)(void*);
|
|
|
|
#define ETS_SLC_INUM 1
|
|
#define ETS_SPI_INUM 2
|
|
#define ETS_GPIO_INUM 4
|
|
#define ETS_UART_INUM 5
|
|
#define ETS_UART1_INUM 5
|
|
#define ETS_CCOMPARE0_INUM 6
|
|
#define ETS_SOFT_INUM 7
|
|
#define ETS_WDT_INUM 8
|
|
#define ETS_FRC_TIMER1_INUM 9 /* use edge*/
|
|
|
|
#define ETS_INTR_LOCK() \
|
|
ets_intr_lock()
|
|
|
|
#define ETS_INTR_UNLOCK() \
|
|
ets_intr_unlock()
|
|
|
|
#define ETS_INTR_ENABLE(inum) \
|
|
ets_isr_unmask((1<<inum))
|
|
|
|
#define ETS_INTR_DISABLE(inum) \
|
|
ets_isr_mask((1<<inum))
|
|
|
|
inline bool ETS_INTR_WITHINISR()
|
|
{
|
|
uint32_t ps;
|
|
__asm__ __volatile__("rsr %0,ps":"=a" (ps));
|
|
// PS.INTLEVEL check
|
|
return ((ps & 0x0f) != 0);
|
|
}
|
|
|
|
inline uint32_t ETS_INTR_ENABLED(void)
|
|
{
|
|
uint32_t enabled;
|
|
__asm__ __volatile__("esync; rsr %0,intenable":"=a" (enabled));
|
|
return enabled;
|
|
}
|
|
|
|
inline uint32_t ETS_INTR_PENDING(void)
|
|
{
|
|
uint32_t pending;
|
|
__asm__ __volatile__("esync; rsr %0,interrupt":"=a" (pending));
|
|
return pending;
|
|
}
|
|
|
|
#define ETS_CCOMPARE0_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_CCOMPARE0_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_CCOMPARE0_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_CCOMPARE0_INUM)
|
|
|
|
#define ETS_CCOMPARE0_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_CCOMPARE0_INUM)
|
|
|
|
|
|
#define ETS_FRC_TIMER1_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_FRC_TIMER1_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_FRC_TIMER1_NMI_INTR_ATTACH(func) \
|
|
NmiTimSetFunc(func)
|
|
|
|
#define ETS_GPIO_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_GPIO_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_GPIO_INTR_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_GPIO_INUM)
|
|
|
|
#define ETS_GPIO_INTR_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_GPIO_INUM)
|
|
|
|
|
|
#define ETS_UART_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_UART_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_UART_INTR_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_UART_INUM)
|
|
|
|
#define ETS_UART_INTR_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_UART_INUM)
|
|
|
|
#define ETS_FRC1_INTR_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_FRC_TIMER1_INUM)
|
|
|
|
#define ETS_FRC1_INTR_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_FRC_TIMER1_INUM)
|
|
|
|
|
|
#define ETS_SPI_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_SPI_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_SPI_INTR_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_SPI_INUM)
|
|
|
|
#define ETS_SPI_INTR_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_SPI_INUM)
|
|
|
|
|
|
#define ETS_SLC_INTR_ATTACH(func, arg) \
|
|
ets_isr_attach(ETS_SLC_INUM, (int_handler_t)(func), (void *)(arg))
|
|
|
|
#define ETS_SLC_INTR_ENABLE() \
|
|
ETS_INTR_ENABLE(ETS_SLC_INUM)
|
|
|
|
#define ETS_SLC_INTR_DISABLE() \
|
|
ETS_INTR_DISABLE(ETS_SLC_INUM)
|
|
|
|
|
|
void *pvPortMalloc(size_t xWantedSize) __attribute__((malloc, alloc_size(1)));
|
|
void *pvPortRealloc(void* ptr, size_t xWantedSize) __attribute__((alloc_size(2)));
|
|
void pvPortFree(void *ptr);
|
|
void *vPortMalloc(size_t xWantedSize) __attribute__((malloc, alloc_size(1)));
|
|
void vPortFree(void *ptr);
|
|
void *ets_memcpy(void *dest, const void *src, size_t n);
|
|
void *ets_memset(void *s, int c, size_t n);
|
|
void ets_timer_arm_new(ETSTimer *a, int b, int c, int isMstimer);
|
|
void ets_timer_setfn(ETSTimer *t, ETSTimerFunc *fn, void *parg);
|
|
void ets_timer_disarm(ETSTimer *a);
|
|
int atoi(const char *nptr);
|
|
int ets_strncmp(const char *s1, const char *s2, int len);
|
|
int ets_strcmp(const char *s1, const char *s2);
|
|
int ets_strlen(const char *s);
|
|
char *ets_strcpy(char *dest, const char *src);
|
|
char *ets_strncpy(char *dest, const char *src, size_t n);
|
|
char *ets_strstr(const char *haystack, const char *needle);
|
|
int ets_sprintf(char *str, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
|
|
int os_snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
|
|
int ets_printf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
|
|
void ets_install_putc1(void* routine);
|
|
void uart_div_modify(int no, int freq);
|
|
void ets_isr_mask(int intr);
|
|
void ets_isr_unmask(int intr);
|
|
void ets_isr_attach(int intr, int_handler_t handler, void *arg);
|
|
void ets_intr_lock();
|
|
void ets_intr_unlock();
|
|
int ets_vsnprintf(char * s, size_t n, const char * format, va_list arg) __attribute__ ((format (printf, 3, 0)));
|
|
int ets_vprintf(const char * format, va_list arg) __attribute__ ((format (printf, 1, 0)));
|
|
|
|
#endif /* _ETS_SYS_H */
|