(6)设置MPLLCON,UPLLCON, CLKDIVN
# if defined(CONFIG_S3C2440)
#define MPLLCON
0x4C000004
#define UPLLCON
0x4C000008
ldr
r0, =CLKDIVN
mov
r1, #5
str
r1, [r0]
ldr
r0, =MPLLCON
ldr
r1, =0x7F021
str
r1, [r0]
ldr
r0, =UPLLCON
ldr
r1, =0x38022
str
r1, [r0]
# else
/*FCLK:HCLKCLK = 1:2:4 */
/*default FCLK is 120 MHz ! */
ldr
r0, =CLKDIVN
mov
r1, #3
str
r1, [r0]
#endif
CPU上电几毫秒后,晶振输出稳定,FCLK=Fin(晶振频率),CPU开始执行指令。但实际上,FCLK可以高于Fin,为了提高系统时钟,需要用软件来启用PLL。这就需要设置CLKDIVN,MPLLCON,UPLLCON这3个寄存器。
CLKDIVN寄存器用于设置FCLK,HCLK,PCLK三者间的比例,可以根据表2.2来设置。
表 2.2 S3C2440 的CLKDIVN寄存器格式
CLKDIVN | 位
| 说明
| 初始值
| HDIVN | [2:1] | 00 : HCLK = FCLK/1.
01 : HCLK = FCLK/2.
10 : HCLK = FCLK/4 (当 CAMDIVN[9] = 0 时)
HCLK= FCLK/8
(当 CAMDIVN[9] = 1 时)
11 : HCLK = FCLK/3 (当 CAMDIVN[8] = 0 时)
HCLK = FCLK/6 (当 CAMDIVN[8] = 1时)
| 00 | PDIVN | [0] | 0: PCLK = HCLK/1
1: PCLK = HCLK/2 | 0 |
设置CLKDIVN为5,就将HDIVN设置为二进制的10,由于CAMDIVN[9]没有被改变过,取默认值0,因此HCLK = FCLK/4。PDIVN被设置为1,因此PCLK=HCLK/2。因此分频比FCLK:HCLKCLK= 1:4:8 。
MPLLCON寄存器用于设置FCLK与Fin的倍数。MPLLCON的位[19:12]称为MDIV,位[9:4]称为PDIV,位[1:0]称为SDIV。
对于S3C2440,FCLK与Fin的关系如下面公式:
MPLL(FCLK)= (2×m×Fin)/(p×)
其中: m=MDIC+8,p=PDIV+2,s=SDIV
MPLLCON与UPLLCON的值可以根据参考文献4中“PLL VALUE SELECTION TABLE”设置。该表部分摘录如下:
表 2.3 推荐PLL值
输入频率
| 输出频率
| MDIV | PDIV | SDIV | 12.0000MHz | 48.00 MHz | 56(0x38) | 2 | 2 | 12.0000MHz | 405.00 MHz | 127(0x7f) | 2 | 1 |
当mini2440系统主频设置为405MHZ,USB时钟频率设置为48MHZ时,系统可以稳定运行,因此设置MPLLCON与UPLLCON为:
MPLLCON=(0x7f<<12)| (0x02<<4) | (0x01) = 0x7f021
UPLLCON=(0x38<<12)| (0x02<<4) | (0x02) = 0x38022 |