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);
- 系统时钟动态调节:时钟可以在SDK中根据用户需求进行系统时钟和sdram时钟进行调节,使用API头文件
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 |
从系统时钟切换测试的消耗时间可知,如果原始时钟频率较低,则切换时间就较长。