ESP-IDF
Select one of the symbols to view example projects that use it.
Symbol previews are coming soon...
Outline
#include "soc/clkout_channel.h"
#include "hal/assert.h"
#include "hal/clk_tree_hal.h"
#include "hal/clk_tree_ll.h"
#include "hal/gpio_ll.h"
#include "hal/log.h"
CLK_HAL_TAG
clk_hal_soc_root_get_freq_mhz(soc_cpu_clk_src_t)
switch
(cpu_clk_src)
case
SOC_CPU_CLK_SRC_XTAL:
case
SOC_CPU_CLK_SRC_PLL:
case
SOC_CPU_CLK_SRC_RC_FAST:
case
SOC_CPU_CLK_SRC_APLL:
default
clk_hal_cpu_get_freq_hz()
switch
(source)
case
SOC_CPU_CLK_SRC_PLL:
case
SOC_CPU_CLK_SRC_APLL:
if
(divider == 0)
default
clk_hal_ahb_get_freq_hz()
switch
(clk_ll_cpu_get_src())
case
SOC_CPU_CLK_SRC_PLL:
case
SOC_CPU_CLK_SRC_APLL:
default
clk_hal_apb_get_freq_hz()
clk_hal_lp_slow_get_freq_hz()
switch
(clk_ll_rtc_slow_get_src())
case
SOC_RTC_SLOW_CLK_SRC_RC_SLOW:
case
SOC_RTC_SLOW_CLK_SRC_XTAL32K:
case
SOC_RTC_SLOW_CLK_SRC_RC_FAST_D256:
default
clk_hal_xtal_get_freq_mhz()
if
(freq == 0)
clk_hal_apll_get_freq_hz()
clk_hal_clock_output_setup(soc_clkout_sig_id_t, clock_out_channel_t)
clk_hal_clock_output_teardown(clock_out_channel_t)
Files
loading (2/5)...
SourceVu
ESP-IDF Framework and Examples
ESP-IDF
components/hal/esp32/clk_tree_hal.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
/* ... */
#include
"
soc
/
clkout_channel.h"
#include
"
hal
/
assert.h"
#include
"
hal
/
clk_tree_hal.h"
#include
"
hal
/
clk_tree_ll.h"
#include
"
hal
/
gpio_ll.h"
#include
"
hal
/
log.h"
6 includes
static
const
char
*
CLK_HAL_TAG
=
"clk_hal"
;
uint32_t
clk_hal_soc_root_get_freq_mhz
(
soc_cpu_clk_src_t
cpu_clk_src
)
{
switch
(
cpu_clk_src
)
{
case
SOC_CPU_CLK_SRC_XTAL
:
return
clk_hal_xtal_get_freq_mhz
(
)
;
...
case
SOC_CPU_CLK_SRC_PLL
:
return
clk_ll_bbpll_get_freq_mhz
(
)
;
...
case
SOC_CPU_CLK_SRC_RC_FAST
:
return
SOC_CLK_RC_FAST_FREQ_APPROX
/
MHZ
;
...
case
SOC_CPU_CLK_SRC_APLL
:
return
clk_hal_apll_get_freq_hz
(
)
/
MHZ
;
...
default
:
// Unknown CPU_CLK mux input
HAL_ASSERT
(
false
)
;
return
0
;
...
}
{...}
}
{ ... }
uint32_t
clk_hal_cpu_get_freq_hz
(
void
)
{
soc_cpu_clk_src_t
source
=
clk_ll_cpu_get_src
(
)
;
switch
(
source
)
{
case
SOC_CPU_CLK_SRC_PLL
:
return
clk_ll_cpu_get_freq_mhz_from_pll
(
)
*
MHZ
;
...
case
SOC_CPU_CLK_SRC_APLL
:
{
uint32_t
apll_freq_hz
=
clk_hal_apll_get_freq_hz
(
)
;
uint32_t
divider
=
clk_ll_cpu_get_divider_from_apll
(
)
;
if
(
divider
==
0
)
{
HAL_LOGE
(
CLK_HAL_TAG
,
"Invalid cpu config"
)
;
return
0
;
}
{...}
return
apll_freq_hz
/
divider
;
}
{...}
...
default
:
// SOC_CPU_CLK_SRC_XTAL, SOC_CPU_CLK_SRC_RC_FAST...
return
clk_hal_soc_root_get_freq_mhz
(
source
)
*
MHZ
/
clk_ll_cpu_get_divider
(
)
;
...
}
{...}
}
{ ... }
static
uint32_t
clk_hal_ahb_get_freq_hz
(
void
)
{
// AHB_CLK path is highly dependent on CPU_CLK path
switch
(
clk_ll_cpu_get_src
(
)
)
{
case
SOC_CPU_CLK_SRC_PLL
:
// AHB_CLK is a fixed value when CPU_CLK is clocked from PLL
return
CLK_LL_AHB_MAX_FREQ_MHZ
*
MHZ
;
...
case
SOC_CPU_CLK_SRC_APLL
:
return
clk_hal_cpu_get_freq_hz
(
)
>
>
1
;
...
default
:
// SOC_CPU_CLK_SRC_XTAL, SOC_CPU_CLK_SRC_RC_FAST...
return
clk_hal_cpu_get_freq_hz
(
)
;
...
}
{...}
}
{ ... }
uint32_t
clk_hal_apb_get_freq_hz
(
void
)
{
return
clk_hal_ahb_get_freq_hz
(
)
;
}
{ ... }
uint32_t
clk_hal_lp_slow_get_freq_hz
(
void
)
{
switch
(
clk_ll_rtc_slow_get_src
(
)
)
{
case
SOC_RTC_SLOW_CLK_SRC_RC_SLOW
:
return
SOC_CLK_RC_SLOW_FREQ_APPROX
;
...
case
SOC_RTC_SLOW_CLK_SRC_XTAL32K
:
return
SOC_CLK_XTAL32K_FREQ_APPROX
;
...
case
SOC_RTC_SLOW_CLK_SRC_RC_FAST_D256
:
return
SOC_CLK_RC_FAST_D256_FREQ_APPROX
;
...
default
:
// Unknown RTC_SLOW_CLK mux input
HAL_ASSERT
(
false
)
;
return
0
;
...
}
{...}
}
{ ... }
uint32_t
clk_hal_xtal_get_freq_mhz
(
void
)
{
uint32_t
freq
=
clk_ll_xtal_load_freq_mhz
(
)
;
if
(
freq
==
0
)
{
return
(
uint32_t
)
SOC_XTAL_FREQ_AUTO
;
}
{...}
return
freq
;
}
{ ... }
uint32_t
clk_hal_apll_get_freq_hz
(
void
)
{
uint64_t
xtal_freq_hz
=
(
uint64_t
)
clk_hal_xtal_get_freq_mhz
(
)
*
1000000ULL
;
uint32_t
o_div
=
0
;
uint32_t
sdm0
=
0
;
uint32_t
sdm1
=
0
;
uint32_t
sdm2
=
0
;
clk_ll_apll_get_config
(
&
o_div
,
&
sdm0
,
&
sdm1
,
&
sdm2
)
;
uint32_t
numerator
=
(
(
4
+
sdm2
)
<
<
16
)
|
(
sdm1
<
<
8
)
|
sdm0
;
uint32_t
denominator
=
(
o_div
+
2
)
<
<
17
;
uint32_t
apll_freq_hz
=
(
uint32_t
)
(
(
xtal_freq_hz
*
numerator
)
/
denominator
)
;
return
apll_freq_hz
;
}
{ ... }
void
clk_hal_clock_output_setup
(
soc_clkout_sig_id_t
clk_sig
,
clock_out_channel_t
channel_id
)
{
gpio_ll_set_pin_ctrl
(
clk_sig
,
CLKOUT_CHANNEL_MASK
(
channel_id
)
,
CLKOUT_CHANNEL_SHIFT
(
channel_id
)
)
;
}
{ ... }
void
clk_hal_clock_output_teardown
(
clock_out_channel_t
channel_id
)
{
gpio_ll_set_pin_ctrl
(
0
,
CLKOUT_CHANNEL_MASK
(
channel_id
)
,
CLKOUT_CHANNEL_SHIFT
(
channel_id
)
)
;
}
{ ... }
Details
Show:
from
Types:
Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.
clk_ll_cpu_get_src()
clk_hal_xtal_get_freq_mhz()
gpio_ll_set_pin_ctrl()
clk_hal_apll_get_freq_hz()
clk_hal_cpu_get_freq_hz()
clk_ll_rtc_slow_get_src()
clk_ll_cpu_get_freq_mhz_from_pll()
clk_hal_lp_slow_get_freq_hz()
clk_hal_soc_root_get_freq_mhz()
clk_ll_bbpll_get_freq_mhz()
clk_ll_cpu_get_divider()
clk_hal_apb_get_freq_hz()
clk_ll_xtal_load_freq_mhz()
clk_hal_clock_output_setup()
clk_hal_clock_output_teardown()
clk_ll_cpu_get_divider_from_apll()
clk_hal_ahb_get_freq_hz()
clk_ll_apll_get_config()
false
HAL_ASSERT
MHZ
soc_cpu_clk_src_t::SOC_CPU_CLK_SRC_PLL
soc_cpu_clk_src_t::SOC_CPU_CLK_SRC_XTAL
soc_rtc_slow_clk_src_t::SOC_RTC_SLOW_CLK_SRC_XTAL32K
soc_rtc_slow_clk_src_t::SOC_RTC_SLOW_CLK_SRC_RC_FAST_D256
soc_rtc_slow_clk_src_t::SOC_RTC_SLOW_CLK_SRC_RC_SLOW
soc_xtal_freq_t::SOC_XTAL_FREQ_AUTO
soc_cpu_clk_src_t::SOC_CPU_CLK_SRC_RC_FAST
SOC_CLK_RC_FAST_FREQ_APPROX
soc_cpu_clk_src_t::SOC_CPU_CLK_SRC_APLL
SOC_CLK_XTAL32K_FREQ_APPROX
HAL_LOGE
SOC_CLK_RC_FAST_D256_FREQ_APPROX
SOC_CLK_RC_SLOW_FREQ_APPROX
clk_hal_clock_output_setup()::channel_id
clk_hal_clock_output_teardown()::channel_id
clk_hal_soc_root_get_freq_mhz()::cpu_clk_src
clk_hal_clock_output_setup()::clk_sig
CLKOUT_CHANNEL_MASK
CLKOUT_CHANNEL_SHIFT
CLK_HAL_TAG
CLK_LL_AHB_MAX_FREQ_MHZ
soc_cpu_clk_src_t
soc_clkout_sig_id_t
clock_out_channel_t