From 07f43ec91cf6d6e185850a839db8229557bdc2d0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 17 Sep 2022 22:12:12 +0200 Subject: [PATCH] Remove shit quality adc code --- CMakeLists.txt | 5 +- cores/esp32/esp32-hal-adc.c | 281 ----------------------------- cores/esp32/esp32-hal-adc.h | 105 ----------- cores/esp32/esp32-hal-cpu.c | 10 +- cores/esp32/esp32-hal-dac.c | 2 +- cores/esp32/esp32-hal-i2c.c | 10 +- cores/esp32/esp32-hal-sigmadelta.c | 133 -------------- cores/esp32/esp32-hal-sigmadelta.h | 37 ---- cores/esp32/esp32-hal-touch.c | 229 ----------------------- cores/esp32/esp32-hal-touch.h | 56 ------ libraries/Wire/src/Wire.cpp | 2 +- 11 files changed, 13 insertions(+), 857 deletions(-) delete mode 100644 cores/esp32/esp32-hal-adc.c delete mode 100644 cores/esp32/esp32-hal-adc.h delete mode 100644 cores/esp32/esp32-hal-sigmadelta.c delete mode 100644 cores/esp32/esp32-hal-sigmadelta.h delete mode 100644 cores/esp32/esp32-hal-touch.c delete mode 100644 cores/esp32/esp32-hal-touch.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 775ca272..fae7a5a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,4 @@ set(CORE_SRCS - cores/esp32/esp32-hal-adc.c cores/esp32/esp32-hal-cpu.c cores/esp32/esp32-hal-dac.c cores/esp32/esp32-hal-gpio.c @@ -8,10 +7,8 @@ set(CORE_SRCS cores/esp32/esp32-hal-matrix.c cores/esp32/esp32-hal-misc.c cores/esp32/esp32-hal-psram.c - cores/esp32/esp32-hal-sigmadelta.c cores/esp32/esp32-hal-spi.c cores/esp32/esp32-hal-tinyusb.c - cores/esp32/esp32-hal-touch.c cores/esp32/esp32-hal-rmt.c cores/esp32/FunctionalInterrupt.cpp cores/esp32/stdlib_noniso.c @@ -36,7 +33,7 @@ set(includedirs ) set(srcs ${CORE_SRCS} ${LIBRARY_SRCS} ${BLE_SRCS}) -set(requires spi_flash mbedtls esp_adc_cal wifi_provisioning) +set(requires spi_flash mbedtls wifi_provisioning driver) set(priv_requires nvs_flash bootloader_support tinyusb espcpputils fmt) idf_component_register(INCLUDE_DIRS ${includedirs} PRIV_INCLUDE_DIRS ${priv_includes} SRCS ${srcs} REQUIRES ${requires} PRIV_REQUIRES ${priv_requires}) diff --git a/cores/esp32/esp32-hal-adc.c b/cores/esp32/esp32-hal-adc.c deleted file mode 100644 index 382e328c..00000000 --- a/cores/esp32/esp32-hal-adc.c +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "esp32-hal-adc.h" -#include "esp32-hal-log.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "esp_attr.h" -#include "soc/rtc_io_reg.h" -#include "soc/rtc_cntl_reg.h" -#include "soc/sens_reg.h" - -#include "driver/adc.h" - -#include "esp_system.h" -#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "esp_adc_cal.h" -#include "esp32/rom/ets_sys.h" -#include "esp_intr_alloc.h" -#define DEFAULT_VREF 1100 -static esp_adc_cal_characteristics_t *__analogCharacteristics[2] = {NULL, NULL}; -static uint16_t __analogVRef = 0; -static uint8_t __analogVRefPin = 0; -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/rom/ets_sys.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "rom/ets_sys.h" -#include "esp_intr.h" -#endif -#include "esp32-hal-gpio.h" - -static uint8_t __analogAttenuation = 3;//11db -static uint8_t __analogWidth = 3;//12 bits -static uint8_t __analogClockDiv = 1; - -void __analogSetClockDiv(uint8_t clockDiv){ - if(!clockDiv){ - clockDiv = 1; - } - __analogClockDiv = clockDiv; - adc_set_clk_div(__analogClockDiv); -} - -void __analogSetAttenuation(adc_attenuation_t attenuation) -{ - __analogAttenuation = attenuation & 3; -} - -#if CONFIG_IDF_TARGET_ESP32 -void __analogSetWidth(uint8_t bits){ - if(bits < 9){ - bits = 9; - } else if(bits > 12){ - bits = 12; - } - __analogWidth = bits - 9; - adc1_config_width(__analogWidth); -} -#endif - -void __analogInit(){ - static bool initialized = false; - if(initialized){ - return; - } - initialized = true; - __analogSetClockDiv(__analogClockDiv); -#if CONFIG_IDF_TARGET_ESP32 - __analogSetWidth(__analogWidth + 9);//in bits -#endif -} - -void __analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation) -{ - int8_t channel = digitalPinToAnalogChannel(pin); - if(channel < 0 || attenuation > 3){ - return ; - } - if(channel > 9){ - adc2_config_channel_atten(channel - 10, attenuation); - } else { - adc1_config_channel_atten(channel, attenuation); - } - __analogInit(); -} - -bool __adcAttachPin(uint8_t pin){ - int8_t channel = digitalPinToAnalogChannel(pin); - if(channel < 0){ - log_e("Pin %u is not ADC pin!", pin); - return false; - } - int8_t pad = digitalPinToTouchChannel(pin); - if(pad >= 0){ -#if CONFIG_IDF_TARGET_ESP32 - uint32_t touch = READ_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG); - if(touch & (1 << pad)){ - touch &= ~((1 << (pad + SENS_TOUCH_PAD_OUTEN2_S)) - | (1 << (pad + SENS_TOUCH_PAD_OUTEN1_S)) - | (1 << (pad + SENS_TOUCH_PAD_WORKEN_S))); - WRITE_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG, touch); - } -#endif - } else if(pin == 25){ - CLEAR_PERI_REG_MASK(RTC_IO_PAD_DAC1_REG, RTC_IO_PDAC1_XPD_DAC | RTC_IO_PDAC1_DAC_XPD_FORCE);//stop dac1 - } else if(pin == 26){ - CLEAR_PERI_REG_MASK(RTC_IO_PAD_DAC2_REG, RTC_IO_PDAC2_XPD_DAC | RTC_IO_PDAC2_DAC_XPD_FORCE);//stop dac2 - } - - pinMode(pin, ANALOG); - __analogSetPinAttenuation(pin, __analogAttenuation); - return true; -} - -void __analogReadResolution(uint8_t bits) -{ - if(!bits || bits > 16){ - return; - } -#if CONFIG_IDF_TARGET_ESP32 - __analogSetWidth(bits); // hadware from 9 to 12 -#endif -} - -uint16_t __analogRead(uint8_t pin) -{ - int8_t channel = digitalPinToAnalogChannel(pin); - int value = 0; - esp_err_t r = ESP_OK; - if(channel < 0){ - log_e("Pin %u is not ADC pin!", pin); - return value; - } - __adcAttachPin(pin); - if(channel > 9){ - channel -= 10; - r = adc2_get_raw( channel, __analogWidth, &value); - if ( r == ESP_OK ) { - return value; - } else if ( r == ESP_ERR_INVALID_STATE ) { - log_e("GPIO%u: %s: ADC2 not initialized yet.", pin, esp_err_to_name(r)); - } else if ( r == ESP_ERR_TIMEOUT ) { - log_e("GPIO%u: %s: ADC2 is in use by Wi-Fi.", pin, esp_err_to_name(r)); - } else { - log_e("GPIO%u: %s", pin, esp_err_to_name(r)); - } - } else { - return adc1_get_raw(channel); - } - return value; -} - -uint32_t __analogReadMilliVolts(uint8_t pin){ - int8_t channel = digitalPinToAnalogChannel(pin); - if(channel < 0){ - log_e("Pin %u is not ADC pin!", pin); - return 0; - } -#if CONFIG_IDF_TARGET_ESP32 - if(!__analogVRef){ - if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP) == ESP_OK) { - log_d("eFuse Two Point: Supported"); - __analogVRef = DEFAULT_VREF; - } - if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_VREF) == ESP_OK) { - log_d("eFuse Vref: Supported"); - __analogVRef = DEFAULT_VREF; - } - if(!__analogVRef){ - __analogVRef = DEFAULT_VREF; - if(__analogVRefPin){ - esp_adc_cal_characteristics_t chars; - if(adc_vref_to_gpio(ADC_UNIT_2, __analogVRefPin) == ESP_OK){ - __analogVRef = __analogRead(__analogVRefPin); - esp_adc_cal_characterize(1, __analogAttenuation, __analogWidth, DEFAULT_VREF, &chars); - __analogVRef = esp_adc_cal_raw_to_voltage(__analogVRef, &chars); - log_d("Vref to GPIO%u: %u", __analogVRefPin, __analogVRef); - } - } - } - } - uint8_t unit = 1; - if(channel > 9){ - unit = 2; - } - uint16_t adc_reading = __analogRead(pin); - if(__analogCharacteristics[unit - 1] == NULL){ - __analogCharacteristics[unit - 1] = calloc(1, sizeof(esp_adc_cal_characteristics_t)); - if(__analogCharacteristics[unit - 1] == NULL){ - return 0; - } - esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, __analogAttenuation, __analogWidth, __analogVRef, __analogCharacteristics[unit - 1]); - if (val_type == ESP_ADC_CAL_VAL_EFUSE_TP) { - log_i("ADC%u: Characterized using Two Point Value: %u\n", unit, __analogCharacteristics[unit - 1]->vref); - } else if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) { - log_i("ADC%u: Characterized using eFuse Vref: %u\n", unit, __analogCharacteristics[unit - 1]->vref); - } else if(__analogVRef != DEFAULT_VREF){ - log_i("ADC%u: Characterized using Vref to GPIO%u: %u\n", unit, __analogVRefPin, __analogCharacteristics[unit - 1]->vref); - } else { - log_i("ADC%u: Characterized using Default Vref: %u\n", unit, __analogCharacteristics[unit - 1]->vref); - } - } - return esp_adc_cal_raw_to_voltage(adc_reading, __analogCharacteristics[unit - 1]); -#else - uint16_t adc_reading = __analogRead(pin); - uint16_t max_reading = 8191; - uint16_t max_mv = 1100; - switch(__analogAttenuation){ - case 3: max_mv = 3900; break; - case 2: max_mv = 2200; break; - case 1: max_mv = 1500; break; - default: break; - } - return (adc_reading * max_mv) / max_reading; -#endif -} - -#if CONFIG_IDF_TARGET_ESP32 - -void __analogSetVRefPin(uint8_t pin){ - if(pin <25 || pin > 27){ - pin = 0; - } - __analogVRefPin = pin; -} - -int __hallRead() //hall sensor without LNA -{ - int Sens_Vp0; - int Sens_Vn0; - int Sens_Vp1; - int Sens_Vn1; - - pinMode(36, ANALOG); - pinMode(39, ANALOG); - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_XPD_HALL_FORCE_M); // hall sens force enable - SET_PERI_REG_MASK(RTC_IO_HALL_SENS_REG, RTC_IO_XPD_HALL); // xpd hall - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_HALL_PHASE_FORCE_M); // phase force - CLEAR_PERI_REG_MASK(RTC_IO_HALL_SENS_REG, RTC_IO_HALL_PHASE); // hall phase - Sens_Vp0 = __analogRead(36); - Sens_Vn0 = __analogRead(39); - SET_PERI_REG_MASK(RTC_IO_HALL_SENS_REG, RTC_IO_HALL_PHASE); - Sens_Vp1 = __analogRead(36); - Sens_Vn1 = __analogRead(39); - SET_PERI_REG_BITS(SENS_SAR_MEAS_WAIT2_REG, SENS_FORCE_XPD_SAR, 0, SENS_FORCE_XPD_SAR_S); - CLEAR_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_XPD_HALL_FORCE); - CLEAR_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_HALL_PHASE_FORCE); - return (Sens_Vp1 - Sens_Vp0) - (Sens_Vn1 - Sens_Vn0); -} -#endif - -extern uint16_t analogRead(uint8_t pin) __attribute__ ((weak, alias("__analogRead"))); -extern uint32_t analogReadMilliVolts(uint8_t pin) __attribute__ ((weak, alias("__analogReadMilliVolts"))); -extern void analogReadResolution(uint8_t bits) __attribute__ ((weak, alias("__analogReadResolution"))); -extern void analogSetClockDiv(uint8_t clockDiv) __attribute__ ((weak, alias("__analogSetClockDiv"))); -extern void analogSetAttenuation(adc_attenuation_t attenuation) __attribute__ ((weak, alias("__analogSetAttenuation"))); -extern void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation) __attribute__ ((weak, alias("__analogSetPinAttenuation"))); - -extern bool adcAttachPin(uint8_t pin) __attribute__ ((weak, alias("__adcAttachPin"))); - -#if CONFIG_IDF_TARGET_ESP32 -extern void analogSetVRefPin(uint8_t pin) __attribute__ ((weak, alias("__analogSetVRefPin"))); -extern void analogSetWidth(uint8_t bits) __attribute__ ((weak, alias("__analogSetWidth"))); -extern int hallRead() __attribute__ ((weak, alias("__hallRead"))); -#endif - diff --git a/cores/esp32/esp32-hal-adc.h b/cores/esp32/esp32-hal-adc.h deleted file mode 100644 index 46963c8d..00000000 --- a/cores/esp32/esp32-hal-adc.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - Arduino.h - Main include file for the Arduino SDK - Copyright (c) 2005-2013 Arduino Team. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef MAIN_ESP32_HAL_ADC_H_ -#define MAIN_ESP32_HAL_ADC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -//#include "esp32-hal.h" - -typedef enum { - ADC_0db, - ADC_2_5db, - ADC_6db, - ADC_11db -} adc_attenuation_t; - -/* - * Get ADC value for pin - * */ -uint16_t analogRead(uint8_t pin); - -/* - * Get MilliVolts value for pin - * */ -uint32_t analogReadMilliVolts(uint8_t pin); - -/* - * Set the resolution of analogRead return values. Default is 12 bits (range from 0 to 4096). - * If between 9 and 12, it will equal the set hardware resolution, else value will be shifted. - * Range is 1 - 16 - * - * Note: compatibility with Arduino SAM - */ -void analogReadResolution(uint8_t bits); - -/* - * Set the divider for the ADC clock. - * Default is 1 - * Range is 1 - 255 - * */ -void analogSetClockDiv(uint8_t clockDiv); - -/* - * Set the attenuation for all channels - * Default is 11db - * */ -void analogSetAttenuation(adc_attenuation_t attenuation); - -/* - * Set the attenuation for particular pin - * Default is 11db - * */ -void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation); - -/* - * Attach pin to ADC (will also clear any other analog mode that could be on) - * */ -bool adcAttachPin(uint8_t pin); - -#if CONFIG_IDF_TARGET_ESP32 -/* - * Sets the sample bits and read resolution - * Default is 12bit (0 - 4095) - * Range is 9 - 12 - * */ -void analogSetWidth(uint8_t bits); - -/* - * Set pin to use for ADC calibration if the esp is not already calibrated (25, 26 or 27) - * */ -void analogSetVRefPin(uint8_t pin); - -/* - * Get value for HALL sensor (without LNA) - * connected to pins 36(SVP) and 39(SVN) - * */ -int hallRead(); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* MAIN_ESP32_HAL_ADC_H_ */ diff --git a/cores/esp32/esp32-hal-cpu.c b/cores/esp32/esp32-hal-cpu.c index c599d60c..a5835cff 100644 --- a/cores/esp32/esp32-hal-cpu.c +++ b/cores/esp32/esp32-hal-cpu.c @@ -159,20 +159,20 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz){ if(xtal > RTC_XTAL_FREQ_AUTO){ if(xtal < RTC_XTAL_FREQ_40M) { if(cpu_freq_mhz <= xtal && cpu_freq_mhz != xtal && cpu_freq_mhz != (xtal/2)){ - log_e("Bad frequency: %u MHz! Options are: 240, 160, 80, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2); + log_e("Bad frequency: %lu MHz! Options are: 240, 160, 80, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2); return false; } } else if(cpu_freq_mhz <= xtal && cpu_freq_mhz != xtal && cpu_freq_mhz != (xtal/2) && cpu_freq_mhz != (xtal/4)){ - log_e("Bad frequency: %u MHz! Options are: 240, 160, 80, %u, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2, xtal/4); + log_e("Bad frequency: %lu MHz! Options are: 240, 160, 80, %u, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2, xtal/4); return false; } } #endif if(cpu_freq_mhz > xtal && cpu_freq_mhz != 240 && cpu_freq_mhz != 160 && cpu_freq_mhz != 80){ if(xtal >= RTC_XTAL_FREQ_40M){ - log_e("Bad frequency: %u MHz! Options are: 240, 160, 80, %u, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2, xtal/4); + log_e("Bad frequency: %lu MHz! Options are: 240, 160, 80, %u, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2, xtal/4); } else { - log_e("Bad frequency: %u MHz! Options are: 240, 160, 80, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2); + log_e("Bad frequency: %lu MHz! Options are: 240, 160, 80, %u and %u MHz", cpu_freq_mhz, xtal, xtal/2); } return false; } @@ -195,7 +195,7 @@ bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz){ } //Get configuration for the new CPU frequency if(!rtc_clk_cpu_freq_mhz_to_config(cpu_freq_mhz, &conf)){ - log_e("CPU clock could not be set to %u MHz", cpu_freq_mhz); + log_e("CPU clock could not be set to %lu MHz", cpu_freq_mhz); return false; } //Current APB diff --git a/cores/esp32/esp32-hal-dac.c b/cores/esp32/esp32-hal-dac.c index 126748ed..19fd2f64 100644 --- a/cores/esp32/esp32-hal-dac.c +++ b/cores/esp32/esp32-hal-dac.c @@ -19,7 +19,7 @@ #include "soc/rtc_io_periph.h" #include "soc/sens_reg.h" #include "soc/sens_struct.h" -#include "driver/dac.h" +//#include "driver/dac.h" #include "esp32-hal-gpio.h" #if CONFIG_IDF_TARGET_ESP32 diff --git a/cores/esp32/esp32-hal-i2c.c b/cores/esp32/esp32-hal-i2c.c index eac951d0..52b9e001 100644 --- a/cores/esp32/esp32-hal-i2c.c +++ b/cores/esp32/esp32-hal-i2c.c @@ -479,7 +479,7 @@ static void i2cApbChangeCallback(void * arg, apb_change_ev_t ev_type, uint32_t o switch(ev_type){ case APB_BEFORE_CHANGE : if(new_apb < 3000000) {// too slow - log_e("apb speed %d too slow",new_apb); + log_e("apb speed %lu too slow",new_apb); break; } I2C_MUTEX_LOCK(); // lock will spin until current transaction is completed @@ -779,7 +779,7 @@ static void ARDUINO_ISR_ATTR emptyRxFifo(i2c_t * i2c) } if(i2c->queuePos >= i2c->queueCount){ // bad stuff, rx data but no place to put it! - log_e("no Storage location for %d",moveCnt); + log_e("no Storage location for %lu",moveCnt); // discard while(moveCnt>0){ d = i2c->dev->fifo_data.val; @@ -795,7 +795,7 @@ static void ARDUINO_ISR_ATTR emptyRxFifo(i2c_t * i2c) moveCnt = (tdq->length - tdq->position); } } else {// error - log_e("RxEmpty(%d) call on TxBuffer? dq=%d",moveCnt,i2c->queuePos); + log_e("RxEmpty(%4lu) call on TxBuffer? dq=%d",moveCnt,i2c->queuePos); // discard while(moveCnt>0){ d = i2c->dev->fifo_data.val; @@ -1032,7 +1032,7 @@ static void ARDUINO_ISR_ATTR i2c_isr_handler_default(void* arg) if(activeInt) { // clear unhandled if possible? What about Disabling interrupt? p_i2c->dev->int_clr.val = activeInt; - log_e("unknown int=%x",activeInt); + log_e("unknown int=%lx",activeInt); // disable unhandled IRQ, p_i2c->dev->int_ena.val = p_i2c->dev->int_ena.val & (~activeInt); } @@ -1280,7 +1280,7 @@ i2c_err_t i2cProcQueue(i2c_t * i2c, uint32_t *readCount, uint16_t timeOutMillis) } if(ret!=ESP_OK) { - log_e("install interrupt handler Failed=%d",ret); + log_e("install interrupt handler Failed=%lu",ret); I2C_MUTEX_UNLOCK(); return I2C_ERROR_MEMORY; } diff --git a/cores/esp32/esp32-hal-sigmadelta.c b/cores/esp32/esp32-hal-sigmadelta.c deleted file mode 100644 index b0342ff9..00000000 --- a/cores/esp32/esp32-hal-sigmadelta.c +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "esp32-hal.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include "esp32-hal-matrix.h" -#include "soc/gpio_sd_reg.h" -#include "soc/gpio_sd_struct.h" -#include "freertos/semphr.h" -#include "esp32-hal-cpu.h" -#include "esp32-hal-gpio.h" - -#include "esp_system.h" -#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "esp32/rom/ets_sys.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/rom/ets_sys.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "rom/ets_sys.h" -#endif - - -#if CONFIG_DISABLE_HAL_LOCKS -#define SD_MUTEX_LOCK() -#define SD_MUTEX_UNLOCK() -#else -#define SD_MUTEX_LOCK() do {} while (xSemaphoreTake(_sd_sys_lock, portMAX_DELAY) != pdPASS) -#define SD_MUTEX_UNLOCK() xSemaphoreGive(_sd_sys_lock) -SemaphoreHandle_t _sd_sys_lock; -#endif - -static void _on_apb_change(void * arg, apb_change_ev_t ev_type, uint32_t old_apb, uint32_t new_apb){ - if(old_apb == new_apb){ - return; - } - uint32_t iarg = (uint32_t)arg; - uint8_t channel = iarg; - if(ev_type == APB_BEFORE_CHANGE){ - SIGMADELTA.cg.clk_en = 0; - } else { - old_apb /= 1000000; - new_apb /= 1000000; - SD_MUTEX_LOCK(); - uint32_t old_prescale = SIGMADELTA.channel[channel].prescale + 1; - SIGMADELTA.channel[channel].prescale = ((new_apb * old_prescale) / old_apb) - 1; - SIGMADELTA.cg.clk_en = 0; - SIGMADELTA.cg.clk_en = 1; - SD_MUTEX_UNLOCK(); - } -} - -uint32_t sigmaDeltaSetup(uint8_t channel, uint32_t freq) //chan 0-7 freq 1220-312500 -{ - if(channel > 7) { - return 0; - } -#if !CONFIG_DISABLE_HAL_LOCKS - static bool tHasStarted = false; - if(!tHasStarted) { - tHasStarted = true; - _sd_sys_lock = xSemaphoreCreateMutex(); - } -#endif - uint32_t apb_freq = getApbFrequency(); - uint32_t prescale = (apb_freq/(freq*256)) - 1; - if(prescale > 0xFF) { - prescale = 0xFF; - } - SD_MUTEX_LOCK(); -#ifndef CONFIG_IDF_TARGET_ESP32 - SIGMADELTA.misc.function_clk_en = 1; -#endif - SIGMADELTA.channel[channel].prescale = prescale; - SIGMADELTA.cg.clk_en = 0; - SIGMADELTA.cg.clk_en = 1; - SD_MUTEX_UNLOCK(); - uint32_t iarg = channel; - addApbChangeCallback((void*)iarg, _on_apb_change); - return apb_freq/((prescale + 1) * 256); -} - -void sigmaDeltaWrite(uint8_t channel, uint8_t duty) //chan 0-7 duty 8 bit -{ - if(channel > 7) { - return; - } - duty -= 128; - SD_MUTEX_LOCK(); - SIGMADELTA.channel[channel].duty = duty; - SD_MUTEX_UNLOCK(); -} - -uint8_t sigmaDeltaRead(uint8_t channel) //chan 0-7 -{ - if(channel > 7) { - return 0; - } - SD_MUTEX_LOCK(); - uint8_t duty = SIGMADELTA.channel[channel].duty + 128; - SD_MUTEX_UNLOCK(); - return duty; -} - -void sigmaDeltaAttachPin(uint8_t pin, uint8_t channel) //channel 0-7 -{ - if(channel > 7) { - return; - } - pinMode(pin, OUTPUT); - pinMatrixOutAttach(pin, GPIO_SD0_OUT_IDX + channel, false, false); -} - -void sigmaDeltaDetachPin(uint8_t pin) -{ - pinMatrixOutDetach(pin, false, false); -} diff --git a/cores/esp32/esp32-hal-sigmadelta.h b/cores/esp32/esp32-hal-sigmadelta.h deleted file mode 100644 index 95bcb17c..00000000 --- a/cores/esp32/esp32-hal-sigmadelta.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef _ESP32_HAL_SD_H_ -#define _ESP32_HAL_SD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -//channel 0-7 freq 1220-312500 duty 0-255 -uint32_t sigmaDeltaSetup(uint8_t channel, uint32_t freq); -void sigmaDeltaWrite(uint8_t channel, uint8_t duty); -uint8_t sigmaDeltaRead(uint8_t channel); -void sigmaDeltaAttachPin(uint8_t pin, uint8_t channel); -void sigmaDeltaDetachPin(uint8_t pin); - - -#ifdef __cplusplus -} -#endif - -#endif /* _ESP32_HAL_SD_H_ */ diff --git a/cores/esp32/esp32-hal-touch.c b/cores/esp32/esp32-hal-touch.c deleted file mode 100644 index 394aec0c..00000000 --- a/cores/esp32/esp32-hal-touch.c +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "esp32-hal.h" -#include "esp32-hal-touch.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "esp_attr.h" -#include "soc/rtc_io_reg.h" -#include "soc/rtc_cntl_reg.h" -#include "soc/sens_reg.h" -#include "soc/sens_struct.h" -#include "driver/touch_sensor.h" - -#include "esp_system.h" -#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "esp32/rom/ets_sys.h" -#include "esp_intr_alloc.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/rom/ets_sys.h" -#include "esp_intr_alloc.h" -#include "soc/periph_defs.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "rom/ets_sys.h" -#include "esp_intr.h" -#endif -#include "esp32-hal-gpio.h" - -static uint16_t __touchSleepCycles = 0x1000; -static uint16_t __touchMeasureCycles = 0x1000; - -typedef void (*voidFuncPtr)(void); -static voidFuncPtr __touchInterruptHandlers[10] = {0,}; -static intr_handle_t touch_intr_handle = NULL; - -void ARDUINO_ISR_ATTR __touchISR(void * arg) -{ -#if CONFIG_IDF_TARGET_ESP32 - uint32_t pad_intr = READ_PERI_REG(SENS_SAR_TOUCH_CTRL2_REG) & 0x3ff; - uint32_t rtc_intr = READ_PERI_REG(RTC_CNTL_INT_ST_REG); - uint8_t i = 0; - //clear interrupt - WRITE_PERI_REG(RTC_CNTL_INT_CLR_REG, rtc_intr); - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_MEAS_EN_CLR); - - if (rtc_intr & RTC_CNTL_TOUCH_INT_ST) { - for (i = 0; i < 10; ++i) { - if ((pad_intr >> i) & 0x01) { - if(__touchInterruptHandlers[i]){ - __touchInterruptHandlers[i](); - } - } - } - } -#endif -} - -void __touchSetCycles(uint16_t measure, uint16_t sleep) -{ - __touchSleepCycles = sleep; - __touchMeasureCycles = measure; -#if CONFIG_IDF_TARGET_ESP32 - //Touch pad SleepCycle Time - SET_PERI_REG_BITS(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_SLEEP_CYCLES, __touchSleepCycles, SENS_TOUCH_SLEEP_CYCLES_S); - //Touch Pad Measure Time - SET_PERI_REG_BITS(SENS_SAR_TOUCH_CTRL1_REG, SENS_TOUCH_MEAS_DELAY, __touchMeasureCycles, SENS_TOUCH_MEAS_DELAY_S); -#else - touch_pad_set_meas_time(sleep, measure); -#endif -} - -void __touchInit() -{ - static bool initialized = false; - if(initialized){ - return; - } - initialized = true; -#if CONFIG_IDF_TARGET_ESP32 - SET_PERI_REG_BITS(RTC_IO_TOUCH_CFG_REG, RTC_IO_TOUCH_XPD_BIAS, 1, RTC_IO_TOUCH_XPD_BIAS_S); - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_MEAS_EN_CLR); - //clear touch enable - WRITE_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG, 0x0); - __touchSetCycles(__touchMeasureCycles, __touchSleepCycles); - esp_intr_alloc(ETS_RTC_CORE_INTR_SOURCE, (int)ARDUINO_ISR_FLAG, __touchISR, NULL, &touch_intr_handle); -#else - touch_pad_init(); - touch_pad_set_voltage(TOUCH_HVOLT_2V7, TOUCH_LVOLT_0V5, TOUCH_HVOLT_ATTEN_0V5); - touch_pad_set_idle_channel_connect(TOUCH_PAD_CONN_GND); - __touchSetCycles(__touchMeasureCycles, __touchSleepCycles); - touch_pad_denoise_t denoise = { - .grade = TOUCH_PAD_DENOISE_BIT4, - .cap_level = TOUCH_PAD_DENOISE_CAP_L4, - }; - touch_pad_denoise_set_config(&denoise); - touch_pad_denoise_enable(); - touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER); - touch_pad_fsm_start(); -#endif -} - -uint16_t __touchRead(uint8_t pin) -{ - int8_t pad = digitalPinToTouchChannel(pin); - if(pad < 0){ - return 0; - } - - pinMode(pin, ANALOG); - - __touchInit(); - -#if CONFIG_IDF_TARGET_ESP32 - uint32_t v0 = READ_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG); - //Disable Intr & enable touch pad - WRITE_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG, - (v0 & ~((1 << (pad + SENS_TOUCH_PAD_OUTEN2_S)) | (1 << (pad + SENS_TOUCH_PAD_OUTEN1_S)))) - | (1 << (pad + SENS_TOUCH_PAD_WORKEN_S))); - - SET_PERI_REG_MASK(SENS_SAR_TOUCH_ENABLE_REG, (1 << (pad + SENS_TOUCH_PAD_WORKEN_S))); - - uint32_t rtc_tio_reg = RTC_IO_TOUCH_PAD0_REG + pad * 4; - WRITE_PERI_REG(rtc_tio_reg, (READ_PERI_REG(rtc_tio_reg) - & ~(RTC_IO_TOUCH_PAD0_DAC_M)) - | (7 << RTC_IO_TOUCH_PAD0_DAC_S)//Touch Set Slope - | RTC_IO_TOUCH_PAD0_TIE_OPT_M //Enable Tie,Init Level - | RTC_IO_TOUCH_PAD0_START_M //Enable Touch Pad IO - | RTC_IO_TOUCH_PAD0_XPD_M); //Enable Touch Pad Power on - - //force oneTime test start - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_START_EN_M|SENS_TOUCH_START_FORCE_M); - - SET_PERI_REG_BITS(SENS_SAR_TOUCH_CTRL1_REG, SENS_TOUCH_XPD_WAIT, 10, SENS_TOUCH_XPD_WAIT_S); - - while (GET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_MEAS_DONE) == 0) {}; - - uint16_t touch_value = READ_PERI_REG(SENS_SAR_TOUCH_OUT1_REG + (pad / 2) * 4) >> ((pad & 1) ? SENS_TOUCH_MEAS_OUT1_S : SENS_TOUCH_MEAS_OUT0_S); - - //clear touch force ,select the Touch mode is Timer - CLEAR_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_START_EN_M|SENS_TOUCH_START_FORCE_M); - - //restore previous value - WRITE_PERI_REG(SENS_SAR_TOUCH_ENABLE_REG, v0); - return touch_value; -#else - static uint32_t chan_mask = 0; - uint32_t value = 0; - if((chan_mask & (1 << pad)) == 0){ - if(touch_pad_set_thresh((touch_pad_t)pad, TOUCH_PAD_THRESHOLD_MAX) != ESP_OK){ - log_e("touch_pad_set_thresh failed"); - } else if(touch_pad_config((touch_pad_t)pad) != ESP_OK){ - log_e("touch_pad_config failed"); - } else { - chan_mask |= (1 << pad); - } - } - if((chan_mask & (1 << pad)) != 0) { - if(touch_pad_read_raw_data((touch_pad_t)pad, &value) != ESP_OK){ - log_e("touch_pad_read_raw_data failed"); - } - } - return value; -#endif -} - -void __touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), uint16_t threshold) -{ - int8_t pad = digitalPinToTouchChannel(pin); - if(pad < 0){ - return; - } - - pinMode(pin, ANALOG); - - __touchInit(); - - __touchInterruptHandlers[pad] = userFunc; - -#if CONFIG_IDF_TARGET_ESP32 - //clear touch force ,select the Touch mode is Timer - CLEAR_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL2_REG, SENS_TOUCH_START_EN_M|SENS_TOUCH_START_FORCE_M); - - //interrupt when touch value < threshold - CLEAR_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_TOUCH_OUT_SEL); - //Intr will give ,when SET0 < threshold - SET_PERI_REG_MASK(SENS_SAR_TOUCH_CTRL1_REG, SENS_TOUCH_OUT_1EN); - //Enable Rtc Touch Module Intr,the Interrupt need Rtc out Enable - SET_PERI_REG_MASK(RTC_CNTL_INT_ENA_REG, RTC_CNTL_TOUCH_INT_ENA); - - //set threshold - uint8_t shift = (pad & 1) ? SENS_TOUCH_OUT_TH1_S : SENS_TOUCH_OUT_TH0_S; - SET_PERI_REG_BITS((SENS_SAR_TOUCH_THRES1_REG + (pad / 2) * 4), SENS_TOUCH_OUT_TH0, threshold, shift); - - uint32_t rtc_tio_reg = RTC_IO_TOUCH_PAD0_REG + pad * 4; - WRITE_PERI_REG(rtc_tio_reg, (READ_PERI_REG(rtc_tio_reg) - & ~(RTC_IO_TOUCH_PAD0_DAC_M)) - | (7 << RTC_IO_TOUCH_PAD0_DAC_S)//Touch Set Slope - | RTC_IO_TOUCH_PAD0_TIE_OPT_M //Enable Tie,Init Level - | RTC_IO_TOUCH_PAD0_START_M //Enable Touch Pad IO - | RTC_IO_TOUCH_PAD0_XPD_M); //Enable Touch Pad Power on - - //Enable Digital rtc control :work mode and out mode - SET_PERI_REG_MASK(SENS_SAR_TOUCH_ENABLE_REG, - (1 << (pad + SENS_TOUCH_PAD_WORKEN_S)) | \ - (1 << (pad + SENS_TOUCH_PAD_OUTEN2_S)) | \ - (1 << (pad + SENS_TOUCH_PAD_OUTEN1_S))); -#else - -#endif -} - -extern uint16_t touchRead(uint8_t pin) __attribute__ ((weak, alias("__touchRead"))); -extern void touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), uint16_t threshold) __attribute__ ((weak, alias("__touchAttachInterrupt"))); -extern void touchSetCycles(uint16_t measure, uint16_t sleep) __attribute__ ((weak, alias("__touchSetCycles"))); diff --git a/cores/esp32/esp32-hal-touch.h b/cores/esp32/esp32-hal-touch.h deleted file mode 100644 index 611924a3..00000000 --- a/cores/esp32/esp32-hal-touch.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - Arduino.h - Main include file for the Arduino SDK - Copyright (c) 2005-2013 Arduino Team. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef MAIN_ESP32_HAL_TOUCH_H_ -#define MAIN_ESP32_HAL_TOUCH_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* - * Set cycles that measurement operation takes - * The result from touchRead, threshold and detection - * accuracy depend on these values. Defaults are - * 0x1000 for measure and 0x1000 for sleep. - * With default values touchRead takes 0.5ms - * */ -void touchSetCycles(uint16_t measure, uint16_t sleep); - -/* - * Read touch pad (values close to 0 mean touch detected) - * You can use this method to chose a good threshold value - * to use as value for touchAttachInterrupt - * */ -uint16_t touchRead(uint8_t pin); - -/* - * Set function to be called if touch pad value falls - * below the given threshold. Use touchRead to determine - * a proper threshold between touched and untouched state - * */ -void touchAttachInterrupt(uint8_t pin, void (*userFunc)(void), uint16_t threshold); - -#ifdef __cplusplus -} -#endif - -#endif /* MAIN_ESP32_HAL_TOUCH_H_ */ diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 930dca73..acfade1b 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -224,7 +224,7 @@ uint8_t TwoWire::requestFrom(uint16_t address, uint8_t size, bool sendStop) if(cnt < (I2C_BUFFER_LENGTH-1) && (size + cnt) <= I2C_BUFFER_LENGTH) { // any room left in rxBuffer rxQueued += size; } else { // no room to receive more! - log_e("rxBuff overflow %d", cnt + size); + log_e("rxBuff overflow %lu", cnt + size); cnt = 0; last_error = I2C_ERROR_MEMORY; flush();