8. 系统时钟
8.1 时钟框图
图8.1.1 时钟系统及结构图

内部时钟或者外部时钟经过二选一后作为原始时钟Fosc,再经过PLL倍频后产生Fpll高频时钟,最后经过两组分频器分别得到系统时钟Fsys和USB模块的时钟Fusb4x。系统时钟Fsys直接或者经过时钟门控后提供给CH559的各个模块,各个模块并不需要同时工作,为了降低功耗,可以通过设置睡眠控制寄存器禁止无需工作的模块的时钟。
8.2 寄存器描述
表8.2.1 时钟控制寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
|---|---|---|---|
| CLOCK_CFG | B3h | 系统时钟配置寄存器 | 98h |
| PLL_CFG | B2h | PLL时钟配置寄存器 | D8h |
系统时钟配置寄存器(CLOCK_CFG),仅在安全模式下可写:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bOSC_EN_INT | RW | 内部时钟振荡器使能,该位为1使能内部时钟振荡器并且选用内部时钟;该位为0关闭内部时钟振荡器并且选用外部晶体振荡器提供时钟 | 1 |
| 6 | bOSC_EN_XT | RW | 外部晶体振荡器使能,该位为1则P4.6/P4.7引脚作为XI/XO并启用振荡器,需在XI和XO之间外接石英晶体或陶瓷振荡器;该位为0关闭外部振荡器 | 0 |
| 5 | bWDOG_IF_TO | R0 | 看门狗定时器中断标志位,该位为1表示有中断,由定时器溢出信号触发;该位为0表示无中断。该位在重新加载看门狗计数寄存器WDOG_COUNT时或者进入相应的中断服务程序后自动清零 | 0 |
| [4:0] | MASK_SYS_CK_DIV | RW | 系统时钟分频系数,数值为00000b时代表100000b | 11000b |
PLL时钟配置寄存器(PLL_CFG),仅在安全模式下可写:
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| [7:5] | MASK_USB_4X_DIV | RW | USB时钟分频系数,数值为000b时代表1000b | 110b |
| [4:0] | MASK_PLL_MULT | RW | PLL参考时钟倍频系数 | 11000b |
8.3 时钟配置
CH559芯片上电后默认使用内部时钟,内部时钟频率是12MHz。可以通过CLOCK_CFG选择内部时钟或者外部晶体振荡器时钟,如果关闭外部晶体振荡器,那么XI和XO引脚可以作为P4.6和P4.7普通I/O端口使用。如果使用外部晶体振荡器提供时钟,那么应该在XI和XO引脚之间跨接晶体,以及分别为XI和XO引脚对GND连接振荡电容;如果从外部直接输入时钟信号,那么应该从XI引脚输入,XO引脚悬空。
- 原始时钟频率Fosc=bOSC_EN_INT?12MHz:Fxt
- PLL频率Fpll=Fosc*(PLL_CFG&MASK_PLL_MULT)
- USB时钟分频系数Kusb=(PLL_CFG&MASK_USB_4X_DIV)»5
- USB时钟频率Fusb4x=Fpll/(Kusb?Kusb:8)
- 系统时钟分频系数Ksys=CLOCK_CFG&MASK_SYS_CK_DIV
- 系统主频Fsys=Fpll/(Ksys?Ksys:32)
- 复位后的默认状态下,Fosc=12MHz,Fpll=288MHz,Fusb4x=48MHz,Fsys=12MHz。
切换到外部晶体振荡器提供时钟的步骤如下:
- 进入安全模式,步骤一SAFE_MOD=55h;步骤二SAFE_MOD=AAh;
- 用“位或”操作将CLOCK_CFG中的bOSC_EN_XT置1,其它位保持不变,启用晶体振荡器;
- 延时数毫秒,通常5mS~10mS,等待晶体振荡器工作稳定;
- 再次进入安全模式,步骤一SAFE_MOD=55h;步骤二SAFE_MOD=AAh;
- 用“位与”操作将CLOCK_CFG中的bOSC_EN_INT清0,其它位保持不变,切换到外部时钟;
- 关闭安全模式,向SAFE_MOD写入任意数值提前终止安全模式。
修改系统主频的步骤如下:
- 提前计算好PLL_CFG和CLOCK_CFG的新数值,避免计算过程太久超出安全模式的有效期;
- 进入安全模式,步骤一SAFE_MOD=55h;步骤二SAFE_MOD=AAh;
- 向PLL_CFG写入新数值;
- 向CLOCK_CFG写入新数值;
- 关闭安全模式,向SAFE_MOD写入任意数值提前终止安全模式。
备注:
- PLL频率Fpll建议不要超出24MHz~350MHz频率范围;
- 优先使用较低的系统时钟频率Fsys,从而降低系统动态功耗,并使工作温度范围变宽;
- 如果使用到USB模块,那么Fusb4x必须调整到48MHz;
- 切换外部晶振和修改系统主频是独立的两项操作,如果同时需要两者,那么建议分两种情况:
- 如果外部晶振频率不超过13MHz,那么先切换到外部晶振,然后修改系统主频;
- 如果外部晶振频率大于13MHz,那么先降低PLL_CFG寄存器中的PLL参考时钟倍频系数,避免PLL频率Fpll溢出,然后切换到外部晶振,最后修改系统主频,或者也可在修改PLL_CFG的同时修改系统主频。