|
STC15W408AS library 0.16.0
|
Macros | |
| #define | CLK_DIV_MASK 0x07 |
| MCU frequency divider bitmask (3 low bits of CLK_DIV registry) | |
| #define | get_master_clock_frequency() (MAIN_Fosc) |
| Get MAIN_Fosc value. | |
| #define | get_master_clock_frequency_high_part() (MAIN_FoscH) |
| Get high part of MAIN_Fosc defined as MAIN_FoscH in sys.h. | |
| #define | get_master_clock_frequency_low_part() (MAIN_FoscL) |
| Get low part of MAIN_Fosc defined as MAIN_FoscL in sys.h. | |
| #define | get_frequency_divider() (1 << get_frequency_divider_scale()) |
| Get master clock frequency divider (1 << CLK_DIV bits [0..2]) | |
| #define | get_frequency_divider_scale() (CLK_DIV & CLK_DIV_MASK) |
| Get master clock frequency divider scale (CLK_DIV bits [0..2]) | |
| #define | set_frequency_divider_scale(divider_scale) |
| Update and get master clock frequency divider (CLK_DIV bits [0..2]) | |
| #define | SYSclk (get_master_clock_frequency() >> get_frequency_divider_scale()) |
| System clock frequency. | |
| #define | enable_master_clock_output_div1() (CLK_DIV |= 0x40) |
| Enable master clock output. By default output set to P5.4 pin. | |
| #define | enable_master_clock_output_div2() (CLK_DIV |= 0x80) |
| Enable (master clock output)/2. By default output set to P5.4 pin. | |
| #define | enable_master_clock_output_div4() (CLK_DIV |= 0xC0) |
| Enable (master clock output)/4. By default output set to P5.4 pin. | |
| #define | disable_master_clock_output() (CLK_DIV &= 0x3f) |
| Disable master clock output. | |
| #define | get_master_clock_output_pin() ((CLK_DIV & 0xC0) == 0 ? NONE : (CLK_DIV & 0x08) == 0 ? P5_4 : P1_6) |
| Get master clock output. | |
| #define | set_master_clock_output_pin(pin) |
| Set master clock output pin. | |
Enumerations | |
| enum | master_clock_output_pin_t { NONE , P5_4 , P1_6 } |
| Master clock output pins enumeration. More... | |
Functions and data structures for get chip CPU frequency. Chip CPU frequency defined in sys.h as a MAIN_Fosc constant.
| #define disable_master_clock_output | ( | ) | (CLK_DIV &= 0x3f) |
Disable master clock output.
| #define enable_master_clock_output_div1 | ( | ) | (CLK_DIV |= 0x40) |
Enable master clock output. By default output set to P5.4 pin.
| #define enable_master_clock_output_div2 | ( | ) | (CLK_DIV |= 0x80) |
Enable (master clock output)/2. By default output set to P5.4 pin.
| #define enable_master_clock_output_div4 | ( | ) | (CLK_DIV |= 0xC0) |
Enable (master clock output)/4. By default output set to P5.4 pin.
| #define get_frequency_divider | ( | ) | (1 << get_frequency_divider_scale()) |
Get master clock frequency divider (1 << CLK_DIV bits [0..2])
| #define get_frequency_divider_scale | ( | ) | (CLK_DIV & CLK_DIV_MASK) |
Get master clock frequency divider scale (CLK_DIV bits [0..2])
| #define get_master_clock_frequency | ( | ) | (MAIN_Fosc) |
Get MAIN_Fosc value.
| #define get_master_clock_frequency_high_part | ( | ) | (MAIN_FoscH) |
Get high part of MAIN_Fosc defined as MAIN_FoscH in sys.h.
| #define get_master_clock_frequency_low_part | ( | ) | (MAIN_FoscL) |
Get low part of MAIN_Fosc defined as MAIN_FoscL in sys.h.
| #define get_master_clock_output_pin | ( | ) | ((CLK_DIV & 0xC0) == 0 ? NONE : (CLK_DIV & 0x08) == 0 ? P5_4 : P1_6) |
Get master clock output.
| #define set_frequency_divider_scale | ( | divider_scale | ) |
Update and get master clock frequency divider (CLK_DIV bits [0..2])
Before setting divider value validate if divider scale is out of range 0..7.
| divider_scale | uint8 scale from 0 to 7 corresponds dividers 1, 2, 4, ...128 |
| #define set_master_clock_output_pin | ( | pin | ) |
Set master clock output pin.
| pin | master_clock_output_pin_t pin to set output |
| #define SYSclk (get_master_clock_frequency() >> get_frequency_divider_scale()) |
System clock frequency.
This routine calculates the actual system clock frequency that the CPU is running at, taking into account the main oscillator frequency and the clock divider setting.
The formula is: SYSclk = MAIN_Fosc / (2^divider_scale) where:
This represents the effective CPU clock frequency after any prescaling has been applied. For example, if MAIN_Fosc is 11,059,200 Hz and the divider_scale is 1 (dividing by 2), then SYSclk would be 5,529,600 Hz.