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.