diff --git a/cores/esp32/Arduino.h b/cores/esp32/Arduino.h index 137177da..51315a5d 100644 --- a/cores/esp32/Arduino.h +++ b/cores/esp32/Arduino.h @@ -100,12 +100,20 @@ extern "C" { #define bitClear(value, bit) ((value) &= ~(1UL << (bit))) #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) +// avr-libc defines _NOP() since 1.6.2 +#ifndef _NOP +#define _NOP() do { __asm__ volatile ("nop"); } while (0) +#endif + +typedef unsigned int word; + #define bit(b) (1UL << (b)) #define _BV(b) (1UL << (b)) #define digitalPinToPort(pin) (((pin)>31)?1:0) -#define digitalPinToBitMask(pin) (1UL << (pin)) +#define digitalPinToBitMask(pin) (1UL << (((pin)>31)?((pin)-31):(pin))) #define digitalPinToTimer(pin) (0) +#define analogInPinToBit(P) (P) #define portOutputRegister(port) ((volatile uint32_t*)((port)?GPIO_OUT1_REG:GPIO_OUT_REG)) #define portInputRegister(port) ((volatile uint32_t*)((port)?GPIO_IN1_REG:GPIO_IN_REG)) #define portModeRegister(port) ((volatile uint32_t*)((port)?GPIO_ENABLE1_REG:GPIO_ENABLE_REG)) @@ -118,6 +126,13 @@ extern "C" { typedef bool boolean; typedef uint8_t byte; +void init(void); +void initVariant(void); +void initArduino(void); + +void setup(void); +void loop(void); + uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); diff --git a/cores/esp32/esp32-hal-gpio.c b/cores/esp32/esp32-hal-gpio.c index 7c79acae..2698d33f 100644 --- a/cores/esp32/esp32-hal-gpio.c +++ b/cores/esp32/esp32-hal-gpio.c @@ -26,6 +26,8 @@ #define ETS_GPIO_INUM 12 +const int8_t esp32_adc2gpio[20] = {36, -1, -1, 39, 32, 33, 34, 35, -1, -1, 4, 0, 2, 15, 13, 12, 14, 27, 25, 26}; + const DRAM_ATTR esp32_gpioMux_t esp32_gpioMux[GPIO_PIN_COUNT]={ {0x44, 11, 11, 1}, {0x88, -1, -1, -1}, diff --git a/cores/esp32/esp32-hal-gpio.h b/cores/esp32/esp32-hal-gpio.h index 06e3b2b8..b3ccc252 100644 --- a/cores/esp32/esp32-hal-gpio.h +++ b/cores/esp32/esp32-hal-gpio.h @@ -65,6 +65,7 @@ typedef struct { } esp32_gpioMux_t; extern const esp32_gpioMux_t esp32_gpioMux[40]; +extern const int8_t esp32_adc2gpio[20]; #define digitalPinIsValid(pin) ((pin) < 40 && esp32_gpioMux[(pin)].reg) #define digitalPinCanOutput(pin) ((pin) < 34 && esp32_gpioMux[(pin)].reg) diff --git a/cores/esp32/main.cpp b/cores/esp32/main.cpp index 1b9b2b7d..c2300b41 100644 --- a/cores/esp32/main.cpp +++ b/cores/esp32/main.cpp @@ -1,21 +1,13 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "esp32-hal.h" +#include "Arduino.h" #if CONFIG_AUTOSTART_ARDUINO -extern "C" void initArduino(); -extern void loop(); -extern void setup(); - void loopTask(void *pvParameters) { - bool setup_done = false; + setup(); for(;;) { - if(!setup_done) { - setup(); - setup_done = true; - } loop(); } } diff --git a/variants/esp32/pins_arduino.h b/variants/esp32/pins_arduino.h index c0c1d593..6485bc09 100644 --- a/variants/esp32/pins_arduino.h +++ b/variants/esp32/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/esp320/pins_arduino.h b/variants/esp320/pins_arduino.h index 1c76a59f..38839188 100644 --- a/variants/esp320/pins_arduino.h +++ b/variants/esp320/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 12 #define NUM_ANALOG_INPUTS 5 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/espea32/pins_arduino.h b/variants/espea32/pins_arduino.h index 628c2559..1dc827f2 100644 --- a/variants/espea32/pins_arduino.h +++ b/variants/espea32/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/lolin32/pins_arduino.h b/variants/lolin32/pins_arduino.h index 149cf2a0..a2f49094 100644 --- a/variants/lolin32/pins_arduino.h +++ b/variants/lolin32/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/nano32/pins_arduino.h b/variants/nano32/pins_arduino.h index f3f00cb1..83e1bcd0 100644 --- a/variants/nano32/pins_arduino.h +++ b/variants/nano32/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 38 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/node32s/pins_arduino.h b/variants/node32s/pins_arduino.h index c0c1d593..6485bc09 100644 --- a/variants/node32s/pins_arduino.h +++ b/variants/node32s/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34) diff --git a/variants/quantum/pins_arduino.h b/variants/quantum/pins_arduino.h index c0c1d593..6485bc09 100644 --- a/variants/quantum/pins_arduino.h +++ b/variants/quantum/pins_arduino.h @@ -5,7 +5,7 @@ #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 16 -#define analogInputToDigitalPin(p) +#define analogInputToDigitalPin(p) (((p)<20)?(esp32_adc2gpio[(p)]):-1) #define digitalPinToInterrupt(p) (((p)<40)?(p):-1) #define digitalPinHasPWM(p) (p < 34)