UBOOT-2010.06 移植 初始化时钟 (三)
来源:互联网 发布:java修改密码代码 编辑:程序博客网 时间:2024/06/05 04:54
参考资料:
移植u-boot2009.08到OK2440V3开发板(2)---在SDRAM中运行
u-boot-2011.03在TQ2440上的移植(2)--初始化时钟嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)1、环境说明:
主机:ubuntu10.10
交叉编译:arm-linux-gcc 4.5.1
开发板文件系统:root-2.6.33-qt.tar.bz2 打包好的
开发板内核 :linux-2.6.33-qt.tar.bz2
开发板:TQ2440 nandflash 256MB 东华3.5寸屏
uboot源码:ftp://ftp.denx.de/pub/u-boot/ u-boot-2010.06-rc1.tar.bz2
CPU: S3C2440
SDRAM: 48LC16M16A 64MB
NOR FLASH EN29LV160AB 2MB
FLASH K9F2G08UDA 256MB
2.
u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;
arch/arm/cpu/arm920t/start.S
board/samsung/smdk2440/smdk2440.c
4、增加对S3C2440的支持 修改 SDRAM配置
gedit board/sumsung/smdk2440/lowlevel_init.S在文件54行
#define B1_BWSCON (DW16)//(DW32) IDE
#define B2_BWSCON (DW16)
#define B3_BWSCON (DW16 + WAIT + UBLB)
#define B4_BWSCON (DW16)
#define B5_BWSCON (DW8)//(DW16)
#define B6_BWSCON (DW32)
#define B7_BWSCON (DW32)
修改 lowlevel_init.S 文件第 126 行,设置为100MHZ
#define REFCNT 0x4F4 //100MHZ
//1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
5、stage1阶段的硬件设备初始化。
- 接下来,加入自己的LED 支持
- /*bl coloured_LED_init//这两行是AT91RM9200DK开发板的LED初始化,注释掉
- bl red_LED_on*/
- 添加如下:
- #if defined(CONFIG_S3C2440)//区别与其他开发板
- //根据TQ2440原理图可知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不亮
arch/arm/cpu/arm920t/start.S 我把修改过的start.S start.rar
- #ifdef CONFIG_S3C24X0
- /* 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 bitsin 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的时钟部分
- # define LOCKTIME 0x4C000000
- #define MPLLCON 0x4C000004 //系统主频配置寄存器基地址
- #define UPLLCON 0x4C000008 //USB时钟频率配置寄存器基地址
- # define CAMDIVN 0x4C000018
- //locktime用来在正常运行时更改时钟的时候保护时钟 ####注意这里
- ldr r0,=LOCKTIME
- mov r1,#0xffffff
- str r1,[r0]
- //清除摄像头分频寄存器值,这个值会影响HCLK
- ldr r0,=CAMDIVN
- mov r1,#0
- str r1,[r0]
- /***************/
- ldr r0,=CLKDIVN //设置分频系数FCLK:HCLK:PCLK= 1:4:8
- mov r1, #5
- str r1,[r0]
- //在2440的手册中写着若HDIVN不为0,则需要下面几句
- mrc p15, 0, r1, c1, c0, 0 //read ctrl register
- orr r1, r1, #0xc0000000//Asynchronous
- mcr p15, 0, r1, c1, c0, 0 //write ctrl register
-
- ldr r0,=UPLLCON //设置USB时钟频率为48MHz
- ldr r1,=0x38022 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分
- str r1,[r0]
- //arm920t为5级流水线,延迟几个周期,使指令生效
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- //大于 400 MHZ 容易死机
- ldr r0,=MPLLCON //设置系统主频为400MHz 我自己设置主频 为 400MHZ
- ldr r1,=0x5C011 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分
- str r1,[r0]
-
- # else
- /* FCLK:HCLK:PCLK= 1:2:4*/
- /* default FCLKis 120 MHz ! */
- ldr r0, =CLKDIVN
- mov r1, #3
- str r1, [r0]
- #endif 注意这里还有一个 #endif
- #endif /* CONFIG_S3C24X0*/
#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
#elif FCLK_SPEED==2 /* Fout = 400MHz */
#define M_MDIV 0x5C //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#define M_PDIV 0x1
#define M_SDIV 0x1
#endif
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#elif USB_CLOCK==2 /* Fout = 48MHz */
#define U_M_MDIV 0x38 //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
#endif
get_PLLCLK函数修改第66行如下
{
S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
ulong r, m, p, s;
r = clk_power->MPLLCON;
else if (pllreg == UPLL)
r = clk_power->UPLLCON;
else
hang();
p = ((r & 0x003F0) >> 4) + 2;
s = r & 0x3;
if(pllreg == MPLL)
{ //参考S3C2440芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s)
return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));
}
#endif
}
ulong get_HCLK(void)
{
S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
return(get_FCLK()/4);
#endif
}
9.此,对s3c2440的支持(时钟配置部分)就算做好了,为了方便调试,可以利用开发板自带的u-boot文件烧写到内存中运行,此时还要修改一些配置:
修改arch/arm/cpu/arm920t/start.S文件的177行如下:
gedit arch/arm/cpu/arm920t/start.S
177行:
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
/* bl cpu_init_crit */
#endif
10.修改 0x33000000
gedit board/samsung/smdk2440/config.mk
为了调试方便
TEXT_BASE = 0x33000000 修改为红色的
#TEXT_BASE = 0x33F80000
而且,使用DNW下载时,将地址设置为 0x33000000
错误:在处理过程中,我设置 TEXT_BASE = 0x30000000 ,经 DNW的地址也设置为 0x30000000,但是最后出错了,我把它修改为 0x33000000 ,就可以了。?????
10.
make mrproper
make smdk2440_config
make all
11.
- [7] Download Program(uCOS-IIor TQ2440_Test)to SDRAM and Run it
- [8] Boot the system
- [9] Format the Nand Flash
- [0]Set the boot parameters
- [a] Download User Program(eg: uCOS-IIor TQ2440_Test)
- [b] Download LOGO Picture(.bin)to Nand Flash
- [l]Set LCD Parameters
- [o] Download u-bootto Nor Flash
- [r] Reboot u-boot
- [t] Test Linux Image(zImage)
- [q] quit from menu
- Enter your selection: 7
- USB host is connected. Waiting a download.
- Now, Downloading[ADDRESS:33000000h,TOTAL:98790]
- RECEIVED FILE SIZE: 98790(96KB/S, 1S)
- ## Starting application at 0x33000000 ...▲
- U-Boot 2010.06-rc1( 4鏈?16 2011- 13:24:25)
- DRAM: 64 MiB
- Flash: 512 KiB
- *** Warning- bad CRC, using default environment
- In: serial
- Out: serial
- Err: serial
- Net: CS8900-0
- SMDK2410 #
上一篇:一个合格程序员的每天每周每月每年该做的事
下一篇:UBOOT-2010.06 移植 建立自己的demo板 (二)
- BLE-NRF51822教程7-带协议栈工...
- BLE-NRF51822教程4-串口BLE解...
- BLE-NRF51822教程2-工程初始化...
- iptables深入解析-ct篇
- 翻译ffmpeg-all文档(39),视...
- A sample .exrc file for vi e...
- IBM System p5 服务器 HACMP ...
- 游标的特征
- busybox的httpd使用CGI脚本(Bu...
- Solaris PowerTOP 1.0 发布
- UBOOT-2010.06 移植 初始化时钟 (三)
- uboot-2011.12移植到S3C2440(三)——硬件初始化:看门狗、中断、时钟
- 4(1)、uboot中系统时钟初始化函数:system_clock_init
- uboot移植准备工作三
- 移植uboot第三步:修改时钟
- 嵌入式学习-uboot-lesson6-时钟初始化
- uboot移植记录之三
- 移植Uboot-2010.06到TQ2440开发板详解之三
- 移植Uboot-2010.06到TQ2440开发板详解之三
- UBOOT-2010.06 移植 支持 DM9000 (七)
- UBOOT-2010.06 移植 支持norflash (四)
- uboot移植(二)
- Uboot移植(smart210)
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Java String类
- CMOS 摄像头驱动
- 一个合格程序员的每天每周每月每年该做的事
- Android设备开启保护
- bzoj1927: [Sdoi2010]星际竞速
- UBOOT-2010.06 移植 初始化时钟 (三)
- UBOOT-2010.06 移植 建立自己的demo板 (二)
- UBOOT-2010.06 移植 支持norflash (四)
- UBOOT-2010.06 移植 支持nand flash 上 (五)
- UBOOT-2010.06 移植 支持nand flash 下 (六)
- UBOOT-2010.06 移植 支持 机器码配对 (八)
- UBOOT-2010.06 移植 支持 下载yaffs2文件系统 (九)
- 2.1 U-Boot Makefile分析
- 10年IT人生酸甜苦辣的经历!一个老程序员的心理话