diff --git a/ueforth/arduino/arduino.template.ino b/ueforth/arduino/arduino.template.ino index ec3bd8d..a603303 100644 --- a/ueforth/arduino/arduino.template.ino +++ b/ueforth/arduino/arduino.template.ino @@ -164,9 +164,31 @@ # include "esp_intr_alloc.h" # include "driver/gpio.h" # define OPTIONAL_INTERRUPTS_SUPPORT \ + Y(gpio_config, n0 = gpio_config((const gpio_config_t *) a0)) \ + Y(gpio_reset_pin, n0 = gpio_reset_pin((gpio_num_t) n0)) \ + Y(gpio_set_intr_type, n0 = gpio_set_intr_type((gpio_num_t) n1, (gpio_int_type_t) n0); NIP) \ + Y(gpio_intr_enable, n0 = gpio_intr_enable((gpio_num_t) n0)) \ + Y(gpio_intr_disable, n0 = gpio_intr_disable((gpio_num_t) n0)) \ + Y(gpio_set_level, n0 = gpio_set_level((gpio_num_t) n1, n0); NIP) \ + Y(gpio_get_level, n0 = gpio_get_level((gpio_num_t) n0)) \ + Y(gpio_set_direction, n0 = gpio_set_direction((gpio_num_t) n1, (gpio_mode_t) n0); NIP) \ + Y(gpio_set_pull_mode, n0 = gpio_set_pull_mode((gpio_num_t) n1, (gpio_pull_mode_t) n0); NIP) \ + Y(gpio_wakeup_enable, n0 = gpio_wakeup_enable((gpio_num_t) n1, (gpio_int_type_t) n0); NIP) \ + Y(gpio_wakeup_disable, n0 = gpio_wakeup_disable((gpio_num_t) n0)) \ + Y(gpio_pullup_en, n0 = gpio_pullup_en((gpio_num_t) n0)) \ + Y(gpio_pullup_dis, n0 = gpio_pullup_dis((gpio_num_t) n0)) \ + Y(gpio_pulldown_en, n0 = gpio_pulldown_en((gpio_num_t) n0)) \ + Y(gpio_pulldown_dis, n0 = gpio_pulldown_dis((gpio_num_t) n0)) \ + Y(gpio_hold_en, n0 = gpio_hold_en((gpio_num_t) n0)) \ + Y(gpio_hold_dis, n0 = gpio_hold_dis((gpio_num_t) n0)) \ + Y(gpio_deep_sleep_hold_en, gpio_deep_sleep_hold_en()) \ + Y(gpio_deep_sleep_hold_dis, gpio_deep_sleep_hold_dis()) \ + Y(gpio_install_isr_service, n0 = gpio_install_isr_service(n0)) \ + Y(gpio_uninstall_isr_service, gpio_uninstall_isr_service()) \ Y(gpio_isr_handler_add, n0 = GpioIsrHandlerAdd((gpio_num_t) n2, n1, n0); NIPn(2)) \ Y(gpio_isr_handler_remove, n0 = gpio_isr_handler_remove((gpio_num_t) n0)) \ - Y(gpio_install_isr_service, n0 = gpio_install_isr_service(n0)) \ + Y(gpio_set_drive_capability, n0 = gpio_set_drive_capability((gpio_num_t) n1, (gpio_drive_cap_t) n0); NIP) \ + Y(gpio_get_drive_capability, n0 = gpio_get_drive_capability((gpio_num_t) n1, (gpio_drive_cap_t *) a0); NIP) \ Y(esp_intr_alloc, n0 = EspIntrAlloc(n4, n3, n2, n1, a0); NIPn(4)) \ Y(esp_intr_free, n0 = esp_intr_free((intr_handle_t) n0)) #endif diff --git a/ueforth/arduino/bindings.fs b/ueforth/arduino/bindings.fs index d6eb3ff..87f9eac 100644 --- a/ueforth/arduino/bindings.fs +++ b/ueforth/arduino/bindings.fs @@ -88,10 +88,37 @@ forth definitions vocabulary interrupts interrupts definitions transfer{ - gpio_isr_handler_add gpio_isr_handler_remove gpio_install_isr_service + gpio_config + gpio_reset_pin gpio_set_intr_type + gpio_intr_enable gpio_intr_disable + gpio_set_level gpio_get_level + gpio_set_direction + gpio_set_pull_mode + gpio_wakeup_enable gpio_wakeup_disable + gpio_pullup_en gpio_pullup_dis + gpio_pulldown_en gpio_pulldown_dis + gpio_hold_en gpio_hold_dis + gpio_deep_sleep_hold_en gpio_deep_sleep_hold_dis + gpio_install_isr_service gpio_uninstall_isr_service + gpio_isr_handler_add gpio_isr_handler_remove + gpio_set_drive_capability gpio_get_drive_capability esp_intr_alloc esp_intr_free }transfer + 0 constant ESP_INTR_FLAG_DEFAULT + +0 constant GPIO_INTR_DISABLE +1 constant GPIO_INTR_POSEDGE +2 constant GPIO_INTR_NEGEDGE +3 constant GPIO_INTR_ANYEDGE +4 constant GPIO_INTR_LOW_LEVEL +5 constant GPIO_INTR_HIGH_LEVEL + +( Easy word to trigger on any change to a pin ) +ESP_INTR_FLAG_DEFAULT gpio_install_isr_service drop +: pinchange ( xt pin ) dup GPIO_INTR_ANYEDGE gpio_set_intr_type throw + swap 0 gpio_isr_handler_add throw ; + forth definitions vocabulary rtos rtos definitions diff --git a/ueforth/site/ESP32forth.html b/ueforth/site/ESP32forth.html index 00edc3d..98f4bd4 100644 --- a/ueforth/site/ESP32forth.html +++ b/ueforth/site/ESP32forth.html @@ -285,6 +285,82 @@ SD_MMC.totalBytes ( -- n ) SD_MMC.usedBytes ( -- n ) +
INTERRUPTS vocabulary.
+
+High Level words:
++pinchange ( xt pin -- ) Call xt when pin changes. ++ +
Example:
+ ++: test ." pinvalue: " 17 digitalRead . cr ; +' test 17 pinchange ++ +
Low Level words:
++ESP_INTR_FLAG_DEFAULT -- Default handler allows per pin routing + +Various triggers: + GPIO_INTR_DISABLE + GPIO_INTR_POSEDGE + GPIO_INTR_NEGEDGE + GPIO_INTR_ANYEDGE + GPIO_INTR_LOW_LEVEL + GPIO_INTR_HIGH_LEVEL + +gpio_config ( gpio_config_t* -- 0/err ) +gpio_reset_pin ( pin -- 0/err ) + +gpio_set_intr_type ( pin type -- 0/err ) + +gpio_intr_enable ( pin -- 0/err ) +gpio_intr_disable ( pin -- 0/err ) + +gpio_set_level ( pin level -- 0/err ) +gpio_get_level ( pin -- level ) + +gpio_set_direction ( pin mode -- 0/err ) + +gpio_set_pull_mode ( pin mode -- 0/err ) + +gpio_wakeup_enable ( pin type -- 0/err ) +gpio_wakeup_disable ( pin -- 0/err ) + +gpio_pullup_en ( pin -- 0/err ) +gpio_pullup_dis ( pin -- 0/err ) +gpio_pulldown_en ( pin -- 0/err ) +gpio_pulldown_dis ( pin -- 0/err ) +gpio_hold_en ( pin -- 0/err ) +gpio_hold_dis ( pin -- 0/err ) + +gpio_deep_sleep_hold_en ( -- ) +gpio_deep_sleep_hold_dis ( -- ) + +gpio_install_isr_service ( a -- ) Typically ESP_INTR_FLAG_DEFAULT +gpio_uninstall_isr_service + +gpio_isr_handler_add ( pin xt arg -- 0/err ) +gpio_isr_handler_remove ( pin -- 0/err ) + +gpio_set_drive_capability ( pin cap -- 0/err ) +gpio_get_drive_capability ( pin cap* -- 0/err ) + +esp_intr_alloc ( source flags xt args handle* -- 0/err ) +esp_intr_free ( handle -- 0/err ) ++ +
RTOS vocabulary.
++xPortGetCoreID ( -- n ) +xTaskCreatePinnedToCore ( fn name stack-depth params priority taskout coreid -- ) +vTaskDelete ( task ) -- ) ++