#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "esp_timer.h"
// Definições de pino
#define OUTPUT_PIN 23 // Pino de saída (GPIO23)
static const char *TAG = "Frequency Test";
// Função de temporizador para alternar o estado do pino
void IRAM_ATTR timer_isr_handler(void* arg) {
static bool pin_state = false; // Estado do pino
// Alterna o estado do pino
pin_state = !pin_state;
gpio_set_level(OUTPUT_PIN, pin_state);
}
// Função principal
void app_main() {
ESP_LOGI(TAG, "Iniciando avaliação da frequência máxima de saída...");
// Configura o pino de saída (GPIO23)
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << OUTPUT_PIN),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
gpio_config(&io_conf);
// Criação do temporizador
esp_timer_handle_t timer;
esp_timer_create_args_t timer_args = {
.callback = timer_isr_handler, // Função de callback para o temporizador
.arg = NULL, // Argumento da função
.dispatch_method = ESP_TIMER_TASK, // A interrupção será tratada na task do FreeRTOS
.name = "pin_toggle_timer" // Nome do temporizador
};
// Inicializa o temporizador
ESP_ERROR_CHECK(esp_timer_create(&timer_args, &timer));
// Inicia o temporizador para alternar o pino com a maior frequência possível
ESP_ERROR_CHECK(esp_timer_start_periodic(timer, 1)); // Intervalo de 1 microssegundo
// O código ficará em loop, o temporizador vai alternar o pino com alta frequência
while (1) {
vTaskDelay(pdMS_TO_TICKS(1000)); // Delay de 1 segundo
}
}