summaryrefslogtreecommitdiff
path: root/src/arch/esp8266
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-12-06 13:49:32 +0100
committerDaniel Friesel <derf@finalrewind.org>2017-12-06 13:49:32 +0100
commite49ce1e6d726ba7d3e6f80a9608d80cab316df32 (patch)
tree3c60defa36fc6ba7c1bfa106e57eae6209f5122c /src/arch/esp8266
parent82b779944d2c733d1db7a63a87452d9a5654a554 (diff)
Add support for arduino-like loop function + blinky on esp8266
Diffstat (limited to 'src/arch/esp8266')
-rw-r--r--src/arch/esp8266/Makefile.inc2
-rw-r--r--src/arch/esp8266/arch.cc21
-rw-r--r--src/arch/esp8266/driver/gpio.cc2
3 files changed, 22 insertions, 3 deletions
diff --git a/src/arch/esp8266/Makefile.inc b/src/arch/esp8266/Makefile.inc
index 3f7f9ff..b0fc4ce 100644
--- a/src/arch/esp8266/Makefile.inc
+++ b/src/arch/esp8266/Makefile.inc
@@ -11,7 +11,7 @@ AR = ${TOOLCHAIN_BASE}/xtensa-lx106-elf-ar
LD = ${TOOLCHAIN_BASE}/xtensa-lx106-elf-gcc
INCLUDES += -Iinclude/esp8266 -I${SDK_BASE}/include
-COMMON_FLAGS += -nostdlib -mlongcalls
+COMMON_FLAGS += -nostdlib -mlongcalls -D__ets__ -DICACHE_FLASH
CXXFLAGS = -std=c++11
LDFLAGS += -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static
diff --git a/src/arch/esp8266/arch.cc b/src/arch/esp8266/arch.cc
index 634cf40..3542423 100644
--- a/src/arch/esp8266/arch.cc
+++ b/src/arch/esp8266/arch.cc
@@ -7,15 +7,34 @@ extern "C" {
#include "user_interface.h"
#include "gpio.h"
#include "mem.h"
+void ets_timer_arm_new(os_timer_t *ptimer, uint32_t milliseconds, bool repeat_flag, bool us_flag);
+void ets_timer_disarm(os_timer_t *ptimer);
+void ets_timer_setfn(os_timer_t *ptimer, os_timer_func_t *pfunction, void *parg);
}
#define user_procTaskPrio 0
#define user_procTaskQueueLen 1
+#ifdef WITH_LOOP
+LOCAL os_timer_t loop_timer;
+
+extern void loop(void);
+static void ICACHE_FLASH_ATTR jump_to_loop(void *arg)
+{
+ loop();
+}
+
+#endif
+
extern int main(void);
-static void ICACHE_FLASH_ATTR jump_to_main(void)
+void ICACHE_FLASH_ATTR jump_to_main(void)
{
+#ifdef WITH_LOOP
+ os_timer_disarm(&loop_timer);
+ os_timer_setfn(&loop_timer, (os_timer_func_t *)jump_to_loop, (void *)0);
+ os_timer_arm(&loop_timer, 1000, 1);
+#endif
main();
}
diff --git a/src/arch/esp8266/driver/gpio.cc b/src/arch/esp8266/driver/gpio.cc
index bc236a9..6e995fc 100644
--- a/src/arch/esp8266/driver/gpio.cc
+++ b/src/arch/esp8266/driver/gpio.cc
@@ -30,7 +30,7 @@ void ICACHE_FLASH_ATTR GPIO::led_off(unsigned char id)
void ICACHE_FLASH_ATTR GPIO::led_toggle(unsigned char id)
{
- if (GPIO_REG_READ(GPIO_OUT_ADDRESS) & BIT2) {
+ if (gpio_input_get() & BIT2) {
led_on(0);
} else {
led_off(0);