7.37. 系统动态时钟

Overview

介绍系统的动态时钟


7.37.1. 动态时钟API

  • 系统时钟动态调节:时钟可以在SDK中根据用户需求进行系统时钟和sdram时钟进行调节,使用API头文件 include_lib/driver/cpu/wl82/asm/clock.h

    使用的API接口如下:

    //系统空闲模式时钟切换函数:系统和Sdram时钟固定在24M
    void system_clock_set_idle(void);
    
    //系统时钟切换函数:时钟参数,clk范围:24000000 - 396000000 (24M-396M)
    void system_clock_set(u32 clk);
    
    //系统时钟+sdram时钟切换:sys_clk时钟参数,范围:24000000 - 396000000 (24M-396M);sdram_clk时钟参数,范围:24000000 - 244000000 (24M-244M)
    void system_sdram_clock_set(u32 sys_clk, u32 sdram_clk);
    
    //sdram时钟切换:clk时钟参数,范围:24000000 - 244000000 (24M-244M)
    void sdram_clock_set(u32 clk);
    
    //恢复SDK默认系统+sdram时钟:恢复到系统上电的初始值
    void system_clock_set_default(void);
    

Note

同时更改系统时钟(sys_clk)和sdram时钟(sdram_clk)时,尽量系统和sdram时钟差别不能太大,如系统24M、sdram 120M是不可行的;在系统时钟<160M时,建议sdram时钟和系统时钟一样,另外使用sdram同时不能频繁切换sdram时钟,否则可能出现不可预估结果。 在SDK使用API动态修改时钟,需要注意:不是所有的频率都可以设置,关键在 isd_config_rule.c 文件中选择:

①SDRAM_PLL3_EN = 0,且 SDRAM_PLL3_NOUSB_EN = 0; sys_clk = 320M、240M、192M、160M、120M、96M、48M、40M、24M,则SDK动态修改系统时钟均只能在这些时钟中选择,sdram时钟可在24M到244M选择任意一个即可,即24M <= sdram_clk <= 244M。 240M < sys_clk < 384M,则SDK动态修改系统时钟:240M < sys_clk < 384M,sdram时钟无法修改,此时sdram_clk=sys_clk*1.5/2。 384M <= sys_clk <= 396M,则SDK动态修改系统时钟:384M <= sys_clk <= 396M,sdram时钟无法修改,此时sdram_clk=sys_clk/2。

②SDRAM_PLL3_EN = 1,且 SDRAM_PLL3_NOUSB_EN = 0; 24M < sys_clk < 396M,但是sdram时钟固定240M,因此系统时钟调节时候不能过低。

③SDRAM_PLL3_EN = 0,且 SDRAM_PLL3_NOUSB_EN = 1; 24M < sys_clk < 396M,24M < sdram_clk < 244M,但是SDK不能使用USB2.0接口。

Important

工程运行过程中,切换系统时钟所消耗的时间参考如下:

时钟切换

时间

24MHz->320MHz

6.20ms

320MHz->24MHz

4.05ms

24MHz->32MHz

7.16ms

240MHz->320MHz

3.21ms

从系统时钟切换测试的消耗时间可知,如果原始时钟频率较低,则切换时间就较长。