启动文件初始化代码:
@*************************************************************************
@ File:head.S
@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@ 代码流程:
@1> 关看门狗
@2> 设置存储控制寄存器(配置)
@3> 复制代码到SDRAM中
@4> 设置堆栈
@5> 跳转到main执行
@*************************************************************************
.equ MEM_CTL_BASE, 0x48000000 @.equ 命令用于把常量值设置为可以在文本段中使用的符号
.equ SDRAM_BASE, 0x30000000 @类似于C语言中#define
@0x48000000-BWSCON,0x30000000-BANK6
.text
.global _start
_start:
bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启
bl memsetup @ 设置存储控制器
bl copy_steppingstone_to_sdram @ 复制代码到SDRAM中
ldr pc, =on_sdram @ 跳到SDRAM中继续执行
on_sdram:
ldr sp, =0x34000000 @ 设置堆栈
bl main
halt_loop:
b halt_loop
disable_watch_dog:
@ 往WATCHDOG寄存器写0即可
mov r1, #0x53000000
mov r2, #0x0
str r2, [r1]
mov pc, lr @ 返回
copy_steppingstone_to_sdram:
@ 将Steppingstone的4K数据全部复制到SDRAM中去
@ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000
mov r1, #0
ldr r2, =SDRAM_BASE
mov r3, #4*1024
1:
ldr r4, [r1],#4 @ 从Steppingstone读取4字节的数据,并让源地址加4
str r4, [r2],#4 @ 将此4字节的数据复制到SDRAM中,并让目地地址加4
cmp r1, r3 @ 判断是否完成:源地址等于Steppingstone的末地址?
bne 1b @ 若没有复制完,继续
@b:backward 向后跳转 f:forward 向前跳转
mov pc, lr @ 返回
memsetup:
@ 设置存储控制器以便使用SDRAM等外设
mov r1, #MEM_CTL_BASE @存储控制器的13个寄存器的开始地址,0x48000000
adrl r2, mem_cfg_val @ 这13个值的起始存储地址
add r3, r1, #52 @ 13*4 = 54
1:
ldr r4, [r2], #4 @ 读取设置值,并让r2加4
str r4, [r1], #4 @ 将此值写入寄存器,并让r1加4
cmp r1, r3 @ 判断是否设置完所有13个寄存器
bne 1b @ 若没有写成,继续
@b:backward 向后跳转 f:forward 向前跳转
mov pc, lr @ 返回
.align 4 @以4字节对齐
mem_cfg_val:
@ 存储控制器13个寄存器的设置值
.long 0x22011110 @ BWSCON 0x48000000
.long 0x00000700 @ BANKCON0 0x48000004
.long 0x00000700 @ BANKCON1 0x48000008
.long 0x00000700 @ BANKCON2 0x4800000C
.long 0x00000700 @ BANKCON3 0x48000010
.long 0x00000700 @ BANKCON4 0x48000014
.long 0x00000700 @ BANKCON5 0x48000018
.long 0x00018005 @ BANKCON6 0x4800001C
.long 0x00018005 @ BANKCON7 0x48000020
.long 0x008C07A3 @ REFRESH 0x48000024
.long 0x000000B1 @ BANKSIZE 0x48000028
.long 0x00000030 @ MRSRB6 0x4800002C
.long 0x00000030 @ MRSRB7 0x48000030
Makefile
sdram.bin : head.S leds.c
arm-linux-gcc -c -o head.o head.S
arm-linux-gcc -c -o leds.o leds.c
#-g:加入调试信息 -c只编译不连接
arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf
#-Ttext 0x0000000:指定代码段起始地址为0x30000000
arm-linux-objcopy -O binary -S sdram_elf sdram.bin
# binary:二进制的 -S:不从源文件复制重定位信息和符号信息到目标文件中去
arm-linux-objdump -D -m arm sdram_elf > sdram.dis
# -D:反汇编所有段 -m arm:指定反汇编文件使用arm架构
clean:
rm -f sdram.dis sdram.bin sdram_elf *.o
查看反汇编文件:
bl disable_watch_dog @连接地址0x30000000
bl memsetup @连接地址0x30000004
bl copy_steppingstone_to_sdram @连接地址0x30000008
ldr pc, =on_sdram @连接地址0x3000000c
ldr sp, =0x34000000 @连接地址0x30000010
我们在Makefile中指定了连接地址为0x30000000(0x30000000是sdram中的初始地址),而当我们在跳转到sdram之前,还有几行代码是在steppingstone运行的?为什么可以运行而不出错了?
解释:虽然19~21行连接地址都在SDRAM中,但是由于它们都是位置无关的相对跳转指令,所以可以在Steppingstone里执行。详解点我!
led.s
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
void wait(volatile unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0;
GPFCON = GPF4_out|GPF5_out|GPF6_out; // 将LED1,2,4对应的GPF4/5/6三个引脚设为输出
while(1){
wait(30000);
GPFDAT = (~(i<<4)); // 根据i的值,点亮LED1,2,4
if(++i == 8)
i = 0;
}
return 0;
}
上一篇:零死角玩转2440下NandFlash拷贝并跳转到SDRAM的(启动过程)
下一篇:S3C2410-2440启动代码内数据复制过程的分析
推荐阅读
史海拾趣
随着国内市场的逐渐饱和,Advanced Electronic Packaging公司开始将目光投向海外市场。公司积极参与国际电子展会和技术交流活动,展示其先进的封装技术和优质产品。同时,公司还加大了对海外市场的宣传力度,通过线上线下相结合的方式提升品牌知名度和影响力。在不懈的努力下,公司的产品和服务逐渐赢得了国际市场的认可和青睐,海外市场份额逐年攀升。
Benchmarq Microelectronics Inc的创立源于几位工程师对半导体技术的深刻理解和市场需求的敏锐洞察。他们看到在快速发展的电子行业中,高性能、低功耗的半导体产品具有巨大的市场潜力。于是,他们决定共同创立Benchmarq Microelectronics Inc,致力于研发和生产先进的半导体产品。在创立初期,公司面临着资金短缺、技术挑战和市场竞争等多重困难。然而,通过团队的努力和合作,公司逐渐攻克了技术难关,推出了一系列受到市场欢迎的半导体产品,初步实现了盈利。
近年来,随着全球半导体市场的不断变化和技术的快速发展,Renesas也面临着一些挑战。为了应对这些挑战并保持竞争力,Renesas开始进行战略转型和结构调整。公司加强了与客户的合作和沟通,深入了解市场需求和趋势;同时,Renesas还加大了对新技术和新产品的研发投入,不断提升自身的技术实力和创新能力。此外,Renesas还注重人才培养和引进,打造了一支高素质、专业化的团队。这些措施的实施使Renesas在应对挑战和转型过程中取得了积极的成效。
随着全球化进程的加速,FlexiPanel意识到构建稳定的全球供应链体系对于企业的长远发展至关重要。公司积极寻求与国内外知名芯片制造商、天线供应商等合作伙伴建立战略合作关系,共同推动RF模块技术的进步和产业化应用。通过整合全球资源,FlexiPanel不仅提升了自身的产品研发和生产能力,还确保了产品质量的稳定性和可靠性,赢得了客户的广泛信赖。
随着电子技术的飞速发展,FMI公司紧跟时代步伐,不断研发新技术和新产品。在1992年,FMI成功将频率管理扩展到OEM市场,进一步拓宽了其业务范围。这一举措不仅增强了公司的市场竞争力,还为公司带来了更多的商业机会。通过为计算机外设、工业仪器、局域网/广域网等多个领域提供定制化的频率控制解决方案,FMI逐渐成为了行业内的佼佼者。
随着科技的不断进步,超音意识到技术创新对于公司发展的重要性。因此,公司加大了研发投入,积极引进高端人才,不断推出具有创新性和竞争力的产品。其中,超音的一款高端音响产品凭借其卓越的音质和精美的外观设计,在市场上获得了广泛的好评。此外,超音还积极与其他科技公司合作,共同研发新产品,不断拓宽产品线。
摘 要:介绍了应用一种新的高密度组装技术来降低X波段有源阵列雷达的成本!重量及体积\"文中介绍的组件使用了多层AlN基板!倒装单片微波集成电路芯片(MMIC)!共面波导传输线及无需焊接的用于互连的毛钮扣\"论述了设计优化!组件结构与组装技术以及测试结 ...… 查看全部问答∨ |
FBIP1553FT ——高可靠容错MIL-STD-1553A/B总线控制器IP核 1.遵循MIL-STD-1553A/B标准,支持MIL-STD-1553A/B规定的全部协议 2.可由软件配置为BC、BM或者RT 3.寄存器操作同BU6158X完全兼容 4.采用容错设计,大大提高总线控制器可靠性 可纠正存 ...… 查看全部问答∨ |
我在安装ActiveSync的时候出了个错,错误提示为“写入文件时出错:C:\\Program Files\\Microsoft ActiveSync\\wcesmgr.exe,请验证您有权访问该目录” 请问这是怎么回事,我重启过机器,还是不行,并且我用的就是administrator账户,在其他的机子上 ...… 查看全部问答∨ |
|
开发CASIO IT500 (WinCE4.1)和电脑通讯的程序,需要哪些东西 我是个新手 我要在CASIO it500上开发一个软件, 请问 1:用VS2005,可以么? 2:开发语言用c#,it500支持吧? 3:开发这个软件,好像不能用虚拟机吧,因为it500有扫描功能,vs2005自带的虚拟软件,没有扫描功能。 4:和PC通讯,需要学习那些 ...… 查看全部问答∨ |
|
TSP技术通过允许用户使用标准的PC控制或者创建在仪器内的微处理器上执行的嵌入式测试脚本,增强了仪器控制。通过使用TSP测试脚本而非PC用于仪器控制,能够避免PC控制器和仪器之间的通信延迟,这提高了测试产能。测试脚本可以包含数学和判决规则, ...… 查看全部问答∨ |
Orcad Capture CIS删除一个元件后自动编号,导入网表到allegro出现DRC 例如我画了10个电阻,编号为R1~R10,allegro里面已经画好连线了。然后在原理图把R5给删除了,重新自动编号,然后导入网表,原先的R7变成了R6,占用了原先R6的位置,然后就提示DRC错误了。请问这种情况怎么处理。谢谢。… 查看全部问答∨ |