ESP8266 RTOS SDK – Licznik sprzętowy (hardware timer)

Timery ESP8266 RTOS SDK (esp8266)

Strona w dokumentacji – hw_timer esp8266

Tutaj obsługa timerów jest bardzo prosta. Niestety jednak esp8266 zawiera dwa timery sprzętowe, z czego jeden służy procesorowi do obsługi modułu wi-fi więc do naszej dyspozycji pozostaje tylko jeden timer.

Do naszego projektu musimy dołączyć bibliotekę „hw_timer.h”:

#include "driver/hw_timer.h"

Kolejny krok to inicjalizacja timera i przypisanie do niego funkcji obsługującej przerwanie.

hw_timer_init(funkcja, *args)
  • funkcja – nazwa funkcji obsługującej przerwanie
  • *args – argumenty przekazywane funkcji (void *)

Teraz ustawiamy czas co jaki timer ma wywoływać przerwanie:

hw_timer_alarm_us(value, reload)
  • value – czas w us (mikrosekundy) z przedziału 50-1677721
  • reload – true/false (1/0) zależnie czy timer ma wykonywać się cyklicznie, czy tylko raz

Jeżeli chcemy włączyć/wyłączyć timer używamy polecenia „hw_timer_enable( true/false )”.

Przykład użycia HW Timer – esp8266

#include <stdio.h>
#include <stdlib.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "driver/hw_timer.h"

static void przerwanie(void *arg)
{
    if (gpio_get_level(16)) gpio_set_level(16, 0);
    else gpio_set_level(16, 1);
}

void app_main(void)
{
    gpio_config_t io_conf;
    io_conf.intr_type = GPIO_INTR_DISABLE;
    io_conf.mode = GPIO_MODE_INPUT_OUTPUT;
    io_conf.pin_bit_mask = ((1<<16));
    io_conf.pull_down_en = 0;
    io_conf.pull_up_en = 0;

    gpio_config(&io_conf);

    hw_timer_init(przerwanie, NULL);
    hw_timer_alarm_us(1000000, true);
    

    while (1) 
    {
       vTaskDelay(1000 / portTICK_RATE_MS);
       ets_printf("hello\n");
    }
}

Po załadowaniu tego kodu do mikrokontrolera, dioda podłączona do pinu GPIO16 migać będzie z częstotliwością 1Hz. Jak więc widać podstawowe uruchomienie licznika sprzętowego w środowisku ESP8266 RTOS SDK to zaledniwe dwie dodatkowe linie kodu. Oczywiście praca licznika nie wstrzymuje wykonywania się kodu zawartego w głównej pętli programu.