启动文件head.S源码:
@*************************************************************************
@ File:head.S
@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@*************************************************************************
.equ MEM_CTL_BASE, 0x48000000
.equ SDRAM_BASE, 0x30000000
.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 @ 若没有复制完,继续
mov pc, lr @ 返回
memsetup:
@ 设置存储控制器以便使用SDRAM等外设
mov r1, #MEM_CTL_BASE @ 存储控制器的13个寄存器的开始地址
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 @ 若没有写成,继续
mov pc, lr @ 返回
.align 4
mem_cfg_val:
@ 存储控制器13个寄存器的设置值
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
====================================================================
leds.c源码:
#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;
}
====================================================================
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
arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf
arm-linux-objcopy -O binary -S sdram_elf sdram.bin
arm-linux-objdump -D -m arm sdram_elf > sdram.dis
clean:
rm -f sdram.dis sdram.bin sdram_elf *.o
====================================================================
注意:
虽然nor flash、网卡和SDRAM的接口一样都是内存类接口,但是SDRAM属于内存类设备,nor flash、网卡不属于内存类设备,叫做RAM Like。
此实验在测试时不能直接下载到内存中直接运行,要先烧写到nand flash中再运行,否则从片内内存拷贝4k到SDRAM中运行系统会崩溃。
具体下载方法参见:“JZ2440开发板裸板烧写方法”
上一篇:JZ2440裸板之MMU操作
下一篇:JZ2440裸板之GPIO操作启动分析
推荐阅读
史海拾趣
在电子行业中,品质是企业生存和发展的关键。台湾稳态公司深知这一点,因此从创业之初就坚持品质至上的原则。公司不仅严格把控原材料采购和生产流程,还建立了完善的品质管理体系和售后服务体系。通过不断提升产品品质和服务水平,稳态公司赢得了客户的信赖和口碑,为公司的长远发展奠定了坚实的基础。
在深海光缆领域,Corning Cable Systems公司也展现出了强大的实力。公司成功研发出适用于深海环境的光缆产品,并在多个国际项目中得到了广泛应用。这些深海光缆不仅具有优异的传输性能,还能够在极端恶劣的海底环境下保持长期稳定运行,为跨洋通信提供了可靠的保障。
1970年,Corning Cable Systems公司凭借其创新技术,成功发明了世界上首款低损耗光纤。这一里程碑式的发明彻底改变了通信行业的面貌,推动了光纤通信的飞速发展。此后,公司不断突破技术壁垒,提升光纤性能,为全球范围内的通信网络建设提供了强有力的支持。
在技术创新方面,Corning Cable Systems公司积极与全球范围内的科研机构和企业开展合作。通过与这些合作伙伴的紧密合作,公司不断引进新技术、新工艺和新材料,推动光纤通信技术的不断进步。这些合作不仅增强了公司的技术实力,也为整个行业的发展注入了新的活力。
ASPEED的AST2600 BMC与瑞萨电子的I3C器件相结合,为客户提供了设计便捷、带宽增强且系统成本优化的解决方案。这一合作不仅展示了ASPEED在服务器管理领域的实力,还进一步推动了DDR5解决方案对I3C标准的推广使用。通过双方的努力,共同客户在实现向全新高速总线接口飞跃发展的过程中,获得了更加信心满满的设计体验。
成都成电硅海公司自2009年成立以来,就以其独特的技术创新能力在电子行业中崭露头角。公司创始人李德全深谙半导体行业的技术趋势,带领团队攻克了一个又一个技术难题。在成立初期,公司就成功研发出一款高性能的硅基材料,这一创新不仅打破了国外企业的技术垄断,还为公司赢得了市场的初步认可。
如何回答十个最棘手的面试问题(上) 在面试前先了解、练习对几个很难的问题进行回答会帮助你对其他问题的回答做准备。有的问题问得比较多,有的虽然较少但却是回答其它问题的基础。 &nbs ...… 查看全部问答∨ |
一、系统说明 1、 在中央控制监视中心(Remote storage)进行本地或远程独立的、视频监视或录影;将影像通过网络摄影机上传数据网络,所记录之M-jpeg文件清晰,并可作为辅证,通 ...… 查看全部问答∨ |
每次只要启动到开始的黑色的屏幕(就是那个之后会出现白色VMWARE大字前的那个黑色屏幕)的时候就停住了,无论怎么等待都没有反应,一直黑屏,也不能power off或者关闭vmware但是程序并没死掉只是没有反应,而且vmware我也重新安装了很多次但是完全 ...… 查看全部问答∨ |
根据DirectX的例子写了一个用directshow播放视频的例子,下载到WinCE下,发现可以播放avi,mepg等格式, 却不支持jpeg图片格式.这个是什么原因?是不是缺少什么库文件?还是filter没有写好,缺少什么函数调用之类的? 请各位大 ...… 查看全部问答∨ |
菜鸟求助 :YL2440开发板每次添加新硬件时主机死机,为什么呢? 如题,刚拿到一块YL2440开发板,与主机相连,每次安装新硬件USB驱动,主机都会死机,为什么?网络交叉线链接正确但总是链接不上!高手帮帮我吧!… 查看全部问答∨ |
(C#版本)wm5.0的GPS问题,如何将GPS例子中添加海拔和方向的参数? 在windowsMobile5.0中的有一个GPS的例子我看过。(它是通过GPSapi.dll这个文件进行抓取GSP数据的) 现在我已经将那个例子拷到我现在的项目中去了,我想是在原有的基础上添加这样几个参数(海拔、方向、GSP的连接状态和定位状态) 不知道可以吗? ...… 查看全部问答∨ |
在这混的时间也不短了,一直没正儿八经的给公司做过一回广告。看到最近一直出现有人在问哪里可以申请到ST MCU Sample的问题,相信论坛上有很多通过电子邮件找到我的人,知道我是可以提供部分MCU样品的。今天我就王婆卖瓜一回了。俺 ...… 查看全部问答∨ |