移植u-boot-2010.09到S3C2440(二)——ARM汇编中的LDR及ADR的区别

发布者:xi24最新更新时间:2022-04-25 来源: eefocus关键字:移植  u-boot  S3C2440  LDR  ADR 手机看文章 扫描二维码
随时随地手机看文章

我在看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(boardsamsungmini2440config.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


关键字:移植  u-boot  S3C2440  LDR  ADR 引用地址:移植u-boot-2010.09到S3C2440(二)——ARM汇编中的LDR及ADR的区别

上一篇:uboot-2011.12移植到S3C2440(二)——点亮LED灯,the very beginning。
下一篇:移植u-boot-2010.09到S3C2440(三)——判断NAND还是NOR启动的汇编代码

推荐阅读最新更新时间:2024-11-11 13:15

STM32移植UCGUI3.90笔记
在MDK环境下,终于将3.90版本的UCGUI移植到STM32下了,在网上看到的都是例程代码,很少看到有关于在STM32下移植UCGUI的教程方法,为了方便大家,特写此移植方法,大家可以借鉴(有错误之处,望大家指点出来共同讨论!) 移植步骤: 第一步:首先,得把你的TFT底层驱动写好,既在裸机下,可以正常显示。 第二步:加入UCGUI程序包。 第三步:配置LCDConf.h GUIConf.h GUITouchConf.h(由于我的液晶不带触摸功能,此配置在此不讲。) 配置LCDConf.h文件如下: #ifndef LCDCONF_H #define LCDCONF_H #defi
[单片机]
charishi thttpd 在S3C6410的移植-web服务程序的应用
1. 在VMWare 虚拟机上将arm-linux-gcc 4.3.1配置好; 2. 下载thttpd软件包并解压; 3. 在thttpd根目录下运行: ./configure; 4. 修改 Makefile文件 CC = gcc 替换为 CC = arm-linux-gcc,共3处,压缩根目录包1个,cgi-src目录1个,extras目录1个; 5. 执行make命令; 6. 将生成的 thttpd 复制到目标板 /usr/sbin 目录,contrib/redhat-rpm/thttpd.conf 复制到目标板 /etc 目录,并添加 thttpd 为可执行 chmod 777 thttpd; 7. 使用 vi
[单片机]
s3c2440 --跑马灯 C+汇编代码
/*led_asm_c.c*/ #define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control #define rGPFDAT (*(volatile unsigned *)0x56000054) //Port F data #define rGPFUP (*(volatile unsigned *)0x56000058) //Pull-up control F //GPFCON 8口的 extern int delay(int time); /*声明汇编函数*/ int main() { /*设置 GPFCON*/ rGPFCON &= 0x00f
[单片机]
基于3c2410的linux2.6.22移植(1)
经历近2周的时间,查阅大量的参考资料和贴子,终于成功将linux2.6.22移植到ARM2410上。中间走了不少弯路,不过走弯路也是一种收获,因为可以碰到和解决许多问题,增长知识。因为linux版本问题以及开发平台的不同,网上的很多文章并不完全适合自己的板子,需要自己摸索和修改。写这点东西算是对前一阶段工作的总结,以免将来忘记。 移植大体的步骤主要有: (1) 交叉编译环境的建立(我的主机系统是ubuntu7.04); (2) 开发板(我用的是博创的2410)NAND flash 分区管理; (3) LCD、网卡驱动的移植; (4) linux内核配置和编译; (5) ro
[单片机]
s3c2440硬件篇之四:NandFlash(1)介绍
如上图所示:小页Nand容量=528B * 32页 * 4096块 = 528M bits.可用512M bits.即64M. 下图为英文原文pdf资料截图。 注:NandFlash的命令,数据,地址都通过8个I/O口输出。 (1)小页Nand。 ,一页大小为(512+16)528字节(byte).将一页分为3个区:A区为0~255字节,B区为256~511字节,C区为512~527字节。访问某页时,需要选定特定的区:命令00h让地址指针指向A区,01h指向B区,50h指向C区。 Nand Flash的写操作是以页为单位的,但是可以写一页中的一部分。发出命令80h后,紧接着发出4个地址序列,然后向Flash发送数据,然
[单片机]
<font color='red'>s3c2440</font>硬件篇之四:NandFlash(1)介绍
OK6410A 开发板 (三) 23 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 DM 的一次实例分析 - 串口
串口相关的 UCLASS DRIVER DEVICE UCLASS ./drivers/serial/serial-uclass.c L504 504 UCLASS_DRIVER(serial) = { 505 .id = UCLASS_SERIAL, 506 .name = serial , 507 .flags = DM_UC_FLAG_SEQ_ALIAS, 508 .post_prob
[单片机]
S3C2440-DMA
S3c2440A 支持位于系统总线和外设总线之间的4 个通道的控制器。每个DMA 控制器通道 无限制地执行系统总线上的设备或外设总线上的设备之间数据搬移。换句话说,就是每个 通道都操作一下四种情况: (1)源和目的设备都在系统总线上 (2)源设备在系统总线上,目的设备在外设总线上 (3)源设备在外设总线上,目的设备在系统总线上 (4)源设备和目的设备都在外设总线上 DMA 的主要有点就是其传输数据不需要CPU 的干涉。DMA 操作可由软件或来自内设或外 部请求引脚来初始化。 DMA每次传送2个字节,放到FIFO中,IIS就播放,FIFO空,导致DMA被再次触发,直到传输计数器为0,产生DMA中断,CPU进入中断处理程
[单片机]
S3C2440裸机------NandFlash编程_擦除与烧写
1.擦除 NandFlash是以块为单位进行擦除的,一个块是128K,从上面的时序图我们可以看到,首先我们要发出60命令,然后发出三个行地址,然后发送D0H,然后等待擦除结束。 int nand_erase(unsigned int addr, unsigned int len) { int page = addr / 2048; if (addr & (0x1FFFF)) { printf( nand_erase err, addr is not block alignnr ); return -1; } if (len & (0x1FFFF)) { printf(
[单片机]
<font color='red'>S3C2440</font>裸机------NandFlash编程_擦除与烧写

推荐帖子

意法半导体发布全新STM32超值系列微控制器,32美分的价格及32位的性能
基于ARM®Cortex™-M0的STM32F030超值系列微控制器让成本敏感型应用受益于32位优势意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布最新的STM32F030超值系列微控制器。批量订货最低价仅为0.32美元,STM32F030是低预算项目的理想选择,同时还让设计人员有机会使用型号齐全且软硬件兼容的32位微控制器产品组合,从而提升应用性能,扩大产品系列。全新STM32F030超值
wstt stm32/stm8
零点漂移现象及其产生的原因
一、零点漂移现象及其产生的原因零点漂移是指当放大电路输入信号为零时,由于受温度变化,电源电压不稳等因素的影响,使静态工作点发生变化,并被逐级放大和传输,导致电路输出端电压偏离原固定值而上下漂动的现象。显然,放大电路级数愈多、放大倍数愈大,输出端的漂移现象愈严重。严重时,有可能使输入的微弱信号湮没在漂移之中,无法分辩,从而达不到预期的传输效果,因此,提高放大倍数、降低零点漂移是直接耦合放大电路的主要矛盾。产生零点漂移的原因很多,如电源电压不稳、元器件参数变值、环境温度变化等。其中
Jacktang 模拟与混合信号
新手请教pic单片机spi接口程序执行过程
voidSPIEXCHANGE(count)//启动SPI传送intcount;{if(count0){//有数据可送?i=0;RE2=0;//片选位置低电平SSPBUF=a;//送数}else;//否则,空操作,并返回return;}//等待SPI传送完成
csfcsf Microchip MCU
为什么LCD数据线上要加排阻?
如题为什么LCD数据线上要加排阻?加排阻有2个作用:滤波和防护ESD以前我的LCD数据线加的ESD+EMI器件,后来为了降低成本,我直接排阻。我的LCD和主板之间加了一段FPC,当把LCD直接接到主板上,不要那段fpc时,效果很不好,有很多像素颜色变了,加上FPC后反而会好很多,请问这是为什么呢?加排阻可以使信号上升时间变长,可以减小反射和高次谐波分量,对减小串扰和辐射有帮助引用3楼guetcw的回复:加排阻可以使信号上升时间变长,可以减小反射和高次谐波分量
zpfst 嵌入式系统
stm32最大败笔,未使用前有感--个人见解,欢迎拍砖
目前stm32得益于cortexm3内核,速度功耗比确实有质的飞跃,目前市场成品cortexm3方面属于速度最高(72MHz),性价比高,零售价格公道实惠。其外设功能几乎可以认为是积木化,同一样功能资源几乎都是独立的,在各大芯片制造商里可以说独树一帜。所以,只要一册参考资料在手,连芯片型号都不用就可动手了。可以说,stm32已经非常完美,TIMx是明显的遗憾,或许它更注重MOTOR应用,如果这样我无话可说。TIMx化很大力气,32位跟32位计数器及联,很大墓的就是为了实现6st
6666666 stm32/stm8
欢迎RF/无线版主
欢迎RF/无线版主欢迎RF/无线版主多谢站长的礼物,希望我们的社区红红火火。Re:欢迎RF/无线版主呵呵,共同努力Re:欢迎RF/无线版主
yanmei RF/无线
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved