libNeon
Loading...
Searching...
No Matches
neo::generic_timer Class Reference

#include <timer.hpp>

Inheritance diagram for neo::generic_timer:
Collaboration diagram for neo::generic_timer:

Public Member Functions

 generic_timer ()=default
 
 generic_timer (std::chrono::milliseconds period, std::function< void(generic_timer &)> cbk, BaseType_t core_affinity=tskNO_AFFINITY, timer_idx_t timer_idx=TIMER_0, timer_group_t timer_group=TIMER_GROUP_0)
 
 generic_timer (generic_timer const &)=delete
 
generic_timeroperator= (generic_timer const &)=delete
 
generic_timeroperator= (generic_timer &&t) noexcept
 
 generic_timer (generic_timer &&t) noexcept
 
virtual ~generic_timer ()
 
std::chrono::milliseconds period () const
 
bool is_active () const
 
virtual void start ()
 
virtual void stop ()
 
virtual void reset ()
 
 operator bool () const
 

Private Member Functions

timer_group_t group () const
 
timer_idx_t index () const
 
BaseType_t core_affinity () const
 
bool is_valid_timer () const
 
void setup_callbacks ()
 
void teardown_callbacks ()
 

Static Private Member Functions

static bool IRAM_ATTR isr_callback (void *tracker)
 
static void cbk_task_body (void *tracker)
 
static std::uint64_t get_alarm_value (std::chrono::milliseconds period)
 

Private Attributes

timer_config_t _cfg = timer_config_default
 
timer_group_t _group = TIMER_GROUP_MAX
 
timer_idx_t _idx = TIMER_MAX
 
BaseType_t _core_affinity = tskNO_AFFINITY
 
std::function< void(generic_timer &)> _cbk = nullptr
 
TaskHandle_t _cbk_task = nullptr
 
std::chrono::milliseconds _period = 0ms
 
bool _active = false
 

Static Private Attributes

static constexpr std::uint32_t generic_timer_base_frequency = 2'000
 
static constexpr timer_config_t timer_config_default
 

Constructor & Destructor Documentation

◆ generic_timer() [1/4]

neo::generic_timer::generic_timer ( )
default

◆ generic_timer() [2/4]

neo::generic_timer::generic_timer ( std::chrono::milliseconds  period,
std::function< void(generic_timer &)>  cbk,
BaseType_t  core_affinity = tskNO_AFFINITY,
timer_idx_t  timer_idx = TIMER_0,
timer_group_t  timer_group = TIMER_GROUP_0 
)

◆ generic_timer() [3/4]

neo::generic_timer::generic_timer ( generic_timer const &  )
delete

◆ generic_timer() [4/4]

neo::generic_timer::generic_timer ( generic_timer &&  t)
noexcept

◆ ~generic_timer()

neo::generic_timer::~generic_timer ( )
virtual

Member Function Documentation

◆ cbk_task_body()

void neo::generic_timer::cbk_task_body ( void *  tracker)
staticprivate

◆ core_affinity()

BaseType_t neo::generic_timer::core_affinity ( ) const
inlineprivate

◆ get_alarm_value()

std::uint64_t neo::generic_timer::get_alarm_value ( std::chrono::milliseconds  period)
staticprivate

◆ group()

timer_group_t neo::generic_timer::group ( ) const
inlineprivate

◆ index()

timer_idx_t neo::generic_timer::index ( ) const
inlineprivate

◆ is_active()

bool neo::generic_timer::is_active ( ) const
inline

◆ is_valid_timer()

bool neo::generic_timer::is_valid_timer ( ) const
inlineprivate

◆ isr_callback()

bool neo::generic_timer::isr_callback ( void *  tracker)
staticprivate

◆ operator bool()

neo::generic_timer::operator bool ( ) const
inlineexplicit

◆ operator=() [1/2]

generic_timer & neo::generic_timer::operator= ( generic_timer &&  t)
noexcept

◆ operator=() [2/2]

generic_timer & neo::generic_timer::operator= ( generic_timer const &  )
delete

◆ period()

std::chrono::milliseconds neo::generic_timer::period ( ) const
inline

◆ reset()

void neo::generic_timer::reset ( )
virtual

Reimplemented in neo::steady_timer.

◆ setup_callbacks()

void neo::generic_timer::setup_callbacks ( )
private

◆ start()

void neo::generic_timer::start ( )
virtual

Reimplemented in neo::steady_timer.

◆ stop()

void neo::generic_timer::stop ( )
virtual

Reimplemented in neo::steady_timer.

◆ teardown_callbacks()

void neo::generic_timer::teardown_callbacks ( )
private

Member Data Documentation

◆ _active

bool neo::generic_timer::_active = false
private

◆ _cbk

std::function<void(generic_timer &)> neo::generic_timer::_cbk = nullptr
private

◆ _cbk_task

TaskHandle_t neo::generic_timer::_cbk_task = nullptr
private

◆ _cfg

timer_config_t neo::generic_timer::_cfg = timer_config_default
private

◆ _core_affinity

BaseType_t neo::generic_timer::_core_affinity = tskNO_AFFINITY
private

◆ _group

timer_group_t neo::generic_timer::_group = TIMER_GROUP_MAX
private

◆ _idx

timer_idx_t neo::generic_timer::_idx = TIMER_MAX
private

◆ _period

std::chrono::milliseconds neo::generic_timer::_period = 0ms
private

◆ generic_timer_base_frequency

constexpr std::uint32_t neo::generic_timer::generic_timer_base_frequency = 2'000
staticconstexprprivate

We have the timer in ms, but we cannot specify a sufficiently large divider to get 1KHz, so we operate at 2KHz.

◆ timer_config_default

constexpr timer_config_t neo::generic_timer::timer_config_default
staticconstexprprivate
Initial value:
{
.alarm_en = TIMER_ALARM_EN,
.counter_en = TIMER_PAUSE,
.intr_type = TIMER_INTR_LEVEL,
.counter_dir = TIMER_COUNT_UP,
.auto_reload = TIMER_AUTORELOAD_EN,
.clk_src = TIMER_SRC_CLK_DEFAULT,
.divider = 80'000'000 / generic_timer_base_frequency}
static constexpr std::uint32_t generic_timer_base_frequency
Definition: timer.hpp:30

The documentation for this class was generated from the following files: