移植uboot2010.09到S3C2440二

发布者:剑戟辉煌最新更新时间:2016-05-10 来源: eefocus关键字:移植  uboot2010.09  S3C2440 手机看文章 扫描二维码
随时随地手机看文章
我在看U-BOOT的lowlevel_init.S文件时看到以下代码:

lowlevel_init:
ldr r0, =SMRDATA
ldr r1, _TEXT_BASE
sub r0, r0, r1
ldr r1, =BWSCON
add r2, r0, #13*4
0:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne 0b
mov pc, lr

这段代码实现了U-BOOT的内存控制器部分的寄存器初始化,一共13个寄存器,对U-BOOT来最重要的就是SDRAM的初始化,显然没有这部分代码,当U-BOOT从NAND FLASH中启动的时候,START.S文件是无法完成代码的relocate的。因为SDRAM没初始化,用不了。

要理解这段代码主要是搞清楚LDR的两种用法。

ldr r0, =SMRDATA的作用是让r0等于U-BOOT编译时已经确定下来的SMRDATA这块内存缓冲池的起始地址。
ldr r1, _TEXT_BASE的作用则是让r1等于_TEXT_BASE这个标号所在的内存里面的内容,也就是 TEXT_BASE。对于MINI2440开发板来说这个值等于 TEXT_BASE = 0x33F80000(\board\samsung\mini2440\config.mk)这个地址是
由于TEXT_BASE实际的地址现在应该是FLASH的0地址(或者内部4KSRAM的0地址),所以第三条指令 sub r0, r0, r1 ,实现了计算SMRDATA当前在arm地址空间里的实际访问地址。
接下去就是通过
ldr r3, [r0], #4 ;从r0这个地址里取一个32bit的数据,放到r3,并将r0+4,指向下一个内存池里的数据。
str r3, [r1], #4 ;这条指令实现了把r3里的数据赋值给r1所标示的地址。r1的地址通过下面这几句实现。以此配置完从0x48000000开始的CPU内部寄存器的值。这样SDRAM就开始工作了。以后就是正常访问0x30000000开始的地址空间了。
#define BWSCON 0x48000000
ldr r1, =BWSCON /* Bus Width Status Controller */
上面的这个配置代码是无法在将U-BOOT直接用OPENJTAG下载到OPENJTAG中时工作的。因为当下载到内存中的时候,SDRAM的地址是随机的,至少不是从0开始的,这样得到的SMRDATA所在的地址按上面的方式是得不到的,所以需要一条在运行时地址与位置无关的指令。这就是 adr指令。下面代码就是改进后的:
lowlevel_init:
/* memory control configuration */
/* make r0 relative the current location so that it */
/* reads SMRDATA out of FLASH rather than memory ! */
ldr r0, =SMRDATA
ldr r1, =lowlevel_init /*编译时确定的地址*/
sub r0, r0, r1 /* r0 = r0 -r1 , r0 = SMRDATA相对于lowlevel_init的偏移值 */
adr r3, lowlevel_init /*位置无关*/
add r0,r0,r3 /*r0 = r0 +r3 ,r0存放的是当前SMRDATA的实际地址*/
ldr r1, =BWSCON /* Bus Width Status Controller */
add r2, r0, #13*4
0:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne 0b

关键字:移植  uboot2010.09  S3C2440 引用地址:移植uboot2010.09到S3C2440二

上一篇:基于ARM微控制器AT91M40800和CAN总线的煤矸石分选系统设计
下一篇:ARM汇编中的LDR及ADR的区别及其在UBOOT中的应用

推荐阅读最新更新时间:2024-03-16 14:53

基于CC2420射频芯片和S3C2440芯片实现网络协调器的设计
1 概 述 无线通信的方式有多样,与蓝牙、Wi-Fi、GSM移动通信方式相比,ZigBee联盟制定的 ZigBee方式具有功耗低、数据传输可靠、兼容性好、实现成本低以及组网方便的优点,非常适合低速率传输的无线传感器网络。ZigBee联盟成立于 2001年,2002年Invensys公司、三菱电气公司、摩托罗拉公司以及飞利浦半导体公司加盟,现在正迅速发展壮大。该联盟在基于IEEE 802.15.4的PHY层、MAC层及数据链路层之上,研究开发适合无线传感器网络的其他高层协议。 物理层的2个标准是2.4 GHz和868/915 MHz,都基于直接序列扩频DSSS(Direct Sequence Spread Spec-trum)技
[单片机]
基于CC2420射频芯片和<font color='red'>S3C2440</font>芯片实现网络协调器的设计
U-boot-2014.04移植到MINI2440(11) 第二启动阶段分析
回顾一下u-boot启动其一阶段做了哪些事: 第一:设置CPU为SVC模式 第二:关闭看门狗 第三:关中断和子中断 第四:设置时钟 第五:MMU关闭,清除cache和TLB,使能地址对齐检查等 第六:初始化SDRAM 在我前面的分析里,第一阶段的最后,通过bl _main,跳到了arch/arm/lib/crt0.S里面去了,从这里开始时第二阶段的入口,下面从这里开始分析。 文件:crt0.S 先看看该文件对_main的描述,在第18行,有一个_main execution sequence is:下面有五步,其实就是对_main的执行流程的一个介绍,我翻译一下: 1
[单片机]
s3c2440环境搭建与通过JTAG调试
JTAG JTAG作用 芯片检测 实现ISP-在线调试 对Flash等器件进行编程,即在线烧录Flash,目前JTAG发展成广泛采用的IC调试接口 安装Keil 我个人觉得可以安装keil4.72,之前装了keil5有一些MCU找不到。MDK4.72自行百度。 安装好后,要先进行破解,不然编译会出错哦,具体破解教程自行查找。
[单片机]
<font color='red'>s3c2440</font>环境搭建与通过JTAG调试
第1课:S3C2440的烧写
首先明确要学什么? 1写Bootloader。会以u-boot为例。 2改内核。用ARM编译器对linux内核进行编译。并移植驱动 3制作文件系统,把shell放入开发板(串口shell),把应用程序植入。 那么先来介绍开发板的硬件: 现在手上拿到的是山寨的2440开发板,分上层核心板和下层母板。 有1个arm的cpu(片上系统,里面还包括外设,不只一个cpu),2个32m的内存,一个flash,和一个晶振提供的时钟。 母板则为4.3寸触摸屏和LCD屏(2个屏要分开驱动),USB的3个host端和1个device端。RJ45网络端口。Rs232串口(15电压)。 JTAG仿真接口。SD卡槽。3个指示灯。音频输入输出
[单片机]
s3c2440裸机触摸屏
1.0、触摸屏与LCD 触摸屏与lcd是两个独立的屏,但是他们之间有对应关系,简单的说就是一个触摸屏的坐标点对应lcd的一个像素点,这样当我们按下触摸屏后,系统通过计算得到该地方的坐标,然后通过对应关系找到相应位置的lcd显示的内容。因为触摸屏和lcd是独立的,总是因为一些物理的原因会有一些位置上的改变,所以这种对应关系不是不变的,我们可以通过开机的时候的校验来确定这种关系,比如 LCD上每个点PD的坐标为 ,触摸屏上每个点PT的坐标为 。要实现触摸屏上的坐标转换为LCD上的坐标,需要下列公式进行转换: XD=A×XT+B×YT+C YD=D×XT+E×YT+F 这样我们只有确定了ABCDEF六个参数我们就可以
[单片机]
I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之网卡驱动移植
由于对网卡这块不是很熟悉,误以为网卡驱动也可以简单的配置下DTS就可以正常工作了,实际移植中遇到了些问题。闲话少说,下面开始tqimx6q的网卡驱动移植。 DTS编写 首先在我们的DTS中添加网卡配置,参考sabrelite的DTS,我们可以如下编写: &fec { pinctrl-names = default ; pinctrl-0 = &pinctrl_enet_1 ; phy-mode = rgmii ; status = okay ; }; 开始以为添加以上内容后编译并烧写DTB就可以正常工作了,实则不然,还需要添加PHY相关的配置代码。 PHY配置 打开arch/arm/mach-imx
[单片机]
μC/OS-II在LPC213X上的多种移植方案
μC/OS-II是可移植、适用于对安全性要求苛刻的剥夺型实时多任务嵌入式系统,简单易学,在工程应用和嵌入式系统教学中很受欢迎。LPC213X是 Philips公司推出的基于ARM7TDMI-S核的32位RISC微处理器,也适合于ARM学习开发平台和工程应用。 1 与μC/OS-II移植工作相关的主要特性 ARM体系结构分为7种运行模式,ARM和 Thumb两种工作状态。LPC213X的编程模型就是标准的ARM7体系结构;同时LPC213X也具备ARM的标准异常模式IRQ和FIQ。稍具特色的是其VIC向量中断控制器。分别对IRQ、FIQ、非向量中断和软件中断进行了分类,具有对32个中断输入的可编程分配机制。这对于μC/OS-
[单片机]
μC/OS-II在LPC213X上的多种<font color='red'>移植</font>方案
飞思卡尔:覆盖所有微控制器技术的解决方案
一、为多个不同市场提供全面8/16/32位MCU 飞思卡尔为多个不同市场提供全面的8/16/32位MCU产品系列。这些市场包括汽车市场、个人用户市场和工业市场等。还提供广泛的控制器产品系列,从入门级的超低端8位设备(如KA和QD MCU系列)直到高性能的32位产品系列(如ColdFire系列嵌入式控制器)。同时还提供大量的功能性外围设备,并将继续向微控制器IP产品中增加价值。飞思卡尔也是解决方案创新领域的领导者,开发的解决方案包括带有集成以太网和USB接口的32位设备。 嵌入式电子产品正在以前所未有的速度演进,对性能和功能的需求也日益增加,进而推动了微控制器产品链的设计工作。因此,工程师需要轻松地从初级MCU移植到更高端的M
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved