Difficulty getting ESP32 S2 Timer interrupt to run.
Posted: Thu Feb 18, 2021 3:02 am
Code: Select all
/*
Repeat timer example
This example shows how to use hardware timer in ESP32. The timer calls onTimer
function every second. The timer can be stopped with button attached to PIN 0
(IO0).
This example code is in the public domain.
*/
// Stop button is attached to PIN 0 (IO0)
#define BTN_STOP_ALARM 0
hw_timer_t * timer = NULL;
volatile SemaphoreHandle_t timerSemaphore;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
volatile uint32_t isrCounter = 0;
volatile uint32_t lastIsrAt = 0;
void ARDUINO_ISR_ATTR onTimer(){
// Increment the counter and set the time of ISR
portENTER_CRITICAL_ISR(&timerMux);
isrCounter++;
lastIsrAt = millis();
portEXIT_CRITICAL_ISR(&timerMux);
// Give a semaphore that we can check in the loop
xSemaphoreGiveFromISR(timerSemaphore, NULL);
// It is safe to use digitalRead/Write here if you want to toggle an output
}
void setup() {
Serial.begin(115200);
// Set BTN_STOP_ALARM to input mode
pinMode(BTN_STOP_ALARM, INPUT);
// Create semaphore to inform us when the timer has fired
timerSemaphore = xSemaphoreCreateBinary();
// Use 1st timer of 4 (counted from zero).
// Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more
// info).
timer = timerBegin(0, 80, true);
// Attach onTimer function to our timer.
timerAttachInterrupt(timer, &onTimer, true);
// Set alarm to call onTimer function every second (value in microseconds).
// Repeat the alarm (third parameter)
timerAlarmWrite(timer, 1000000, true);
// Start an alarm
timerAlarmEnable(timer);
}
void loop() {
// If Timer has fired
if (xSemaphoreTake(timerSemaphore, 0) == pdTRUE){
uint32_t isrCount = 0, isrTime = 0;
// Read the interrupt count and time
portENTER_CRITICAL(&timerMux);
isrCount = isrCounter;
isrTime = lastIsrAt;
portEXIT_CRITICAL(&timerMux);
// Print it
Serial.print("onTimer no. ");
Serial.print(isrCount);
Serial.print(" at ");
Serial.print(isrTime);
Serial.println(" ms");
}
// If button is pressed
if (digitalRead(BTN_STOP_ALARM) == LOW) {
// If timer is still running
if (timer) {
// Stop and free timer
timerEnd(timer);
timer = NULL;
}
}
}
Code: Select all
timer_config_t TIMER_SEL;
void setup(){
timer_config_t TIMER_SEL;
Serial.begin(115200);
//timer_init(TIMER_GROUP_0,TIMER_0,TIMER_SEL);
/* int count;
gpio_set_direction(GPIO_NUM_11,GPIO_MODE_INPUT_OUTPUT);
gpio_set_level(GPIO_NUM_11,HIGH);
count=gpio_get_level(GPIO_NUM_11);
Serial.println(count);
gpio_set_level(GPIO_NUM_11,LOW);
count=gpio_get_level(GPIO_NUM_11);
Serial.println(count);
// put your setup code here, to run once:
*/
}
void loop() {
// put your main code here, to run repeatedly:
}
Code: Select all
GPI:1:1: error: 'timer_config_t' does not name a type; did you mean 'gpio_config_t'?
timer_config_t TIMER_SEL;
^~~~~~~~~~~~~~
gpio_config_t
C:\Users\Henry Wang\Documents\Arduino\GPI\GPI.ino: In function 'void setup()':
GPI:3:3: error: 'timer_config_t' was not declared in this scope
timer_config_t TIMER_SEL;
^~~~~~~~~~~~~~
C:\Users\Henry Wang\Documents\Arduino\GPI\GPI.ino:3:3: note: suggested alternative: 'gpio_config_t'
timer_config_t TIMER_SEL;
^~~~~~~~~~~~~~
gpio_config_t
exit status 1
'timer_config_t' does not name a type; did you mean 'gpio_config_t'?