diff options
author | Mitch Bradley <wmb@firmworks.com> | 2017-05-22 18:22:45 -1000 |
---|---|---|
committer | Mitch Bradley <wmb@firmworks.com> | 2017-05-22 18:22:45 -1000 |
commit | aa2d4175e37cd6d343594697d59f357e7269124e (patch) | |
tree | a0f67d178bf21146b924028776b32885799f04d1 | |
parent | f31bb675a12463f05d9ae5306e69f933233d40e9 (diff) | |
download | cforth-aa2d4175e37cd6d343594697d59f357e7269124e.tar.gz |
esp32 - added gpio functions
-rw-r--r-- | build/esp32/sdk_build/main/interface.c | 45 | ||||
-rw-r--r-- | src/app/esp32/interface.h | 17 | ||||
-rw-r--r-- | src/app/esp32/textend.c | 12 |
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# -- } }; |