CPU Time¶
The MyNewt cputime
module provides high resolution time and timer
support.
Description¶
The cputime
API provides high resolution time and timer support. The
module must be initialized, using the os_cputime_init()
function,
with the clock frequency to use. The module uses the hal_timer
API,
defined in hal/hal_timer.h, to access the hardware timers. It uses the
hardware timer number specified by the OS_CPUTIME_TIMER_NUM
system
configuration setting.
API¶
-
int
os_cputime_init
(uint32_t clock_freq)¶ Initialize the cputime module.
This must be called after os_init is called and before any other timer API are used. This should be called only once and should be called before the hardware timer is used.
- Return
int 0 on success; -1 on error.
- Parameters
clock_freq
: The desired cputime frequency, in hertz (Hz).
-
uint32_t
os_cputime_get32
(void)¶ Returns the low 32 bits of cputime.
- Return
uint32_t The lower 32 bits of cputime
-
uint32_t
os_cputime_nsecs_to_ticks
(uint32_t nsecs)¶ Converts the given number of nanoseconds into cputime ticks.
Not defined if OS_CPUTIME_FREQ_PWR2 is defined.
- Return
uint32_t The number of ticks corresponding to ‘nsecs’
- Parameters
usecs
: The number of nanoseconds to convert to ticks
-
uint32_t
os_cputime_ticks_to_nsecs
(uint32_t ticks)¶ Convert the given number of ticks into nanoseconds.
Not defined if OS_CPUTIME_FREQ_PWR2 is defined.
- Return
uint32_t The number of nanoseconds corresponding to ‘ticks’
- Parameters
ticks
: The number of ticks to convert to nanoseconds.
-
void
os_cputime_delay_nsecs
(uint32_t nsecs)¶ Wait until ‘nsecs’ nanoseconds has elapsed.
This is a blocking delay. Not defined if OS_CPUTIME_FREQ_PWR2 is defined.
- Parameters
nsecs
: The number of nanoseconds to wait.
-
uint32_t
os_cputime_usecs_to_ticks
(uint32_t usecs)¶ Converts the given number of microseconds into cputime ticks.
- Return
uint32_t The number of ticks corresponding to ‘usecs’
- Parameters
usecs
: The number of microseconds to convert to ticks
-
uint32_t
os_cputime_ticks_to_usecs
(uint32_t ticks)¶ Convert the given number of ticks into microseconds.
- Return
uint32_t The number of microseconds corresponding to ‘ticks’
- Parameters
ticks
: The number of ticks to convert to microseconds.
-
void
os_cputime_delay_ticks
(uint32_t ticks)¶ Wait until the number of ticks has elapsed.
This is a blocking delay.
- Parameters
ticks
: The number of ticks to wait.
-
void
os_cputime_delay_usecs
(uint32_t usecs)¶ Wait until ‘usecs’ microseconds has elapsed.
This is a blocking delay.
- Parameters
usecs
: The number of usecs to wait.
-
void
os_cputime_timer_init
(struct hal_timer *timer, hal_timer_cb fp, void *arg)¶ Initialize a CPU timer, using the given HAL timer.
- Parameters
timer
: The timer to initialize. Cannot be NULL.fp
: The timer callback function. Cannot be NULL.arg
: Pointer to data object to pass to timer.
-
int
os_cputime_timer_start
(struct hal_timer *timer, uint32_t cputime)¶ Start a cputimer that will expire at ‘cputime’.
If cputime has already passed, the timer callback will still be called (at interrupt context).
NOTE: This must be called when the timer is stopped.
- Return
int 0 on success; EINVAL if timer already started or timer struct invalid
- Parameters
timer
: Pointer to timer to start. Cannot be NULL.cputime
: The cputime at which the timer should expire.
-
int
os_cputime_timer_relative
(struct hal_timer *timer, uint32_t usecs)¶ Sets a cpu timer that will expire ‘usecs’ microseconds from the current cputime.
NOTE: This must be called when the timer is stopped.
- Return
int 0 on success; EINVAL if timer already started or timer struct invalid
- Parameters
timer
: Pointer to timer. Cannot be NULL.usecs
: The number of usecs from now at which the timer will expire.
-
void
os_cputime_timer_stop
(struct hal_timer *timer)¶ Stops a cputimer from running.
The timer is removed from the timer queue and interrupts are disabled if no timers are left on the queue. Can be called even if timer is not running.
- Parameters
timer
: Pointer to cputimer to stop. Cannot be NULL.
-
CPUTIME_LT
(__t1, __t2)¶ evaluates to true if t1 is before t2 in time
-
CPUTIME_GT
(__t1, __t2)¶ evaluates to true if t1 is after t2 in time
-
CPUTIME_GEQ
(__t1, __t2)¶ evaluates to true if t1 is after t2 in time
-
CPUTIME_LEQ
(__t1, __t2)¶ evaluates to true if t1 is on or after t2 in time