微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

时间:11-20 来源:互联网 点击:

s3c2440的中断禁止部分
ldr r1,=0x7fff//根据2440芯片手册,INTSUBMSK寄存器有15位可用

ldr r0,=INTSUBMSK
str r1,[r0]
#endif

#ifdefined(CONFIG_S3C2440)//添加s3c2440的时钟部分

#defineMPLLCON0x4C000004//系统主频配置寄存器基地址

#define UPLLCON0x4C000008//USB时钟频率配置寄存器基地址
ldr r0,=CLKdivN//设置分频系数FCLK:HCLK:PCLK = 1:4:8
mov r1,#5
str r1,[r0]

ldr r0, =MPLLCON//设置系统主频为405MHz

ldr r1, =0x7F021//这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分

str r1, [r0]

ldr r0, =UPLLCON//设置USB时钟频率为48MHz

ldr r1, =0x38022//这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分

str r1, [r0]

#else//其他开发板的时钟部分,这里就不用管了,我们现在是做2440的

/*FCLK:HCLK:PCLK=1:2:4*/
/*default FCLK is 120 MHz!*/

ldrr0,=CLKdivN
movr1,#3
strr1,[r0]

# endif
#endif/*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*/

S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/my2440/my2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:

#geditboard/samsung/my2440/my2440.c//设置主频和USB时钟频率参数与start.S中的一致

#defineFCLK_SPEED2//设置默认等于2,即下面红色代码部分有效

#ifFCLK_SPEED==0
#defineM_Mdiv0xC3
#defineM_Pdiv0x4
#defineM_Sdiv0x1
#elifFCLK_SPEED==1
#defineM_Mdiv0xA1
#defineM_Pdiv0x3
#defineM_Sdiv0x1
#elifFCLK_SPEED==2
#defineM_Mdiv0x7F//这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#defineM_Pdiv0x2
#defineM_Sdiv0x1
#endif

#defineUSB_CLOCK2//设置默认等于2,即下面红色代码部分有效

#ifUSB_CLOCK==0
#defineU_M_Mdiv0xA1
#defineU_M_Pdiv0x3
#defineU_M_Sdiv0x1
#elifUSB_CLOCK==1
#defineU_M_Mdiv0x48
#defineU_M_Pdiv0x3
#defineU_M_Sdiv0x2
#elifUSB_CLOCK==2
#defineU_M_Mdiv0x38//这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#defineU_M_Pdiv0x2
#defineU_M_Sdiv0x2
#endif

#geditcpu/arm920t/s3c24x0/speed.c//根据设置的分频系数FCLK:HCLK:PCLK = 1:4:8修改获取时钟频率的函数

staticulong get_PLLCLK(intpllreg)
{
S3C24X0_CLOCK_POWER*constclk_power=S3C24X0_GetBase_CLOCK_POWER();
ulong r,m,p,s;

if(pllreg==MPLL)
r=clk_power->MPLLCON;
elseif(pllreg==UPLL)
r=clk_power->UPLLCON;
else
hang();

m=((r&0xFF000)>>12)+8;
p=((r&0x003F0)>>4)+2;
s=r&0x3;

#ifdefined(CONFIG_S3C2440)
if(pllreg==MPLL)
{//参考S3C2440芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s)
return((CONFIG_SYS_CLK_FREQ*m*2)/(ps));
}
#endif

return((CONFIG_SYS_CLK_FREQ*m)/(ps));
}

ulong get_HCLK(void)
{
S3C24X0_CLOCK_POWER*constclk_power=S3C24X0_GetBase_CLOCK_POWER();

#ifdefined(CONFIG_S3C2440)
return(get_FCLK()/4);
#endif

return((clk_power->CLKdivN&0x2)?get_FCLK()/2:get_FCLK());
}

好了!修改完毕后我们再重新编译u-boot,然后再下载到RAM中运行测试。结果终端有输出信息并且出现类似Shell的命令行,这说明这一部分移植完成。示意图如下:


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top