- Notifications
You must be signed in to change notification settings - Fork 7.6k
/
Copy pathesp32-hal.h
171 lines (143 loc) · 5.06 KB
/
esp32-hal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
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
*/
#ifndefHAL_ESP32_HAL_H_
#defineHAL_ESP32_HAL_H_
#include<stdint.h>
#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<inttypes.h>
#include<string.h>
#include<math.h>
#include"sdkconfig.h"
#include"esp_system.h"
#include"esp_sleep.h"
#include"freertos/FreeRTOS.h"
#include"freertos/task.h"
#include"freertos/queue.h"
#include"freertos/semphr.h"
#include"freertos/event_groups.h"
#ifdef__cplusplus
extern"C" {
#endif
#ifndefF_CPU
#defineF_CPU (CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ * 1000000U)
#endif
#ifCONFIG_ARDUINO_ISR_IRAM
#defineARDUINO_ISR_ATTR IRAM_ATTR
#defineARDUINO_ISR_FLAG ESP_INTR_FLAG_IRAM
#else
#defineARDUINO_ISR_ATTR
#defineARDUINO_ISR_FLAG (0)
#endif
#ifndefARDUINO_RUNNING_CORE
#defineARDUINO_RUNNING_CORE CONFIG_ARDUINO_RUNNING_CORE
#endif
#ifndefARDUINO_EVENT_RUNNING_CORE
#defineARDUINO_EVENT_RUNNING_CORE CONFIG_ARDUINO_EVENT_RUNNING_CORE
#endif
#ifCONFIG_IDF_TARGET_ESP32||CONFIG_IDF_TARGET_ESP32S2||CONFIG_IDF_TARGET_ESP32S3
staticconstuint8_tBOOT_PIN=0;
#elifCONFIG_IDF_TARGET_ESP32C2||CONFIG_IDF_TARGET_ESP32C3||CONFIG_IDF_TARGET_ESP32C6||CONFIG_IDF_TARGET_ESP32H2||CONFIG_IDF_TARGET_ESP32C61
staticconstuint8_tBOOT_PIN=9;
#elifCONFIG_IDF_TARGET_ESP32P4
staticconstuint8_tBOOT_PIN=35;
#elifCONFIG_IDF_TARGET_ESP32C5
staticconstuint8_tBOOT_PIN=28;
#else
#error BOOT_PIN not defined for this chip!
#endif
#defineBOOT_PIN BOOT_PIN
//forward declaration from freertos/portmacro.h
voidvPortYield(void);
voidyield(void);
#defineoptimistic_yield(u)
#defineESP_REG(addr) *((volatile uint32_t *)(addr))
#defineNOP() asm volatile("nop")
#include"esp32-hal-log.h"
#include"esp32-hal-matrix.h"
#include"esp32-hal-uart.h"
#include"esp32-hal-gpio.h"
#include"esp32-hal-touch.h"
#include"esp32-hal-touch-ng.h"
#include"esp32-hal-dac.h"
#include"esp32-hal-adc.h"
#include"esp32-hal-spi.h"
#include"esp32-hal-i2c.h"
#include"esp32-hal-ledc.h"
#include"esp32-hal-rmt.h"
#include"esp32-hal-sigmadelta.h"
#include"esp32-hal-timer.h"
#include"esp32-hal-bt.h"
#include"esp32-hal-psram.h"
#include"esp32-hal-rgb-led.h"
#include"esp32-hal-cpu.h"
voidanalogWrite(uint8_tpin, intvalue);
voidanalogWriteFrequency(uint8_tpin, uint32_tfreq);
voidanalogWriteResolution(uint8_tpin, uint8_tbits);
//returns chip temperature in Celsius
floattemperatureRead();
//allows user to bypass SPI RAM test routine
booltestSPIRAM(void);
#ifCONFIG_AUTOSTART_ARDUINO
//enable/disable WDT for Arduino's setup and loop functions
voidenableLoopWDT();
voiddisableLoopWDT();
//feed WDT for the loop task
voidfeedLoopWDT();
#endif
//enable/disable WDT for the IDLE task on Core 0 (SYSTEM)
voidenableCore0WDT();
booldisableCore0WDT();
#ifndefCONFIG_FREERTOS_UNICORE
//enable/disable WDT for the IDLE task on Core 1 (Arduino)
voidenableCore1WDT();
booldisableCore1WDT();
#endif
//if xCoreID < 0 or CPU is unicore, it will use xTaskCreate, else xTaskCreatePinnedToCore
//allows to easily handle all possible situations without repetitive code
BaseType_txTaskCreateUniversal(
TaskFunction_tpxTaskCode, constchar*constpcName, constuint32_tusStackDepth, void*constpvParameters, UBaseType_tuxPriority,
TaskHandle_t*constpxCreatedTask, constBaseType_txCoreID
);
unsigned longmicros();
unsigned longmillis();
voiddelay(uint32_t);
voiddelayMicroseconds(uint32_tus);
#if !CONFIG_ESP32_PHY_AUTO_INIT
voidarduino_phy_init();
#endif
#if !CONFIG_AUTOSTART_ARDUINO
voidinitArduino();
#endif
typedefstruct {
intcore; // core which triggered panic
constchar*reason; // exception string
constvoid*pc; // instruction address that triggered the exception
boolbacktrace_corrupt; // if backtrace is corrupt
boolbacktrace_continues; // if backtrace continues, but did not fit
unsigned intbacktrace_len; // number of backtrace addresses
unsigned intbacktrace[60]; // backtrace addresses array
} arduino_panic_info_t;
typedefvoid (*arduino_panic_handler_t)(arduino_panic_info_t*info, void*arg);
voidset_arduino_panic_handler(arduino_panic_handler_thandler, void*arg);
arduino_panic_handler_tget_arduino_panic_handler(void);
void*get_arduino_panic_handler_arg(void);
#ifdef__cplusplus
}
#endif
#endif/* HAL_ESP32_HAL_H_ */