#define TOGGLE 23
#define TP 22
hw_timer_t *My_timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer() {
portENTER_CRITICAL_ISR(&timerMux);
digitalWrite(TOGGLE, !digitalRead(TOGGLE));
digitalWrite(TP, HIGH);
delayMicroseconds(50);
digitalWrite(TP, LOW);
portEXIT_CRITICAL_ISR(&timerMux);
}
void setup() {
pinMode(TOGGLE, OUTPUT);
pinMode(TP, OUTPUT);
My_timer = timerBegin(0, 80, true);
timerAttachInterrupt(My_timer, &onTimer, true);
// My_timer on pin 23 (TOGGLE) should transition every 1000 μs (1 ms)
// and provide a 500 Hz square wave output.
// However, the simulated output has 2000 μs transition time,
// presulting in a 250 Hz squarewave output.
timerAlarmWrite(My_timer, 1000, true);
timerAlarmEnable(My_timer);
}
void loop() {
//delay(10);
}
// For comparison, the PWM Breakout chip is set to 1 kHz, 10% duty and
// produces the expected frequency and duty.
// A test using real ESP32 hardware was not made.