Espruino/targets/esp32/docs/GPIOHandling.md
Juergen Marsch 278c67b871 Adding Documents
Added documents for
- GPIO handling
- tasks, interrupts, etc used for Espruino
2016-10-21 13:48:08 +02:00

2.5 KiB

GPIO

ESP32 has a lot of GPIOs and supports different protocols etc. In this document we focus on simple GPIO binary handling. Documents for SPI, Analog, PWM etc. will follow.

###Available GPIOs / pins### Even having GPIO named from 0 to 39, does not mean, we have all available. Some of them don't even exist, and only a few are available on DevkitC.

CPU pin GPIO Devkit C
5 36 X
6 37
7 38
8 39 X
10 34 X
11 35 X
12 32 X
13 33 X
14 25 X
15 26 X
16 27 X
17 14 X
18 12 X
20 13 X
21 15 X
22 2 X
23 0 X
24 4 X
25 16 X
27 17 X
28 9
29 10
30 11
31 6
32 7
33 8
34 5 X
35 18 X
36 23 X
38 19 X
39 22 X
40 32
41 10
42 21 X

###Binary I/O### Espruino/targets/esp32/jshardware.c is the main connection between Espruino Core and special sources to handle ESP32 specific commands. For simple GPIO handling we have to fill following functions. For more information/detailed please go to source

Function Description
jshPinSetState Set the state of the specific pin.
jshPinGetState return current State of pin
jshPinSetValue set the value of pin
jshPinGetValue get the value of pin

###Interrupts### For commands like setWatch fast response of changes on pin is a must. Fastest way is catching interrupts. Following functions will do this particular job

Function Description
in jshInit add a line to register GPIO interrupts (gpio_isr_register)
gpio_intr_test function to handle interrupts, calls jshPushIOWatchEvent for each changed pin that is enabled for interrupt
jshGetWatchedPinState Get the state of the pin associated with the event flag. Take care on parameter its IOEventFlags not pin
jshPinWatch Enables or disables interrupt for pin
jshIsEventForPin Determine if a given event is associated with a given pin

###General functions### Please have in mind, there are pins and IOEventFlags. Handling them is simple, we only have to add EV_EXTIO. There are some definitions in Espruino Core. In jshardware.c we handle it this way. May be in future we find a better way.

Function Description
pinToEV_EXTI maps a pin to an event
maping an event to a pin is done by subtracting EV_EXTI0 from IOEventFlag
pinToESP32Pin converts a number to a gpio_num_t