Skip to content
This repository was archived by the owner on Jan 29, 2023. It is now read-only.

Commit a9f847b

Browse files
authored
v2.3.0 fixes doubling time bug
### Releases v2.3.0 1. Fix doubled time for ESP32_C3, ESP32_S2 and ESP32_S3. Check [Error in the value defined by TIMER0_INTERVAL_MS #28](#28) 2. Modify examples to avoid using `LED_BUILTIN` / `GPIO2` as it cam cause crash in some boards, such as `ESP32_C3` 3. Use `allman astyle` and add `utils`
1 parent e299069 commit a9f847b

25 files changed

+1213
-992
lines changed

CONTRIBUTING.md

+28-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ If you don't find anything, please [open a new issue](https://github.com/khoih-p
1515
Please ensure to specify the following:
1616

1717
* Arduino IDE version (e.g. 1.8.19) or Platform.io version
18-
* `ESP32` Core Version (e.g. ESP32 core v2.0.4)
18+
* `ESP32` Core Version (e.g. ESP32 core v2.0.5)
1919
* `ESP32` Board type (e.g. ESP32_DEV Module, etc.)
2020
* `ESP32-S2` Board type (e.g. ESP32S2_DEV Module, ESP32_S2_Saola, etc.)
2121
* `ESP32_S3` Board type (e.g. ESP32S3_DEV, ESP32_S3_BOX, UM TINYS3, UM PROS3, UM FEATHERS3, etc.)
@@ -31,28 +31,51 @@ Please ensure to specify the following:
3131

3232
```
3333
Arduino IDE version: 1.8.19
34-
ESP32 core v2.0.4
34+
ESP32 core v2.0.5
3535
ESP32S3_DEV Module
3636
OS: Ubuntu 20.04 LTS
37-
Linux xy-Inspiron-3593 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
37+
Linux xy-Inspiron-3593 5.15.0-52-generic #58~20.04.1-Ubuntu SMP Thu Oct 13 13:09:46 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
3838
3939
Context:
40-
I encountered a crash while using ESP32TimerInterrupt.
41-
40+
I encountered a crash while using this library
4241
Steps to reproduce:
4342
1. ...
4443
2. ...
4544
3. ...
4645
4. ...
4746
```
4847

48+
### Additional context
49+
50+
Add any other context about the problem here.
51+
52+
---
53+
4954
### Sending Feature Requests
5055

5156
Feel free to post feature requests. It's helpful if you can explain exactly why the feature would be useful.
5257

5358
There are usually some outstanding feature requests in the [existing issues list](https://github.com/khoih-prog/ESP32TimerInterrupt/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement), feel free to add comments to them.
5459

60+
---
61+
5562
### Sending Pull Requests
5663

5764
Pull Requests with changes and fixes are also welcome!
5865

66+
Please use the `astyle` to reformat the updated library code as follows (demo for Ubuntu Linux)
67+
68+
1. Change directory to the library GitHub
69+
70+
```
71+
xy@xy-Inspiron-3593:~$ cd Arduino/xy/ESP32TimerInterrupt_GitHub/
72+
xy@xy-Inspiron-3593:~/Arduino/xy/ESP32TimerInterrupt_GitHub$
73+
```
74+
75+
2. Issue astyle command
76+
77+
```
78+
xy@xy-Inspiron-3593:~/Arduino/xy/ESP32TimerInterrupt_GitHub$ bash utils/restyle.sh
79+
```
80+
81+

README.md

+23-17
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
<a href="https://www.buymeacoffee.com/khoihprog6" title="Donate to my libraries using BuyMeACoffee"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Donate to my libraries using BuyMeACoffee" style="height: 50px !important;width: 181px !important;" ></a>
1010
<a href="https://www.buymeacoffee.com/khoihprog6" title="Donate to my libraries using BuyMeACoffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-orange.svg?logo=buy-me-a-coffee&logoColor=FFDD00" style="height: 20px !important;width: 200px !important;" ></a>
11+
<a href="https://profile-counter.glitch.me/khoih-prog/count.svg" title="Total khoih-prog Visitor count"><img src="https://profile-counter.glitch.me/khoih-prog/count.svg" style="height: 30px;width: 200px;"></a>
12+
<a href="https://profile-counter.glitch.me/khoih-prog-ESP32TimerInterrupt/count.svg" title="ESP32TimerInterrupt Visitor count"><img src="https://profile-counter.glitch.me/khoih-prog-ESP32TimerInterrupt/count.svg" style="height: 30px;width: 200px;"></a>
1113

1214
---
1315
---
@@ -138,7 +140,7 @@ The catch is **your function is now part of an ISR (Interrupt Service Routine),
138140
## Prerequisites
139141

140142
1. [`Arduino IDE 1.8.19+` for Arduino](https://github.com/arduino/Arduino). [![GitHub release](https://img.shields.io/github/release/arduino/Arduino.svg)](https://github.com/arduino/Arduino/releases/latest)
141-
2. [`ESP32 Core 2.0.4+`](https://github.com/espressif/arduino-esp32) for ESP32-based boards. [![Latest release](https://img.shields.io/github/release/espressif/arduino-esp32.svg)](https://github.com/espressif/arduino-esp32/releases/latest/).
143+
2. [`ESP32 Core 2.0.5+`](https://github.com/espressif/arduino-esp32) for ESP32-based boards. [![Latest release](https://img.shields.io/github/release/espressif/arduino-esp32.svg)](https://github.com/espressif/arduino-esp32/releases/latest/).
142144
3. [`SimpleTimer library`](https://github.com/jfturcot/SimpleTimer) to use with some examples.
143145

144146
---
@@ -184,13 +186,13 @@ In Platform IO, to fix the error when using [`LittleFS_esp32 v1.0`](https://gith
184186

185187
from
186188

187-
```
189+
```cpp
188190
//#define CONFIG_LITTLEFS_FOR_IDF_3_2 /* For old IDF - like in release 1.0.4 */
189191
```
190192

191193
to
192194

193-
```
195+
```cpp
194196
#define CONFIG_LITTLEFS_FOR_IDF_3_2 /* For old IDF - like in release 1.0.4 */
195197
```
196198
@@ -207,13 +209,13 @@ The current library implementation, using `xyz-Impl.h` instead of standard `xyz.
207209
208210
You can use
209211
210-
```
212+
```cpp
211213
#include <ESP32TimerInterrupt.hpp> //https://github.com/khoih-prog/ESP32TimerInterrupt
212214
```
213215

214216
in many files. But be sure to use the following `#include <ESP32TimerInterrupt.h>` **in just 1 `.h`, `.cpp` or `.ino` file**, which must **not be included in any other file**, to avoid `Multiple Definitions` Linker Error
215217

216-
```
218+
```cpp
217219
// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
218220
#include <ESP32TimerInterrupt.h> //https://github.com/khoih-prog/ESP32TimerInterrupt
219221
```
@@ -232,33 +234,33 @@ Please have a look at [**ESP_WiFiManager Issue 39: Not able to read analog port
232234

233235
#### 2. ESP32 ADCs functions
234236

235-
- ADC1 controls ADC function for pins **GPIO32-GPIO39**
236-
- ADC2 controls ADC function for pins **GPIO0, 2, 4, 12-15, 25-27**
237+
- `ADC1` controls ADC function for pins **GPIO32-GPIO39**
238+
- `ADC2` controls ADC function for pins **GPIO0, 2, 4, 12-15, 25-27**
237239

238240
#### 3.. ESP32 WiFi uses ADC2 for WiFi functions
239241

240242
Look in file [**adc_common.c**](https://github.com/espressif/esp-idf/blob/master/components/driver/adc_common.c)
241243

242-
> In ADC2, there're two locks used for different cases:
244+
> In `ADC2`, there're two locks used for different cases:
243245
> 1. lock shared with app and Wi-Fi:
244246
> ESP32:
245-
> When Wi-Fi using the ADC2, we assume it will never stop, so app checks the lock and returns immediately if failed.
247+
> When Wi-Fi using the `ADC2`, we assume it will never stop, so app checks the lock and returns immediately if failed.
246248
> ESP32S2:
247249
> The controller's control over the ADC is determined by the arbiter. There is no need to control by lock.
248250
>
249251
> 2. lock shared between tasks:
250-
> when several tasks sharing the ADC2, we want to guarantee
252+
> when several tasks sharing the `ADC2`, we want to guarantee
251253
> all the requests will be handled.
252254
> Since conversions are short (about 31us), app returns the lock very soon,
253255
> we use a spinlock to stand there waiting to do conversions one by one.
254256
>
255257
> adc2_spinlock should be acquired first, then adc2_wifi_lock or rtc_spinlock.
256258
257259

258-
- In order to use ADC2 for other functions, we have to **acquire complicated firmware locks and very difficult to do**
259-
- So, it's not advisable to use ADC2 with WiFi/BlueTooth (BT/BLE).
260-
- Use ADC1, and pins GPIO32-GPIO39
261-
- If somehow it's a must to use those pins serviced by ADC2 (**GPIO0, 2, 4, 12, 13, 14, 15, 25, 26 and 27**), use the **fix mentioned at the end** of [**ESP_WiFiManager Issue 39: Not able to read analog port when using the autoconnect example**](https://github.com/khoih-prog/ESP_WiFiManager/issues/39) to work with ESP32 WiFi/BlueTooth (BT/BLE).
260+
- In order to use `ADC2` for other functions, we have to **acquire complicated firmware locks and very difficult to do**
261+
- So, it's not advisable to use `ADC2` with WiFi/BlueTooth (BT/BLE).
262+
- Use `ADC1`, and pins `GPIO32-GPIO39`
263+
- If somehow it's a must to use those pins serviced by `ADC2` (**GPIO0, 2, 4, 12, 13, 14, 15, 25, 26 and 27**), use the **fix mentioned at the end** of [**ESP_WiFiManager Issue 39: Not able to read analog port when using the autoconnect example**](https://github.com/khoih-prog/ESP_WiFiManager/issues/39) to work with ESP32 WiFi/BlueTooth (BT/BLE).
262264

263265
---
264266
---
@@ -295,8 +297,8 @@ in loop(), using delay() function as an example. The elapsed time then is very u
295297

296298
Before using any Timer, you have to make sure the Timer has not been used by any other purpose.
297299

298-
`Timer0, Timer1, Timer2 and Timer3` are supported for ESP32, ESP32_S2 and ESP32_S3.
299-
`Timer0, Timer1` are supported for ESP32_C3.
300+
`Timer0, Timer1, Timer2 and Timer3` are supported for `ESP32`, `ESP32_S2` and `ESP32_S3`.
301+
`Timer0, Timer1` are supported for `ESP32_C3`.
300302

301303
---
302304
---
@@ -851,6 +853,8 @@ Submit issues to: [ESP32TimerInterrupt issues](https://github.com/khoih-prog/ESP
851853
- ESP32_S2 : ESP32S2 Native USB, UM FeatherS2 Neo, UM TinyS2, UM RMP, microS2, LOLIN_S2_MINI, LOLIN_S2_PICO, ADAFRUIT_FEATHER_ESP32S2, ADAFRUIT_FEATHER_ESP32S2_TFT, ATMegaZero ESP32-S2, Deneyap Mini, FRANZININHO_WIFI, FRANZININHO_WIFI_MSC
852854
- ESP32_S3 : UM TinyS3, UM PROS3, UM FeatherS3, ESP32_S3_USB_OTG, ESP32S3_CAM_LCD, DFROBOT_FIREBEETLE_2_ESP32S3, ADAFRUIT_FEATHER_ESP32S3_TFT
853855
- ESP32_C3 : LOLIN_C3_MINI, DFROBOT_BEETLE_ESP32_C3, ADAFRUIT_QTPY_ESP32C3, AirM2M_CORE_ESP32C3, XIAO_ESP32C3
856+
18. Use `allman astyle` and add `utils`
857+
854858

855859
---
856860
---
@@ -859,11 +863,13 @@ Submit issues to: [ESP32TimerInterrupt issues](https://github.com/khoih-prog/ESP
859863

860864
Many thanks for everyone for bug reporting, new feature suggesting, testing and contributing to the development of this library.
861865

862-
1. Thanks to [Jelmer](https://github.com/jjwbruijn) to report and make PR in [Moved the implementation header file to a separate .cpp file](https://github.com/khoih-prog/ESP32TimerInterrupt/pull/6) leading to new Version v1.1.0.
866+
1. Thanks to [Jelmer](https://github.com/jjwbruijn) to report and make PR in [Moved the implementation header file to a separate .cpp file](https://github.com/khoih-prog/ESP32TimerInterrupt/pull/6) leading to new Version v1.1.0
867+
2. Thanks to [pedrojvs](https://github.com/pedrojvs) to report the issue in [Error in the value defined by TIMER0_INTERVAL_MS #28](https://github.com/khoih-prog/ESP32TimerInterrupt/issues/28) leading to new Version v2.3.0
863868

864869
<table>
865870
<tr>
866871
<td align="center"><a href="https://github.com/jjwbruijn"><img src="https://github.com/jjwbruijn.png" width="100px;" alt="jjwbruijn"/><br /><sub><b>Jelmer</b></sub></a><br /></td>
872+
<td align="center"><a href="https://github.com/pedrojvs"><img src="https://github.com/pedrojvs.png" width="100px;" alt="pedrojvs"/><br /><sub><b>pedrojvs</b></sub></a><br /></td>
867873
</tr>
868874
</table>
869875

changelog.md

+13
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,19 @@
66
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](#Contributing)
77
[![GitHub issues](https://img.shields.io/github/issues/khoih-prog/ESP32TimerInterrupt.svg)](http://github.com/khoih-prog/ESP32TimerInterrupt/issues)
88

9+
10+
<a href="https://www.buymeacoffee.com/khoihprog6" title="Donate to my libraries using BuyMeACoffee"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Donate to my libraries using BuyMeACoffee" style="height: 50px !important;width: 181px !important;" ></a>
11+
<a href="https://www.buymeacoffee.com/khoihprog6" title="Donate to my libraries using BuyMeACoffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-orange.svg?logo=buy-me-a-coffee&logoColor=FFDD00" style="height: 20px !important;width: 200px !important;" ></a>
12+
<a href="https://profile-counter.glitch.me/khoih-prog/count.svg" title="Total khoih-prog Visitor count"><img src="https://profile-counter.glitch.me/khoih-prog/count.svg" style="height: 30px;width: 200px;"></a>
13+
<a href="https://profile-counter.glitch.me/khoih-prog-ESP32TimerInterrupt/count.svg" title="ESP32TimerInterrupt Visitor count"><img src="https://profile-counter.glitch.me/khoih-prog-ESP32TimerInterrupt/count.svg" style="height: 30px;width: 200px;"></a>
14+
915
---
1016
---
1117

1218
## Table of Contents
1319

1420
* [Changelog](#changelog)
21+
* [Releases v2.3.0](#releases-v230)
1522
* [Releases v2.2.0](#releases-v220)
1623
* [Releases v2.1.0](#releases-v210)
1724
* [Releases v2.0.2](#releases-v202)
@@ -32,6 +39,12 @@
3239

3340
## Changelog
3441

42+
### Releases v2.3.0
43+
44+
1. Fix doubled time for ESP32_C3, ESP32_S2 and ESP32_S3. Check [Error in the value defined by TIMER0_INTERVAL_MS #28](https://github.com/khoih-prog/ESP32TimerInterrupt/issues/28)
45+
2. Modify examples to avoid using `LED_BUILTIN` / `GPIO2` as it cam cause crash in some boards, such as `ESP32_C3`
46+
3. Use `allman astyle` and add `utils`
47+
3548
### Releases v2.2.0
3649

3750
1. Suppress warnings for ESP32_C3, ESP32_S2 and ESP32_S3

examples/Argument_None/Argument_None.ino

+63-59
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
The ESP32, ESP32_S2, ESP32_S3, ESP32_C3 have two timer groups, TIMER_GROUP_0 and TIMER_GROUP_1
1010
1) each group of ESP32, ESP32_S2, ESP32_S3 has two general purpose hardware timers, TIMER_0 and TIMER_1
1111
2) each group of ESP32_C3 has ony one general purpose hardware timer, TIMER_0
12-
13-
All the timers are based on 64-bit counters (except 54-bit counter for ESP32_S3 counter) and 16 bit prescalers.
14-
The timer counters can be configured to count up or down and support automatic reload and software reload.
15-
They can also generate alarms when they reach a specific value, defined by the software.
12+
13+
All the timers are based on 64-bit counters (except 54-bit counter for ESP32_S3 counter) and 16 bit prescalers.
14+
The timer counters can be configured to count up or down and support automatic reload and software reload.
15+
They can also generate alarms when they reach a specific value, defined by the software.
1616
The value of the counter can be read by the software program.
1717
1818
Now even you use all these new 16 ISR-based timers,with their maximum interval practically unlimited (limited only by
@@ -35,55 +35,53 @@
3535
*/
3636

3737
#if !defined( ESP32 )
38-
#error This code is intended to run on the ESP32 platform! Please check your Tools->Board setting.
38+
#error This code is intended to run on the ESP32 platform! Please check your Tools->Board setting.
3939
#endif
4040

4141
// These define's must be placed at the beginning before #include "_TIMERINTERRUPT_LOGLEVEL_.h"
4242
// _TIMERINTERRUPT_LOGLEVEL_ from 0 to 4
43-
#define _TIMERINTERRUPT_LOGLEVEL_ 4
43+
#define _TIMERINTERRUPT_LOGLEVEL_ 3
4444

4545
// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
4646
#include "ESP32TimerInterrupt.h"
4747

48-
#ifndef LED_BUILTIN
49-
#define LED_BUILTIN 2 // Pin D2 mapped to pin GPIO2/ADC12 of ESP32, control on-board LED
50-
#endif
51-
5248
// Don't use PIN_D1 in core v2.0.0 and v2.0.1. Check https://github.com/espressif/arduino-esp32/issues/5868
53-
#define PIN_D2 2 // Pin D2 mapped to pin GPIO2/ADC12/TOUCH2/LED_BUILTIN of ESP32
54-
#define PIN_D3 3 // Pin D3 mapped to pin GPIO3/RX0 of ESP32
49+
// Don't use PIN_D2 with ESP32_C3 (crash)
50+
#define PIN_D19 19 // Pin D19 mapped to pin GPIO9 of ESP32
51+
#define PIN_D3 3 // Pin D3 mapped to pin GPIO3/RX0 of ESP32
52+
5553

5654
// With core v2.0.0+, you can't use Serial.print/println in ISR or crash.
5755
// and you can't use float calculation inside ISR
5856
// Only OK in core v1.0.6-
5957
bool IRAM_ATTR TimerHandler0(void * timerNo)
6058
{
61-
static bool toggle0 = false;
59+
static bool toggle0 = false;
6260

63-
//timer interrupt toggles pin LED_BUILTIN
64-
digitalWrite(LED_BUILTIN, toggle0);
65-
toggle0 = !toggle0;
61+
//timer interrupt toggles pin PIN_D19
62+
digitalWrite(PIN_D19, toggle0);
63+
toggle0 = !toggle0;
6664

67-
return true;
65+
return true;
6866
}
6967

7068
// With core v2.0.0+, you can't use Serial.print/println in ISR or crash.
7169
// and you can't use float calculation inside ISR
7270
// Only OK in core v1.0.6-
7371
bool IRAM_ATTR TimerHandler1(void * timerNo)
7472
{
75-
/////////////////////////////////////////////////////////
73+
/////////////////////////////////////////////////////////
7674

77-
static bool toggle1 = false;
75+
static bool toggle1 = false;
7876

79-
//timer interrupt toggles outputPin
80-
digitalWrite(PIN_D3, toggle1);
81-
toggle1 = !toggle1;
77+
//timer interrupt toggles outputPin
78+
digitalWrite(PIN_D3, toggle1);
79+
toggle1 = !toggle1;
8280

83-
return true;
81+
return true;
8482
}
8583

86-
#define TIMER0_INTERVAL_MS 1000
84+
#define TIMER0_INTERVAL_MS 100
8785

8886
#define TIMER1_INTERVAL_MS 5000
8987

@@ -93,43 +91,49 @@ ESP32Timer ITimer1(1);
9391

9492
void setup()
9593
{
96-
pinMode(LED_BUILTIN, OUTPUT);
97-
pinMode(PIN_D3, OUTPUT);
98-
99-
Serial.begin(115200);
100-
while (!Serial);
101-
102-
delay(200);
103-
104-
Serial.print(F("\nStarting Argument_None on ")); Serial.println(ARDUINO_BOARD);
105-
Serial.println(ESP32_TIMER_INTERRUPT_VERSION);
106-
Serial.print(F("CPU Frequency = ")); Serial.print(F_CPU / 1000000); Serial.println(F(" MHz"));
107-
108-
// Using ESP32 => 80 / 160 / 240MHz CPU clock ,
109-
// For 64-bit timer counter
110-
// For 16-bit timer prescaler up to 1024
111-
112-
// Interval in microsecs
113-
if (ITimer0.attachInterruptInterval(TIMER0_INTERVAL_MS * 1000, TimerHandler0))
114-
//if (ITimer0.attachInterrupt(1, TimerHandler0))
115-
{
116-
Serial.print(F("Starting ITimer0 OK, millis() = ")); Serial.println(millis());
117-
}
118-
else
119-
Serial.println(F("Can't set ITimer0. Select another Timer, freq. or timer"));
120-
121-
122-
// Interval in microsecs
123-
if (ITimer1.attachInterruptInterval(TIMER1_INTERVAL_MS * 1000, TimerHandler1))
124-
//if (ITimer1.attachInterrupt(2, TimerHandler1))
125-
{
126-
Serial.print(F("Starting ITimer1 OK, millis() = ")); Serial.println(millis());
127-
}
128-
else
129-
Serial.println(F("Can't set ITimer1. Select another Timer, freq. or timer"));
94+
pinMode(PIN_D19, OUTPUT);
95+
pinMode(PIN_D3, OUTPUT);
96+
97+
Serial.begin(115200);
98+
99+
while (!Serial && millis() < 5000);
100+
101+
delay(500);
102+
103+
Serial.print(F("\nStarting Argument_None on "));
104+
Serial.println(ARDUINO_BOARD);
105+
Serial.println(ESP32_TIMER_INTERRUPT_VERSION);
106+
Serial.print(F("CPU Frequency = "));
107+
Serial.print(F_CPU / 1000000);
108+
Serial.println(F(" MHz"));
109+
110+
// Using ESP32 => 80 / 160 / 240MHz CPU clock ,
111+
// For 64-bit timer counter
112+
// For 16-bit timer prescaler up to 1024
113+
114+
// Interval in microsecs
115+
if (ITimer0.attachInterruptInterval(TIMER0_INTERVAL_MS * 1000, TimerHandler0))
116+
//if (ITimer0.attachInterrupt(1, TimerHandler0))
117+
{
118+
Serial.print(F("Starting ITimer0 OK, millis() = "));
119+
Serial.println(millis());
120+
}
121+
else
122+
Serial.println(F("Can't set ITimer0. Select another Timer, freq. or timer"));
123+
124+
125+
// Interval in microsecs
126+
if (ITimer1.attachInterruptInterval(TIMER1_INTERVAL_MS * 1000, TimerHandler1))
127+
//if (ITimer1.attachInterrupt(2, TimerHandler1))
128+
{
129+
Serial.print(F("Starting ITimer1 OK, millis() = "));
130+
Serial.println(millis());
131+
}
132+
else
133+
Serial.println(F("Can't set ITimer1. Select another Timer, freq. or timer"));
130134
}
131135

132136
void loop()
133137
{
134-
delay(1);
138+
delay(1);
135139
}

0 commit comments

Comments
 (0)