一、时钟源
系统时钟源有5种:
外部主晶振8M-24M。(main osc)
外部副晶振32.768KHz。 (sub osc)
内部高速晶振8M。(high speed int osc)
内部低速晶振240KHz。(low speed int osc)
PLL倍频器。
Note 1. 外部副晶振只有 144 pin and 176 pin产品有。
时钟源如下图:
- 隔离时钟域(ISO Clock domains)是可以关闭的时钟系统。
- 常开时钟域(IAWO Clock domains)是不能关闭的时钟系统。
每个外设都有时钟选择寄存器选择需要的时钟。外设时钟这里不讨论。
二、时钟源相关的寄存器说明:
技术规格书列出的时钟源寄存器:
主晶振寄存器
2.1 MOSCE主晶振使能寄存器MainOSC Enable Register
MOSCE主晶振使能寄存器可以32bit读写。地址:FFF8 1100H,复位值0000 0000H。
Bit position | Bit Name | Function |
31 - 2 | 保留 |
|
1 | MOSCDISTRG | 0:无影响,1:禁止主晶振 |
0 | MOSCENTRG | 0:无影响,1:使能主晶振 |
MOSCDISTRG: MOSC Disable Trigger
MOSCENTRG: MOSC Enable Trigger
使用外部晶振,必须使能。MOSCENTRG = 1。
2.2 MOSCS主晶振状态寄存器MainOSC Status Register
MOSCE主晶振状态寄存器只能32bit读。地址:FFF8 1104H,复位值0000 0000H。
Bit position | Bit Name | Function |
31 - 3 | 保留 |
|
2 | MOSCCLKACT | 0:主晶振没有工作,1:主晶振工作正常 |
1、0 | 保留 |
|
MOSCCLKACT: MOSC Clock Acative
这个bit判断主晶振是否正常工作。
2.3 MOSCC主晶振控制寄存器MainOSC Control Register
MOSCC主晶振控制寄存器可以32bit读写。地址:FFF8 1108H,复位值0000 0004H。
Bit position | Bit Name | Function |
31 - 2 | 保留 |
|
1、0 | MOSC AMPSEL[1:0] | 主时钟频率选择: 00: 20M<fx<=24M 01: 16M<fx<=20M 10: 8M<fx<=16M 11: 8M |
AMPSEL[1:0]选择主晶振频率。按外接晶振频率设置即可。
2.4 MOSCST主晶振稳定延时寄存器MainOSC Stabilization Time Register
MOSCST主晶振稳定延时寄存器可以32bit读写。地址:FFF8 110CH,复位值0000 44C0H。
Bit position | Bit Name | Function |
31 - 17 | 保留 |
|
16 - 0 | MOSC CLKST[16:0] | 主时钟稳定时间寄存器,这个时间是上电到主时钟稳定的时间设置。只有主时钟稳定了,才能切换到外部主时钟。
|
2.5 MOSCSTPM主晶振停止屏蔽寄存器MainOSC Stop Mask Register
MOSCSTPM主晶振停止屏蔽寄存器可以32bit读写。地址:FFF8 1118H,复位值0000 0002H。
Bit position | Bit Name | Function |
31 - 1 | 保留 |
|
0 | MOSCSTPMSK | 0:待机模式主晶振停止 1:待机模式主晶振工作 |
副晶振寄存器
2.6 SOSCE 副晶振使能寄存器— SubOSC Enable Register
功能同主晶振使能寄存器
2.7 SOSCS副晶振状态寄存器— SubOSC Status Register
功能同主晶振状态寄存器
2.8 SOSCST副晶振稳定延时寄存器 — SubOSC Stabilization Time Register
功能同主晶振稳定延时寄存器
内置振荡器寄存器
2.9 ROSCE内置振荡器使能寄存器— HS IntOSC Enable Register
功能同主晶振使能寄存器,只有禁止功能,没有使能功能。
2.10 ROSCS 内置振荡器状态寄存器— HS IntOSC Status Register
功能同主晶振状态寄存器
2.11 ROSCSTPM内置振荡器停止屏蔽寄存器 — HS IntOSC Stop Mask Register
功能同主晶振停止屏蔽寄存器
PLL倍频器寄存器
2.12 PLLE PLL使能寄存器 — PLL Enable Register
功能同主晶振使能寄存器
2.13 PLLS PLL状态寄存器— PLL Status Register
功能同主晶振状态寄存器
2.14 PLLC PLL控制寄存器— PLL Control Register
Bit position | Bit Name | Function |
31 - 17 | 保留 |
|
16 | OUTBSEL | fCPLLCLK选择 0:和fPPLLCLK相同 1:fVCOOUT / 5 |
15 - 13 | 保留 |
|
12,11 | M[1:0] | M1 M0 Mr-Value MainOSC frequency fX 0 0 1 8 MHz ≤ fX ≤ 24 MHz 0 1 2 16 MHz ≤ fX ≤ 24 MHz 1 0 3 fX = 24 MHz 1 1 禁止设置 |
10 - 8 | PA[2:0] | PA[2:0] Par-Value PLL output frequency range 000 禁止设置 / 001 禁止设置 / 010 4 60 MHz to 80 MHz 011 6 40 MHz to 80 MHz 100 8 30 MHz to 60 MHz 101 16 25 MHz to 30 MHz 110 禁止设置 / 111 禁止设置 / |
7,6 | 保留 |
|
5-0 | N[5:0] | 设置分流比Nr For N[5:0] example settings, see Table 10.16, PLL Output Table. |
PLL以上几个参数的配置,技术规格书给出了表格,只要查询就可以得到。以下是主晶振16MHz的表格,其他表格对应查找即可。
Table 10.16, PLL Output Table
采用16M外部晶振,PLL输出主频80M。所以配置PLL控制寄存器配置为:
OUTBSEL = 0;Mr = 2;Par=4;N5-N0 = 100111 = 0x27。
Mr=2,所以配置M1 M0 = 01。
Par = 4,所以配置PA[2:0] = 010。
所以PLLC = 0000 1010 0010 0111b = 0A27H。
配置例程:
/*写保护寄存器*/
void protected_write(unsigned int pro_ reg, unsigned int pro_status, unsigned int reg, unsigned int value)
{
Do
{
pro_ reg = 0xa5;
reg = value;
reg = ~value;
reg = value;
} while(pro_status ==1u)
}
void Init_Clocks(void)
{
/*配置主晶振 16M*/
if((MOSCS&0x04u) != 0x4u) /* 检测MainOsc 有没有启动 */
{
MOSCC=0x06; /* 10B,(8MHz < MOSC frequency =< 16MHz) */
MOSCST=0x8000; /* 设置稳定延时时间(8,19 ms) */
protected_write(PROTCMD0,PROTS0,MOSCE,0x01u); /* MOSCE=0x01,使能主晶振*/
while ((MOSCS&0x04u) != 0x04u); /* 等待MainOSC正常工作 */
}
/*配置PLL 80M*/
if((PLLS&0x04u) != 0x04u) /* 检测PLL有没有启动 */
{
PLLC=0x00000a27u; /* 配置PLL控制寄存器,主晶振 16M,CPLLOUT,PPLLOUT输出80M,数据来源见前面分析*/
protected_write(PROTCMD1,PROTS1,PLLE,0x01u); /*使能 PLL */
while((PLLS&0x04u) != 0x04u) /*等待 PLL正常工作 */
}
/*配置CPU时钟80M*/
protected_write(PROTCMD1,PROTS1,CKSC_CPUCLKD_CTL,0x01u); /*CPU时钟不分频,80M */
while(CKSC_CPUCLKD_ACT!=0x01u);
protected_write(PROTCMD1,PROTS1,CKSC_CPUCLKS_CTL,0x03u); /*CPU时钟源选择,BIT1-0, 3-PLL输出CPLLCLK*/
while(CKSC_CPUCLKS_ACT!=0x03u); /*等待 CPU时钟正常工作 */
}
程序经实测CPU工作频率80M。