微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Uboot在S3C2440上的移植详解(一)

Uboot在S3C2440上的移植详解(一)

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

/*bl coloured_LED_init//这两行是AT91RM9200DK开发板的LED初始化,注释掉
bl red_LED_on*/

#if defined(CONFIG_S3C2440) //区别与其他开发板

//根据mini2440原理图可知LED分别由S3C2440的PB5、6、7、8口来控制,以下是PB端口寄存器基地址(查2440的DataSheet得知)
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
#define GPBUP 0x56000018

//以下对寄存器的操作参照S3C2440的DataSheet进行操作
ldr r0,=GPBUP
ldr r1,=0x7FF //即:二进制11111111111,关闭PB口上拉
str r1,[r0]

ldr r0,=GPBCON //配置PB5、6、7、8为输出口,对应PBCON寄存器的第10-17位
ldr r1,=0x154FD //即:二进制010101010011111101
str r1,[r0]

ldr r0,=GPBDAT
ldr r1,=0x1C0 //即:二进制111000000,PB5设为低电平,6、7、8为高电平
str r1,[r0]

#endif

//此段代码使u-boot启动后,点亮开发板上的LED1,LED2、LED3、LED4不亮

在include/configs/my2440.h头文件中添加CONFIG_S3C2440宏

#gedit include/configs/my2440.h

#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
#define CONFIG_S3C2440 1/* in a SAMSUNG S3C2440 SoC */

3)在u-boot中添加对S3C2440一些寄存器的支持、添加中断禁止部分和时钟设置部分。
由于2410和2440的寄存器及地址大部分是一致的,所以这里就直接在2410的基础上再加上对2440的支持即可,代码如下:

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

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

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

#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_Mdiv 0xC3
#define M_Pdiv 0x4
#define M_Sdiv 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_Mdiv 0xA1
#define M_Pdiv 0x3
#define M_Sdiv 0x1
#elifFCLK_SPEED==2/* Fout = 405MHz */
#defineM_Mdiv 0x7F //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#define M_Pdiv 0x2
#define M_Sdiv 0x1
#endif

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

#if USB_CLOCK==0
#define U_M_Mdiv 0xA1
#define U_M_Pdiv 0x3
#define U_M_Sdiv 0x1
#elifUSB_CLOCK==1
#define U_M_Mdiv 0x48
#define U_M_Pdiv 0x3
#define U_M_Sdiv 0x2
#elifUSB_CLOCK==2/* Fout = 48MHz */
#defineU_M_Mdiv 0x38 //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#define U_M_Pdiv 0x2
#define U_M_Sdiv 0x2
#endif

#gedit cpu/arm920t/start.S

#if defined(CONFIG_S3C2400)|| defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
/* turn off the watchdog */

# if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 /* Interupt-Controller base addresses */
# define CLKdivN 0x14800014 /* clock divisor register */
#else //下面2410和2440的寄存器地址是一致的
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKdivN 0x4C000014 /* clock divisor register */
# endif

ldr r0,=pWTCON
mov r1, #0x0
str r1,[r0]

/*
*mask all IRQs by setting all bits in the INTMR - default
*/
mov r1, #0xffffffff
ldr r0,=INTMSK
str r1,[r0]
# if defined(CONFIG_S3C2410)
ldr r1,=0x3ff
ldr r0,=INTSUBMSK
str r1,[r0]
# endif
# if defined(CONFIG_S3C2440)//添加s3c2440的中断禁止部分
ldr r1,=0x7fff //根据2440芯片手册,INTSUBMSK寄存器有15位可用

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

# if defined(CONFIG_S3C2440) //添加s3c2440的时钟部分# endif
#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */

#define MPLLCON 0x4C000004 //系统主频配置寄存器基地址

#define UPLLCON 0x4C000008 //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”

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

网站地图

Top