根据U-Boot-2009-03移植笔记(第二阶段移植准备)最后的总结,需要针对S3C2440来移植时钟初始化的代码。
在lib_arm/board.c中,个init_sequence数组,定义了所有的初始化函数指针。
时钟的驱动,在函数board_init中,位于board/xinna2440/xinna2440.c,我们这里只支持S3C2440,删除文件头部的时钟参数宏定义,直接改为
1 #define FCLK_SPEED 1
2
3 #define M_MDIV 0x7f
4 #define M_PDIV 0x2
5 #define M_SDIV 0x1
6
7 #define USB_CLOCK 1
8
9 #define U_M_MDIV 0x38
10 #define U_M_PDIV 0x2
11 #define U_M_SDIV 0x2
12 #define S3C2440_CLKDIV 0x5
在board_init函数的clk_power->LOCKTIME = 0xFFFFFF;语句前,增加汇编代码:
/* to reduce PLL lock time, adjust the LOCKTIME register */
clk_power->CLKDIVN = S3C2440_CLKDIV;
__asm__( 'mrc p15, 0, r1, c1, c0, 0n'
'orr r1, r1, #0xc0000000n'
'mcr p15, 0, r1, c1, c0, 0n'
:::'r1'
);
然后修改cpu/arm920t/s3c24x0/speed.c。
1 DECLARE_GLOBAL_DATA_PTR; /*添加代码*/
2 static ulong get_PLLCLK(int pllreg)
3 {
4 S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
5 ulong r, m, p, s;
6
7 if (pllreg == MPLL)
8 r = clk_power->MPLLCON;
9 else if (pllreg == UPLL)
10 r = clk_power->UPLLCON;
11 else
12 hang();
13
14 m = ((r & 0xFF000) >> 12) + 8;
15 p = ((r & 0x003F0) >> 4) + 2;
16 s = r & 0x3;
17
18 if(pllreg == MPLL) /*修改get_PLLCLK返回值*/
19 return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));
20 else if(pllreg == UPLL)
21 return ((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); /* S3C2440 */
22 }
23
24 /* return FCLK frequency */
25 ulong get_FCLK(void)
26 {
27 return(get_PLLCLK(MPLL));
28 }
29
30 /* return HCLK frequency */
31 ulong get_HCLK(void)
32 {
33 S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
34 return get_FCLK() / 4; /*修改get_HCLK返回值*/
35 }
36
37 /* return PCLK frequency */
38 ulong get_PCLK(void)
39 {
40 S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
41
42 return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());
43 }
44
45 /* return UCLK frequency */
46 ulong get_UCLK(void)
47 {
48 return(get_PLLCLK(UPLL));
49 }
保存,编译,打开minicom,烧写,运行,发现了熟悉的画面。

串口输出正常无乱码,说明时钟驱动移植成功!
上一篇:U-Boot-2009-03移植笔记(第二阶段移植准备)
下一篇:s3c6410_u-boot-2010.03移植
推荐阅读最新更新时间:2026-03-25 10:35
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用

CY8CPROTO-063-BLE开发板MicroPython固件(修复SPI频率bug)
CANopen移植工程(源代码)
非常经典的关于LLC的杨波博士论文
5962-89541022A
XC6406PP60DL






京公网安备 11010802033920号