Fixed up interrupts.

This commit is contained in:
Brad Nelson
2021-03-29 11:57:57 -07:00
parent 9f62c3b99e
commit 00e0a36331
3 changed files with 127 additions and 2 deletions

View File

@ -164,9 +164,31 @@
# include "esp_intr_alloc.h" # include "esp_intr_alloc.h"
# include "driver/gpio.h" # include "driver/gpio.h"
# define OPTIONAL_INTERRUPTS_SUPPORT \ # 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_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_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_alloc, n0 = EspIntrAlloc(n4, n3, n2, n1, a0); NIPn(4)) \
Y(esp_intr_free, n0 = esp_intr_free((intr_handle_t) n0)) Y(esp_intr_free, n0 = esp_intr_free((intr_handle_t) n0))
#endif #endif

View File

@ -88,10 +88,37 @@ forth definitions
vocabulary interrupts interrupts definitions vocabulary interrupts interrupts definitions
transfer{ 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 esp_intr_alloc esp_intr_free
}transfer }transfer
0 constant ESP_INTR_FLAG_DEFAULT 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 forth definitions
vocabulary rtos rtos definitions vocabulary rtos rtos definitions

View File

@ -285,6 +285,82 @@ SD_MMC.totalBytes ( -- n )
SD_MMC.usedBytes ( -- n ) SD_MMC.usedBytes ( -- n )
</pre> </pre>
<h5 id="interrupts">Interrupts</h5>
These words are inside the <code>INTERRUPTS</code> vocabulary.
<p>High Level words:</p>
<pre>
pinchange ( xt pin -- ) Call xt when pin changes.
</pre>
<p>Example:</p>
<pre>
: test ." pinvalue: " 17 digitalRead . cr ;
' test 17 pinchange
</pre>
<p>Low Level words:</p>
<pre>
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 )
</pre>
<h5>RTOS</h5>
These words are inside the <code>RTOS</code> vocabulary.
<pre>
xPortGetCoreID ( -- n )
xTaskCreatePinnedToCore ( fn name stack-depth params priority taskout coreid -- )
vTaskDelete ( task ) -- )
</pre>
<h3 id="webui">ESP32 WebUI</h3> <h3 id="webui">ESP32 WebUI</h3>
<p> <p>