/*
* Ejemplo de interrupcion de los timers del ESP32
fuente:https://descubrearduino.com/esp32-arduino-interrupciones-timer/
Probado y funcionando
*/
volatile int interruptCounter,banderaTimer0 = 0;
int totalInterruptCounter;
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer() {
portENTER_CRITICAL_ISR(&timerMux);
//interruptCounter++;
banderaTimer0 = 1;
portEXIT_CRITICAL_ISR(&timerMux);
}
void setup() {
Serial.begin(115200);
timer = timerBegin(0, 80, true); //80Mhz del clock del procesor / 80 da 1MHz de Frec o 1uS de Periodo
timerAttachInterrupt(timer, &onTimer, true); //true flanco de subida, false -> flanco de bajada
timerAlarmWrite(timer,200000, true);//tiempo en uS, true -> recarga el timer con el valor y reinicia la alarma
timerAlarmEnable(timer);
}
void loop() {
if(banderaTimer0)
{
portENTER_CRITICAL(&timerMux);
banderaTimer0 = 0;
portEXIT_CRITICAL(&timerMux);
totalInterruptCounter++;
if(totalInterruptCounter == 10)
{
timerAlarmDisable(timer);
}
Serial.print("An interrupt as occurred. Total number: ");
Serial.println(totalInterruptCounter);
}
}