среда, 16 апреля 2025 г.

W801 таймер

 В микроконтролле W801 имеется некоторое колличество таймеров. Попробуем настроить и запустить один из них. А также сделаем светодиодную мигалку на таймере. Чтобы убедиться в том что мигалка работает на прерывании от таймера. Оставим в коде мигалку на задержках. Благо на плате много встроенных светодиодов. Рассмотрим код:

Для настройки таймера инициализируем идентификатор и структуру таймера.

u8 timer_id; // идентификатор таймера

struct tls_timer_cfg timer_cfg; // структура конфигурации таймера

Передадим туда константу указывающую на счет в миллисекундах.

timer_cfg.unit = TLS_TIMER_UNIT_MS; // таймер считает миллисекунды

Далее указывается задержка в миллисекундах:

timer_cfg.timeout = 2000; // задержка в миллисекундах

Установим неоднократное срабатывание по прерыванию.

timer_cfg.is_repeat = 1; // таймер срабатывает неоднократно

Присвоим обработчик прерывания. Это функция которая будет вызываться при возникновении прерывания и в теле которой будет происходить изменение состояния светодиода т.е. там будет код мигалки.

// присвоение функции-обработчика прерывания по таймеру

timer_cfg.callback = (tls_timer_irq_callback)demo_timer_irq;

Далее одна непонятная настройка, просто скопирована из примера.

timer_cfg.arg = NULL;

После происходит создание таймера а затем его запуск.

timer_id = tls_timer_create(&timer_cfg); // создание таймера

tls_timer_start(timer_id); // запуск таймера

В основном цикле остается мигалка на задержках но другим светодиодом. В обработчике прерывания по таймеру происходит инверсия состояния пина на котором светодиод который мигает по таймеру. + настройка пина и вывод на этот пин. 

Для компиляции кода, нужно запустить из корня проекта команду

sudo make

для загрузки рошивки в плату, команду

sudo tools/w800/wm_tool -c ttyUSB0 -rs rts -dl bin/w800/w800.fls

Также я решил проверить ещё один способ сделать задержку. функцией tls_os_time_delay. В качестве параметра ей передается число которое нужно умножить на 2 чтобы получить задержку которую дает данная функция. С виду она работает не плохо. По крайней мере кажеться что она делает достаточно хорошую точность. Результат можно посмотреть на видео



Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g