aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Bradley <wmb@firmworks.com>2017-05-22 18:22:45 -1000
committerMitch Bradley <wmb@firmworks.com>2017-05-22 18:22:45 -1000
commitaa2d4175e37cd6d343594697d59f357e7269124e (patch)
treea0f67d178bf21146b924028776b32885799f04d1
parentf31bb675a12463f05d9ae5306e69f933233d40e9 (diff)
downloadcforth-aa2d4175e37cd6d343594697d59f357e7269124e.tar.gz
esp32 - added gpio functions
-rw-r--r--build/esp32/sdk_build/main/interface.c45
-rw-r--r--src/app/esp32/interface.h17
-rw-r--r--src/app/esp32/textend.c12
3 files changed, 73 insertions, 1 deletions
diff --git a/build/esp32/sdk_build/main/interface.c b/build/esp32/sdk_build/main/interface.c
index 4c46ad3..522bf68 100644
--- a/build/esp32/sdk_build/main/interface.c
+++ b/build/esp32/sdk_build/main/interface.c
@@ -184,3 +184,48 @@ cell i2c_le_ww(cell slave, cell reg, cell value)
uint8_t buf[3] = {reg, value & 0xff, value >> 8};
return i2c_write_read(0, slave, 0, 0, 3, buf);
}
+
+#include <driver/gpio.h>
+cell gpio_pin_fetch(cell gpio_num)
+{
+ return gpio_get_level(gpio_num) ? -1 : 0;
+}
+
+void gpio_pin_store(cell gpio_num, cell level)
+{
+ gpio_set_level(gpio_num, level);
+}
+
+void gpio_toggle(cell gpio_num)
+{
+ int level = gpio_get_level(gpio_num);
+ gpio_set_level(gpio_num, !level);
+}
+
+void gpio_is_output(cell gpio_num)
+{
+ gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT);
+}
+
+void gpio_is_output_od(cell gpio_num)
+{
+ gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT_OD);
+}
+
+void gpio_is_input(cell gpio_num)
+{
+ gpio_set_pull_mode(gpio_num, GPIO_FLOATING);
+ gpio_set_direction(gpio_num, GPIO_MODE_INPUT);
+}
+
+void gpio_is_input_pu(cell gpio_num)
+{
+ gpio_set_pull_mode(gpio_num, GPIO_PULLUP_ONLY);
+ gpio_set_direction(gpio_num, GPIO_MODE_INPUT);
+}
+
+void gpio_is_input_pd(cell gpio_num)
+{
+ gpio_set_pull_mode(gpio_num, GPIO_PULLDOWN_ONLY);
+ gpio_set_direction(gpio_num, GPIO_MODE_INPUT);
+}
diff --git a/src/app/esp32/interface.h b/src/app/esp32/interface.h
new file mode 100644
index 0000000..35bfa25
--- /dev/null
+++ b/src/app/esp32/interface.h
@@ -0,0 +1,17 @@
+cell i2c_open(uint8_t sda, uint8_t scl);
+void i2c_close();
+int i2c_write_read(uint8_t stop, uint8_t slave, uint8_t rsize, uint8_t *rbuf, uint8_t wsize, uint8_t *wbuf);
+cell i2c_rb(int stop, int slave, int reg);
+cell i2c_be_rw(cell stop, cell slave, cell reg);
+cell i2c_le_rw(cell stop, cell slave, cell reg);
+cell i2c_wb(cell slave, cell reg, cell value);
+cell i2c_be_ww(cell slave, cell reg, cell value);
+cell i2c_le_ww(cell slave, cell reg, cell value);
+cell gpio_pin_fetch(cell gpio_num);
+void gpio_pin_store(cell gpio_num, cell level);
+void gpio_toggle(cell gpio_num);
+void gpio_is_output(cell gpio_num);
+void gpio_is_output_od(cell gpio_num);
+void gpio_is_input(cell gpio_num);
+void gpio_is_input_pu(cell gpio_num);
+void gpio_is_input_pd(cell gpio_num);
diff --git a/src/app/esp32/textend.c b/src/app/esp32/textend.c
index 6c28f04..c165506 100644
--- a/src/app/esp32/textend.c
+++ b/src/app/esp32/textend.c
@@ -2,7 +2,8 @@
// See "ccalls" below.
#include "forth.h"
-#include "i2c-ifce.h"
+//#include "i2c-ifce.h"
+#include "interface.h"
extern cell *callback_up;
@@ -58,4 +59,13 @@ cell ((* const ccalls[])()) = {
C(i2c_le_rw) //c i2c-le-w@ { i.reg i.slave i.stop -- i.w }
C(i2c_be_ww) //c i2c-be-w! { i.value i.reg i.slave -- i.error? }
C(i2c_le_ww) //c i2c-le-w! { i.value i.reg i.slave -- i.error? }
+
+ C(gpio_pin_fetch) //c gpio-pin@ { i.gpio# -- i.flag }
+ C(gpio_pin_store) //c gpio-pin! { i.level i.gpio# -- }
+ C(gpio_toggle) //c gpio-toggle { i.gpio# -- }
+ C(gpio_is_output) //c gpio-is-output { i.gpio# -- }
+ C(gpio_is_output_od) //c gpio-is-output-open-drain { i.gpio# -- }
+ C(gpio_is_input) //c gpio-is-input { i.gpio# -- }
+ C(gpio_is_input_pu) //c gpio-is-input-pullup { i.gpio# -- }
+ C(gpio_is_input_pd) //c gpio-is-input-pulldown { i.gpio# -- }
};