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
+These words are inside the 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
+These words are inside the RTOS vocabulary. +
+xPortGetCoreID ( -- n )
+xTaskCreatePinnedToCore ( fn name stack-depth params priority taskout coreid -- )
+vTaskDelete ( task ) -- ) 
+
+

ESP32 WebUI