Timer Interrupt Task in Esp32 Idf Using Interrupts

Timer Interrupt Task in Esp32 Idf Using Interrupts

I'm a beginner learning ESP32 using IDF and having a task to use interrupt timer. The task is to generate a signal using GPIO pin. The signal should be on for 20ms and off for 6ms. Here is the code that I've tried. I don't know where I'm going wrong and please guide me if my understanding is wrong.

#include <stdio.h>
#include "esp_timer.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "driver/gpio.h"
#include <stdbool.h>
#include "esp_err.h"
#include "sdkconfig.h"

void timer_callback_1(void *param)
{ 
  gpio_set_level(GPIO_NUM_2, 1);
}
void timer_callback_2(void *param)
{ 
  gpio_set_level(GPIO_NUM_2, 0);
}

void app_main(void)
{
  gpio_pad_select_gpio(GPIO_NUM_2);
  gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
  const esp_timer_create_args_t my_timer_args = {
      .callback = &timer_callback_1,
      .name = "a timer"};
  esp_timer_handle_t timer_handler;
  ESP_ERROR_CHECK(esp_timer_create(&my_timer_args, &timer_handler));
  ESP_ERROR_CHECK(esp_timer_start_periodic(timer_handler, 20000));
  ESP_ERROR_CHECK(esp_timer_stop(timer_handler));
   const esp_timer_create_args_t my_timer_args_2 = {
      .callback = &timer_callback_2,
      .name = "b timer"};
  ESP_ERROR_CHECK(esp_timer_create(&my_timer_args_2, &timer_handler));
  ESP_ERROR_CHECK(esp_timer_start_periodic(timer_handler, 6000));
  ESP_ERROR_CHECK(esp_timer_stop(timer_handler));
  //ESP_ERROR_CHECK(esp_timer_start_once(timer_handler, 20000));

  while (true)
  {
    esp_timer_dump(stdout);
    vTaskDelay(pdMS_TO_TICKS(1000));
  }
}
4
Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.