/* * timer.hpp * * Created on: 10 мар. 2023 г. * Author: sychev */ #ifndef FREE_RTOS_TIMER_TIMER_HPP_ #define FREE_RTOS_TIMER_TIMER_HPP_ #include #include #include namespace free_rtos { class Timer { public: struct Settings { uint32_t input_clk_Hz; /// Тактовая частота в Гц uint32_t base_address; /// Базовый адрес uint32_t clock_src_mux_addr; /// Адрес клока uint32_t int_num; /// Номер прерывания uint32_t int_priority; /// Приоритет прерывания uint32_t period_us; /// Период таймера в мкс }; /** * Инициализация таймера */ bool Init(Settings& sett); /** * Ожидания переполнение таймера. Блокирующее. */ void Wait(); void Start(); void Stop(); private: friend void timer_isr_callback(void * arg); private: uint32_t base_addr_; /// Базовый адрес регистров таймера uint32_t int_num_; /// Номер прерывания HwiP_Object hwi_obj_; /// Управление прерываниями по таймеру Semaphore sem_; }; } #endif /* FREE_RTOS_TIMER_TIMER_HPP_ */