复位和时钟单元

复位控制单元

T0 芯片复位控制包括三种控制方式:电源复位、系统复位和备份域复位。电源复位又称为 冷复位,其复位除了备份域的所有系统。 系统复位将复位除了 JTAG 控制器和备份域之外的其余部分,包括处理器内核和外设 IP 。 备份域复位将复位备份区域。复位能够被外部信号、内部事件和复位发生器触发。

具体的复位控制如 复位控制表 所示。

复位控制表

复位来源

复位名称\复位域

cpu0

cpu1

cpu2

sys_bus

brom_sys

brom_por

系统复位

nrst引脚

x

x

x

x

-

x

系统复位

cpu0_sysrstreq

x

x

x

x

-

x

系统复位

cpu1_sysrstreq

x

x

x

x

-

x

系统复位

cpu2_sysrstreq

x

x

x

x

-

x

系统复位

iwdg_out_rst

x

x

x

x

-

x

系统复位

wwdg0_out_rst

x

x

x

x

-

x

系统复位

wwdg1_out_rst

x

x

x

x

-

x

电源复位

sys_por

x

x

x

x

x

x

电源复位

aon_por

-

-

-

-

-

-

电源复位

sys_pu_rst

x

x

x

x

x

x

电源复位

pvd_rst

-

-

-

-

-

-

RCC

bdrst(备份域复位)

-

-

-

-

-

-

RCC

cpu0_rst

x

-

-

x

-

x

RCC

cpu1_rst

-

x

-

x

-

x

RCC

cpu2_rst

-

-

x

x

-

x

bootrom

brom_rst_n_o

x

-

-

-

-

-

复位控制表(续1)

复位来源

复位名称\复位域

wwdg0

wwdg1

efuse

iwdg

pmu_por

pmu_pudc

系统复位

nrst引脚

x

x

-

x

-

-

系统复位

cpu0_sysrstreq

x

x

-

x

-

-

系统复位

cpu1_sysrstreq

x

x

-

x

-

-

系统复位

cpu2_sysrstreq

x

x

-

x

-

-

系统复位

iwdg_out_rst

x

x

-

x

-

-

系统复位

wwdg0_out_rst

x

x

-

x

-

-

系统复位

wwdg1_out_rst

x

x

-

x

-

-

电源复位

sys_por

x

x

x

-

-

-

电源复位

aon_por

-

-

-

x

x

-

电源复位

sys_pu_rst

x

x

x

-

-

-

电源复位

pvd_rst

-

-

-

x

-

x

RCC

bdrst(备份域复位)

-

-

-

-

-

-

RCC

cpu0_rst

x

-

-

-

-

-

RCC

cpu1_rst

-

x

-

-

-

-

RCC

cpu2_rst

-

-

-

-

-

-

bootrom

brom_rst_n_o

-

-

-

-

-

-

复位控制表(续2)

复位来源

复位名称\复位域

pmu_rcc

aond_fab

rtc

备注

系统复位

nrst引脚

x

x

-

系统复位输入源,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

cpu0_sysrstreq

x

x

-

cpu输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

cpu1_sysrstreq

x

x

-

cpu输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

cpu2_sysrstreq

x

x

-

cpu输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

iwdg_out_rst

x

x

-

iwdg 输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

wwdg0_out_rst

x

x

-

wwdg0 输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

系统复位

wwdg1_out_rst

x

x

-

wwdg1 输出复位请求,

复位系统域所有外设和时钟树,

不影响 debug 和 aond 域功能

电源复位

sys_por

-

x

-

系统域上电复位

电源复位

aon_por

x

x

x

常开域上电复位

电源复位

sys_pu_rst

-

x

-

系统域的唤醒复位

电源复位

pvd_rst

x

x

-

触发模拟域复位和 pmu 上电序列

RCC

bdrst(备份域复位)

-

-

x

软件触发的备份域复位

仅用于 rtc 和 backup ram

RCC

cpu0_rst

-

-

-

仅用于 cpu0 复位

RCC

cpu1_rst

-

-

-

仅用于 cpu1 复位

RCC

cpu2_rst

-

-

-

仅用于 cpu2 复位

bootrom

brom_rst_n_o

-

-

-

用于 cpu0 上电复位

Note

- 表示不可被复位

x 表示可以被复位

时钟控制单元

时钟控制单元目的是为系统提供了一系列时钟频率,系统时钟框图如 时钟树 所示。

../_images/clock_diagram.png

时钟树

上图中的 peripheral_clk_i 表示的是外设的寄存器配置时钟, peripheral_intf_clk_i表示的是外设的数据/接口时钟,详细配置信息请查看系统配置寄存器。

振荡器

  • 外部低速晶振 lse(32768Hz) 为常开域提供时钟,为 rtc 提供精确参考时钟

  • 外部高速晶振 hse 为系统域 pll 提供参考时钟,建议 20MHz 时钟频率

  • 外部高速晶振 ddr_osc 为 ddr 的pll提供参考时钟

  • 内部低速振荡器 lsi 为常开域提供时钟

  • 内部高速振荡器 hsi 为系统域提供上电时钟

  • 外部 pad 参考时钟(clk_in0、clk_in1、clk_in2、clk_in3)

PLL

PLL 的作用是将频率较低的参考时钟(例如 20 MHz 的 hse 时钟)使用 PLL 锁相环电路倍频到更高的时钟。

系统中提供了 3 个 PLL 为 CPU 和其他外设选择合适的时钟频率,可以独立配置。

还提供了 1 个 专用 PLL 为 ddr 生成内核时钟,

另外提供了 1 个 专用 PLL 为 USB PHY生成时钟。

系统上的 3 个 PLL VCO 最为 1600MHz,当 PLL 的 M、N 改变的时候,PLL 需要重新复位,然后等到 PLL LOCK 才可以正常使用,其时序图如下所示。

pll 时序图

PLL 输出频率 CLK_OUT 计算公式:CLK_OUT = XIN * M / N /NO"; 其中 NO = 2OD,OD 为分频寄存器,XIN 表示 PLL 输入参考频率,N 表示输入分频器寄存器,M 表示倍频器寄存器。

并且需要满足以下条件: .. note:

1. 1MHz ≤ XIN / N ≤ 50MHz

2. 500MHz ≤ CLK_OUT * NO ≤ 1600MHz

3. M ≥ 2

4. N ≥ 1

时钟选择器

时钟选择器分布表

时钟名称

时钟频率

clkmux

lsi

lse

hsi

hse

sys_pll_clk

sys_pll_clk_div2

core1_pll_clk

xuc_pll_clk

clk_in1

clk_in2

clk_in3

clk_in4

lsi

32768Hz

-

片上振荡器 lsi

-

-

-

-

-

-

-

-

-

-

-

lse

32768Hz

-

-

外部 32768Hz 晶振

-

-

-

-

-

-

-

-

-

-

hsi

16M

-

-

-

片上振荡器 hsi

-

-

-

-

-

-

-

-

hse

1M ~ 30M

-

-

-

-

取决于外部晶体频率

-

-

-

-

-

-

-

-

rtc_clk_i

32768Hz

RTC_CLK_S

0

1

hsi_div512

-

-

-

-

-

-

-

-

-

aond_sys_clk_s

16M

AOND_SYS_CLK_S

-

-

0

1

-

-

-

-

-

-

-

-

clk_tmr_toggle_s

32768Hz

CLK_TMR_TOGGLE_S

0

1

aond_sys_clk

-

-

-

-

-

-

-

-

-

cluster1_clk_i

400M

CLUSTER1_CLK_MUX

-

-

0

1

2

-

3

4

-

-

-

-

cluster2_clk_i

400M

CLUSTER2_CLK_MUX

-

-

0

1

2

-

3

4

-

-

-

-

bus

200M

SYS_CLK_MUX

-

-

0

1

2

3

4

5

-

-

-

-

sys_pll_clk

400M ~ 1600M

SYS_PLL_CLK_S

-

-

0

1

-

-

-

-

2

3

-

-

core1_pll_clk

400M ~ 1600M

CORE1_PLL_CLK_S

-

-

0

1

-

-

-

-

2

3

-

-

xuc_pll_clk

400M ~ 1600M

XUC_PLL_CLK_S

-

-

0

1

-

-

-

-

2

3

-

-

bkdr_efuse_clk_i

16M

BKDR_EFUSE_CLK_S

-

-

0

1

-

-

-

-

2

3

-

-

sys_clk

200M

SYS_CLK_CLKMUX

-

-

0

1

2

3

4

5

-

-

-

-

sys_intf_clk

200M

SYS_INTF_CLK_CLKMUX

-

-

0

1

2

3

4

5

-

-

-

-

nacc0_clk_s

500M

NACC0_CLK_S

-

-

0

1

2

-

3

4

-

-

-

-

disp_pixel_clk_s

200M

DISP_PIXEL_CLK_S

-

-

0

-

1

2

3

4

5

6

-

-

dcmi_pixel_clk_s

200M

DCMI_PIXEL_CLK_S

-

-

0

-

1

2

3

4

5

6

-

-

xec_sys_clk_s

500M

XEC_SYS_CLK_S

-

-

0

-

1

2

3

4

5

6

-

-

xec_rmii_clk_s

500M

XEC_RMII_CLK_S

-

-

0

-

1

2

3

4

5

6

-

-

xuc_clk_s

500M

XUC_CLK_S

-

-

0

-

1

2

3

4

-

-

5

6

usb_top_extrefclk_i

20M

USB_TOP_EXTREFCLK_S

-

-

-

0

-

-

1

2

3

4

5

6

sai0_s0_clk_s

200M

SAI0_S0_CLK_S

-

-

0

-

1

2

3

4

5

6

7

8

sai0_s1_clk_s

200M

SAI0_S1_CLK_S

-

-

0

-

1

2

3

4

5

6

7

8

sai0_s2_clk_s

200M

SAI0_S2_CLK_S

-

-

0

-

1

2

3

4

5

6

7

8

sai0_s3_clk_s

200M

SAI0_S3_CLK_S

-

-

0

-

1

2

3

4

5

6

7

8

spdifrx0_clk_s

200M

SPDIFRX0_CLK_S

-

-

0

-

1

2

3

4

5

6

7

8

ctc0_clk_s

200M

CTC0_CLK_S

0

1

2

3

4

5

6

7

8

9

10

11

时钟分频器

分频器将 PLL 的输出分频到 IP 所需的频率,经过时钟的选择、分频等操作之后产生并输出根时钟。软件可以配置范围为[0,255],0 表示不分频, 1 表示 2 分频,以此类推。

时钟分频表

分频器输出

分频器输入

期望频率

分频能力

默认分频值

aond_sys_clk

aond_sys_clk_s

1M

[0,63]

15

soc_aond_misc_sys_clk

aond_sys_clk

1M

-

-

sys_pll_clk_div2

sys_clk

400M

[0,1]

1

core0_clk_i

sys_clk

200M

-

-

soc_sys_misc_sys_clk

sys_clk

200M

-

-

soc_hsm_misc_sys_clk

sys_clk

200M

-

-

mailbox_clk_i

sys_clk

200M

-

-

atb2axi0_clk_i

sys_clk

200M

-

-

sys_cache_clk_i

sys_clk

200M

-

-

fft0_clk_i

sys_clk

200M

[0,255]

0

idu_clk_i

sys_clk

200M

[0,255]

0

acc_udma0_clk_i

sys_clk

200M

[0,255]

0

acc_udma1_clk_i

sys_clk

200M

[0,255]

0

sys_udma_clk_i

sys_clk

200M

[0,255]

0

hsm_udma_clk_i

sys_clk

200M

[0,255]

0

flt_math_udma_clk_i

sys_clk

200M

[0,255]

0

flt_math_clk_i

sys_clk

200M

[0,255]

0

filter0_clk_i

sys_clk

200M

[0,255]

0

soc_glue_clk_i

sys_clk

200M

[0,255]

0

g2d0_clk_i

sys_clk

200M

[0,255]

0

jpeg0_clk_i

sys_clk

200M

[0,255]

0

nacc0_clk_i

nacc0_clk_s

250M

[0,255]

0

advanced_timerc0_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc1_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc2_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc3_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc4_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc5_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc6_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc7_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc8_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc9_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc10_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc11_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc12_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc13_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc14_clk_i

sys_clk

100M

[0,255]

0

advanced_timerc15_clk_i

sys_clk

100M

[0,255]

0

gmc0_clk_i

sys_clk

100M

[0,255]

0

iomux_clk_i

sys_clk

100M

[0,255]

0

lgpio0_clk_i

sys_clk

100M

[0,255]

0

mdios0_clk_i

sys_clk

100M

[0,255]

0

cordic0_clk_i

sys_clk

100M

[0,255]

0

usart0_clk_i

sys_clk

100M

[0,255]

0

usart0_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart1_clk_i

sys_clk

100M

[0,255]

0

usart1_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart2_clk_i

sys_clk

100M

[0,255]

0

usart2_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart3_clk_i

sys_clk

100M

[0,255]

0

usart3_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart4_clk_i

sys_clk

100M

[0,255]

0

usart4_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart5_clk_i

sys_clk

100M

[0,255]

0

usart5_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart6_clk_i

sys_clk

100M

[0,255]

0

usart6_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart7_clk_i

sys_clk

100M

[0,255]

0

usart7_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart8_clk_i

sys_clk

100M

[0,255]

0

usart8_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart9_clk_i

sys_clk

100M

[0,255]

0

usart9_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart10_clk_i

sys_clk

100M

[0,255]

0

usart10_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart11_clk_i

sys_clk

100M

[0,255]

0

usart11_intf_lk_i

sys_intf_clk

100M

[0,255]

0

usart12_clk_i

sys_clk

100M

[0,255]

0

usart12_intf_lk_i

sys_intf_clk

100M

[0,255]

0

pid0_clk_i

sys_clk

100M

[0,255]

0

i2c0_clk_i

sys_clk

100M

[0,255]

0

i2c0_intf_lk_i

sys_intf_clk

100M

[0,255]

0

i2c1_clk_i

sys_clk

100M

[0,255]

0

i2c1_intf_lk_i

sys_intf_clk

100M

[0,255]

0

i2c2_clk_i

sys_clk

100M

[0,255]

0

i2c2_intf_lk_i

sys_intf_clk

100M

[0,255]

0

i2c3_clk_i

sys_clk

100M

[0,255]

0

i2c3_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi_xip0_clk_i

sys_clk

100M

[0,255]

0

qspi_xip0_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi_xip1_clk_i

sys_clk

100M

[0,255]

0

qspi_xip1_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi_xip2_clk_i

sys_clk

100M

[0,255]

0

qspi_xip2_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi3_clk_i

sys_clk

100M

[0,255]

0

qspi3_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi4_clk_i

sys_clk

100M

[0,255]

0

qspi4_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi5_clk_i

sys_clk

100M

[0,255]

0

qspi5_intf_lk_i

sys_intf_clk

100M

[0,255]

0

qspi6_clk_i

sys_clk

100M

[0,255]

0

qspi6_intf_lk_i

sys_intf_clk

100M

[0,255]

0

xkan0_clk_i

sys_clk

100M

[0,255]

0

xkan0_intf_lk_i

sys_intf_clk

100M

[0,255]

0

xkan1_clk_i

sys_clk

100M

[0,255]

0

xkan1_intf_lk_i

sys_intf_clk

100M

[0,255]

0

xkan2_clk_i

sys_clk

100M

[0,255]

0

xkan2_intf_lk_i

sys_intf_clk

100M

[0,255]

0

sai0_clk_i

sys_clk

100M

[0,255]

0

sai0_s0_intf_lk_i

sai0_s0_clk_s

100M

[0,255]

0

sai0_s1_intf_lk_i

sai0_s1_clk_s

100M

[0,255]

0

sai0_s2_intf_lk_i

sai0_s2_clk_s

100M

[0,255]

0

sai0_s3_intf_lk_i

sai0_s3_clk_s

100M

[0,255]

0

lgpio0_clk_i

sys_clk

100M

[0,255]

0

pcrc0_clk_i

sys_clk

100M

[0,255]

0

disp0_clk_i

sys_clk

100M

[0,255]

0

disp0_intf_clk_i

disp_pixel_clk_s

200M

[0,255]

0

dcmi0_clk_i

sys_clk

100M

[0,255]

0

dcmi0_intf_clk_i

dcmi_pixel_clk_s

200M

[0,255]

0

xec_gen20_sys_clk_i

xec_sys_clk_s

25M

[0,255]

19

xec_gen2_sys_clk_i

xec_sys_clk_s

125M

[0,255]

3

rmii_clk_ref_clk_i

xec_rmii_clk_s

50M

[0,255]

9

ptp_ref_clk_i

xec_sys_clk_s

125M

[0,255]

3

xuc0_clk_i

xuc_clk_s

120M

[0,255]

3

xuc_clk_phy_i

xuc_clk_s

60M

[0,255]

7

usb_top0_clk_i

xuc_clk_s

160M

[0,255]

0

usb_top_clkcore_i

xuc_clk_s

20M

[0,255]

19

ddr_top0_clk_i

sys_clk

200M

-

-

ddr_top0_axi_p0_clk_i

sys_clk

200M

-

-

sdio0_clk_i

sys_clk

200M

-

-

sdio0_intf_clk_i

sys_intf_clk

200M

[0,255]

0

hs_sdio0_clk_i

sys_clk

200M

[0,255]

0

hs_sdio0_intf_clk_i

sys_intf_clk

200M

[0,255]

0

spdifrx0_clk_i

sys_clk

100M

[0,255]

0

spdifrx0_intf_clk_i

spdifrx0_clk_s

100M

[0,255]

0

swpmi0_clk_i

sys_clk

100M

[0,255]

0

swpmi0_intf_clk_i

sys_intf_clk

100M

[0,255]

0

cec0_clk_i

sys_clk

100M

[0,255]

0

cec0_intf_clk_i

sys_intf_clk

100M

[0,255]

0

dfsdm0_clk_i

sys_clk

100M

[0,255]

0

dfsdm0_intf_clk_i

sys_intf_clk

100M

[0,255]

0

capc0_clk_i

sys_clk

100M

[0,255]

0

capc0_intf_clk_i

sys_intf_clk

100M

[0,255]

0

basic_timer0_clk_i

sys_clk

100M

[0,255]

0

acryp0_clk_i

sys_clk

100M

[0,255]

0

cryp0_clk_i

sys_clk

100M

[0,255]

0

hash0_clk_i

sys_clk

100M

[0,255]

0

trng0_clk_i

sys_clk

100M

[0,255]

0

trng0_clk_smp_i

sys_intf_clk

100M

[0,255]

0

wwdg0_clk_i

sys_clk

100M

[0,255]

0

wwdg1_clk_i

sys_clk

100M

[0,255]

0

brom0_clk_i

sys_clk

100M

[0,255]

0

adc_clk_i

sys_clk

100M

[0,255]

0

dac_clk_i

sys_clk

100M

[0,255]

0

vref_clk_i

sys_clk

100M

[0,255]

100M

opamp_clk_i

sys_clk

100M

[0,255]

0

comp_clk_i

sys_clk

100M

[0,255]

0

tsens_clk_i

sys_clk

100M

[0,255]

0

tsens_intf_clk_i

sys_intf_clk

100M

[0,255]

0

pvd_clk_i

sys_clk

100M

[0,255]

0

ctc0_clk_i

sys_clk

100M

[0,255]

0

ctc0_ref_clk_i

sys_intf_clk

100M

[0,255]

0

时钟同步

当更改某些时钟的时钟源时需要进行时钟的同步。

低功耗时钟门控

低功耗时钟门控(CG)可以关闭没有使用的时钟有效的降低功耗。