В микроконтролле 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