|||
(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:HCLK:PCLK = 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:HCLK:PCLK = 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