历史上的今天
今天是:2025年02月09日(星期日)
2021年02月09日 | 基于S3C6410的ARM11学习(十二) 代码拷贝及led测试输入日志
2021-02-09 来源:eefocus
之前已经将ddr进行初始化了,这样就可以使用ddr了。首先就要将代码从stepping stone拷贝到ddr中。最后在ddr中运行程序。如果外部nandflash还有剩余的程序,还要将剩下程序拷贝到ddr中。
Stepping stone的起始地址是0x0c000000,DDR的起始地址是0x50000000。在上电的时候,CPU会自动把NANDFLASH的前8K代码拷贝到stepping stone中。但是现在写的代码是比较小的,还没有超过4K。所以这里就设定拷贝的代码是前4K代码。
这样,代码就比较好写了。

R0保存的是stepping stone的起始地址,r1保存的是要拷贝的ddr的地址,这里地址是0x50008000,为什么不是0x5000_0000了。这个是因为链接脚本设定的链接地址就是0x50008000。

在链接脚本中,设定的链接起始地址是0x50008000。之后的代码都是以这个地址作为起始地址进行链接。所以ddr的起始地址要设定为这个。这样的话,绝对跳转才能跳转成功。

上图是反汇编出来的代码。可以看到第一行代码的地址就是50008000。
设置r3为r0的地址加上1024*4,表示stepping stone的4K大小代码处的地址。后面代码就是从stepping stone中取出数据,存在ddr中。地址依次加一。直到判断目前在stepping stone的地址和4K大小代码地址一样,就说明程序拷贝完毕。程序就返回了。
这样ddr初始化和代码拷贝的工作就结束了。下面就要对这个代码进行测试了,看看代码是否写的正确。简单的测试方法,就是将之前的流水灯的代码放到ddr初始化和代码拷贝代码之后。

把程序下到开发板中去,能看到灯是在不停的闪烁的。就说明ddr初始化和代码拷贝目前是没有问题的。
后面就要初始化c语言环境,也就是设置栈和对bss段清零。然后跳转到c代码去运行。
史海拾趣
|
在keil编译 错误一大堆烦死了,大家帮帮忙看下 哪出问题了 先谢谢了 #include sbit p3_0=P3^0; sbit p0_0=P0^0; sbit p0_1=P0^1; void delay(unsigned int k); int cheak(unsigned char *jj); void scankey(); int n=0; main() {   ...… 查看全部问答> |
|
在WINCE 6.0下,内核下的EXE以及DLL都能正常运行,外部数字签名过的EXE以及DLL也可以在这个内核下运行。任何无数字签名的EXE以及DLL则不能运行。不知该如何做? 我在平台定制时,已经将sysgen_certmod设为1。重新build and sysgen。 … 查看全部问答> |
|
谁能举个例子, 比如,我想使用arm芯片的I/O口C,也就是GPGC,用它的若干个口吧,比如8~11 该如何调用这个函数呢?期待答案,谢谢 … 查看全部问答> |
|
MSP430的I/O口置输入时,应是高阻状态,这个电阻有多大?内部属于啥电路? 比如:在I/O口通过一个10K电阻和0.1的电容接地,先将I/O口置输出高,对电容充电,足够长时间后(确保电容充满),将I/O口置为输入,电容上的电量能否保持?… 查看全部问答> |
|
SPS-2000焊锡搅拌机(MALCOM)特长:无铅焊锡搅拌时温度等的关系是重要的因素MALCOM <SPS-2000>设定了温度管理、实现搅拌自动停止机能,无论是刚从冰箱拿出的锡膏,工作人员只需按一下按钮就可以搅拌出最佳的状态的锡膏机器。公转约 ...… 查看全部问答> |
|
目前,对嵌入式Linux系统的开发正在蓬勃兴起,并已形成了很大的 市场。但就目前的技术而言,嵌入式Linux的研究成果与市场的真正需求还 有一些距离,因此,嵌入式Linux系统走向成熟还需要在以下几个方面有所 发展。下面就由福州卓跃教育具体介绍 ...… 查看全部问答> |
|
活动详情:>>恩智浦技术中心答题有礼!!! 活动已经结束一段时间了,很抱歉,现在才公布名单,不多说了,赶紧看看下面有没有各位参与者的大名吧!获奖者希望继续支持我们的活动,未获奖的朋友们希望不要灰心,下次幸运属于你哟!!! &nb ...… 查看全部问答> |




