对于其他BANK,比如网卡芯片CS8900所在的BANK2,原来的设置刚好匹配,无需更改;而对于BANK1、2、4、5、7,在U-Boot中并没有使用到它们外接的设备,也不需要理会。
(3)增加对S3C2440的支持。
S3C2440是S3C2410的改进版,它们的操作基本相似。不过在系统时钟的设置、
NAND
Flash控制器的操作等方面,有一些小差别。它们的MPLL、UPLL计算公式不一样,FCLK、HCLK和PCLK的分频化设置也不一样,这在下面的
代码中可以看到。NAND Flash控制器的差别在增加对NAND Flash的支持时讲述。
本章的目标是令同一个U-Boot二进制代码既可以在S3C2410上运行,也可以在
S3C2440上运行。首先需要在代码中自动识别是S3C2410还是S3C2440,这可以通过读取GSTATUS1寄存器的值来分
辨:0x32410000表示S3C2410,0x32410002表示S3C2410A,0x32440000表示
S3C2440,0x32440001表示S3C2440A。S3C2410和S3C2410A、S3C2440和S3C2440A,对本书来说没有区
别。
对于S3C2410开发板,将FCLK设为200MHz,分频比为
FCLK:HCLK:PCLK=1:2:4;对于S3C2440开发板,将FCLK设为400MHz,分频比为
FCLK:HCLK:PCLK=1:4:8。还将UPLL设为48MHz,即UCLK为48MHz,以在内核中支持USB控制器。
首先修改board/100ask24x0/100ask24x0.c中的board_init函数,下面是修改后的代码:
33 /* S3C2440: MPLL = (2*m * Fin) / (p * 2^s), UPLL = (m * Fin) / (p * 2^s)
34 * m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2
35 */
36 #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
37 #define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02))
38 #define S3C2440_CLKDIV 0x05 /* FCLK:HCLK:PCLK = 1:4:8, UCLK = UPLL */
39
40 /* S3C2410: Mpll,Upll = (m * Fin) / (p * 2^s)
41 * m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2
42 */
43 #define S3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00))
44 #define S3C2410_UPLL_48MHZ ((0x28<<12)|(0x01<<4)|(0x02))
45 #define S3C2410_CLKDIV 0x03 /* FCLK:HCLK:PCLK = 1:2:4 */
46
上面几行针对S3C2410、S3C2440分别定义了MPLL、UPLL寄存器的值。开发
板输入时钟为12MHz(这在include/configs/100ask24x0.h中的宏CONFIG_SYS_CLK_FREQ中定义),读者可
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-65990-17.html
行贿最多的就是浙商