STC15W408AS library 0.17.0
Loading...
Searching...
No Matches
Functions
Timer ticks to duration/frequency and vise versa conversions

Functions

uint32_t timer_ticks_to_Hz (uint16_t ticks, timer_clock_divider_t timer_clock_divider, uint16_t frequency_divider_scale)
 Converts ticks to timer frequency.
 
uint16_t timer_Hz_to_ticks (uint32_t frequency, timer_clock_divider_t timer_clock_divider, uint8_t frequency_divider_scale)
 Converts given timer overflow frequency to ticks.
 
uint8_t timer_Hz_to_ticks_8bit (uint32_t frequency, timer_clock_divider_t timer_clock_divider, uint8_t frequency_divider_scale)
 Converts given timer overflow frequency to ticks for 8bit timer mode.
 
uint16_t timer_16bit_ticks_to_ms (uint16_t ticks, timer_clock_divider_t timer_divider, uint8_t frequency_divider_scale)
 Converts 16-bit mode timer ticks count to ms.
 
uint16_t timer_8bit_ticks_to_mcs (uint8_t ticks, timer_clock_divider_t timer_divider, uint8_t frequency_divider_scale)
 Converts 8-bit mode timer ticks count to microseconds.
 
uint16_t timer_ms_to_ticks (uint16_t ms, timer_clock_divider_t divider, uint8_t frequency_divider_scale)
 Converts milliseconds to 16-bit timer ticks.
 

Detailed Description

Functions and data structures for converting timer ticks to frequency and times for timers.

Author
Michael Golovanov

Function Documentation

◆ timer_16bit_ticks_to_ms()

uint16_t timer_16bit_ticks_to_ms ( uint16_t  ticks,
timer_clock_divider_t  timer_divider,
uint8_t  frequency_divider_scale 
)

Converts 16-bit mode timer ticks count to ms.

Attention
This routine use integer division math and therefore have a calculation inaccuracy.
Parameters
ticksuint16_t ticks count. Range 7...65535
timer_dividertimer_clock_divider_t 1T or 12T timer clock divider
frequency_divider_scaleuint8_t MCU frequency divider scale 0..7
Returns
uint16_t milliseconds time corresponing to timer ticks. Range 0..9043

◆ timer_8bit_ticks_to_mcs()

uint16_t timer_8bit_ticks_to_mcs ( uint8_t  ticks,
timer_clock_divider_t  timer_divider,
uint8_t  frequency_divider_scale 
)

Converts 8-bit mode timer ticks count to microseconds.

Attention
This routine use integer division math and therefore have a calculation inaccuracy.
Parameters
ticksuint8_t ticks count.
timer_dividertimer_clock_divider_t 1T or 12T timer clock divider
frequency_divider_scaleuint8_t MCU frequency divider scale 0..7
Returns
uint16_t microseconds time corresponing to timer ticks. Up to 35328.

◆ timer_Hz_to_ticks()

uint16_t timer_Hz_to_ticks ( uint32_t  frequency,
timer_clock_divider_t  timer_clock_divider,
uint8_t  frequency_divider_scale 
)

Converts given timer overflow frequency to ticks.

Frequency to ticks is a reverse operation of ticks to frequency,

Not all frequency ranges can be correctly coverted to ticks. If ticks count for frequency is greater than UINT16_MAX then return 0.

Parameters
frequencyuint32_t frequency
timer_clock_dividertimer_clock_divider_t enum T12 or T1 timer clock divider
frequency_divider_scaleuint8_t mcu clock frequency diviver scale in range of [0..7]
Returns
uint16_t ticks count for input parameters or 0 on uint16_t overflow

◆ timer_Hz_to_ticks_8bit()

uint8_t timer_Hz_to_ticks_8bit ( uint32_t  frequency,
timer_clock_divider_t  timer_clock_divider,
uint8_t  frequency_divider_scale 
)

Converts given timer overflow frequency to ticks for 8bit timer mode.

Frequency to ticks is a reverse operation of ticks to frequency,

Not all frequency ranges can be correctly coverted to ticks. If ticks count for frequency is greater than UINT8_MAX then return 0.

Parameters
frequencyuint32_t frequency
timer_clock_dividertimer_clock_divider_t enum T12 or T1 timer clock divider
frequency_divider_scaleuint8_t mcu clock frequency diviver scale in range of [0..7]
Returns
uint8_t ticks count for input parameters or 0 on uint8_t overflow

◆ timer_ms_to_ticks()

uint16_t timer_ms_to_ticks ( uint16_t  ms,
timer_clock_divider_t  divider,
uint8_t  frequency_divider_scale 
)

Converts milliseconds to 16-bit timer ticks.

This function converts a given time duration in milliseconds to the corresponding 16-bit timer reload/tick count based on the MCU's clock frequency, timer clock divider (T1 or T12), and the system frequency divider scale. The calculation assumes:

  • Timer operates in one of the standard modes (e.g., Mode 1 - 16-bit timer).
  • The timer counts up from the initial value to 0xFFFF (65535), so the number of ticks before overflow is (65536 - initial_value).

The formula used: ticks = ms × (MCU_frequency / 1000) / timer_clock_divider where:

  • MCU_frequency = MAIN_Fosc >> frequency_divider_scale
  • timer_clock_divider = 1 for 1T mode, 12 for 12T mode
Warning
If the computed tick count exceeds 65535, it will be clamped to 0. It is the caller's responsibility to ensure that input values result in valid tick counts within the allowable timer range.
Inaccuracies may arise due to integer division truncation, especially at higher frequency divider scales or very small millisecond values.
Parameters
msuint16_t Time duration in milliseconds [1..~9000 depending on clock]
dividertimer_clock_divider_t Clock divider for the timer: T1 (1T mode) or T12 (12T mode)
frequency_divider_scaleuint8_t System clock divider scale (0..7), used as shift right amount on MAIN_Fosc
Returns
uint16_t Number of timer ticks corresponding to the input time. Returns 0 if the result overflows uint16_t range.
Note
Example: For MAIN_Fosc = 11059200 Hz, frequency_divider_scale = 0, divider = T12 (12): mcu_freq_ms = 11059200 / 1000 = 11059 timer_freq_ms = 11059 / 12 ≈ 921 ms = 10 → ticks = 10 * 921 = 9210

◆ timer_ticks_to_Hz()

uint32_t timer_ticks_to_Hz ( uint16_t  ticks,
timer_clock_divider_t  timer_clock_divider,
uint16_t  frequency_divider_scale 
)

Converts ticks to timer frequency.

The output frequency = (SYSclk/timer_clock_divider)/(1 + ticks).

uint16 ticks used in timer mode 0, 1, 3. For timer mode2 (8 bit autoreladable timer) ticks can be in 0..255 range.

Parameters
ticksuint16_t timer ticks count to covert
timer_clock_divideruint8_t timer clock divider T12 or T1
frequency_divider_scaleuint8_t mcu frequency divider scale 0..7
Returns
uint32_t timer overflow frequency corresponding to given ticks count