1、stage1階段硬件初始化
1)、在include/configs/gec2440.h頭文件中添加CONFIG_S3C2440宏(紅色一行)
#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 */ 2)、修改cpu/arm920t/start.S:
在start_code函數中:
修改
bl coloured_LED_init
bl red_LED_on
如下
//這兩行是AT91RM9200DK開發板的LED初始化和控制函數,註釋
//bl coloured_LED_init
//bl red_LED_on
添加下面的代碼,以取代上面功能:
#if defined(CONFIG_S3C2440) //區別與其他開發板
#define GPBCON 0x56000010
#define GPBDAT 0x56000014
#define GPBUP 0x56000018
ldr r0,=GPBUP
ldr r1,=0xff
str r1,[r0]
ldr r0,=GPBCON
ldr r1,=0x557ff
str r1,[r0]
ldr r0,=GPBDAT
ldr r1,=0x7df
str r1,[r0]
#endif
2、修改時鐘
因爲S3C2410與S3C2440的時鐘及Nand、SDRAM等配置不同,故接下來需要進行修改相關配置、推薦下:Linux教學平臺。
(1)、修改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, =0x7ff //0x3ff,根據2410芯片手冊,INTSUBMSK有11位可用,vivi也是0x7ff, u-boot則是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的時鐘部分
#define MPLLCON 0x4C000004 //系統主頻配置寄存器基地址
#define UPLLCON 0x4C000008 //USB時鐘頻率配置寄存器基地址
ldr r0, =CLKDIVN //設置分頻係數FCLK:HCLKCLK = 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:HCLKCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */ ldr r0, =CLKDIVN
mov r1, #3 str r1, [r0] # endif
#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */ |
-
Linux教學平臺之u-boot第二步
-
Linux教學平臺之u-boot移植第二步