历史上的今天
返回首页

历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2019年10月09日 | FL2440 (2) 裸板程序 SDRAM

2019-10-09 来源:eefocus

以下是jz2440的head.s文件,在FL2440可以使用,不做更改.注意这是NANDFLASH启动方式,FL2440开发板上的J5和J2都要插上.


@*************************************************************************

@ 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                 @ 设置堆栈,64M内存

    bl  main

halt_loop:

    b   halt_loop

 

disable_watch_dog:

    @ 往WATCHDOG寄存器写0即可

    mov r1,     #0x53000000

    mov r2,     #0x0

    str r2,     [r1] @将r2寄存器的值写到r1寄存值对应的地址单元

    mov pc,     lr      @// 返回,用bl跳转会把返回地址(bl的下一条指令的地址)保存在lr寄存中

 

copy_steppingstone_to_sdram:

    @ 将Steppingstone的4K数据全部复制到SDRAM中去

    @ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000

    

    mov r1, #0

    ldr r2, =SDRAM_BASE @第二参数有"="表示伪指令,r2为读SDRAM_BASE的地址

    mov r3, #4*1024

1:  

    ldr r4, [r1],#4     @ 从Steppingstone读取4字节的数据,并让源地址加4

    @ //将r1寄存器的值做为地址取的的数据存到r4中,并且r1寄存器的值+4

   

    str r4, [r2],#4     @ 将此4字节的数据复制到SDRAM中,并让目地地址加4  

@ //将r4的数据保存到地址为r2寄存器值,并且r2寄存器的值+4

    

    cmp r1, r3          @ 判断是否完成:源地址等于Steppingstone的未地址?

    bne 1b              @ 若没有复制完,继续 跳到上个段开始,1的位置  b:back 1表示第一个1标号处

    mov pc,     lr      @ 返回

 

memsetup:

    @ 设置存储控制器以便使用SDRAM等外设

 

    mov r1,     #MEM_CTL_BASE       @ 存储控制器的13个寄存器的开始地址

    adrl    r2, mem_cfg_val         @ 这13个值的起始存储地址

@ adrl 这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。

@

    

    add r3,     r1, #52             @ 13*4 = 54  r3=r1+52 =0x48000000 +#52 0x48000034

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

我的FL2440开发板的SDRAM是两片 H57V2562GTR-75C 最高主频133,16M*16。


下面是makefile文件,没有改变还是jz2440的.


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

下面是leds.c文件,要对应FL2440的原理图.


 

//FL2440

#define GPBCON (*(volatile unsigned long *)0x56000010)

#define GPBDAT (*(volatile unsigned long *)0x56000014)

 

#define GPB5_out (1<<(5*2))

#define GPB6_out (1<<(6*2))

#define GPB8_out (1<<(8*2))

#define GPB10_out (1<<(10*2))

 

void  wait(volatile unsigned long dly)

{

for(; dly > 0; dly--);

}

 

 

int main(void)

{

unsigned long i=0;

//     0010 0000

//     0100 0000

//   1 0000 0000

// 100 0000 0000

unsigned long arr[4]={0x20,0x40,0x100,0x400};

GPBCON = GPB5_out|GPB6_out|GPB8_out|GPB10_out; // 将LED0-3对应的GPB 5/6/8/10  output

 

while(1)

{

for(i=0;i<4;i++)

{

//GPBDAT=0x7ff;

//wait(90000);

GPBDAT=~arr[i];

wait(90000);

                 }

}

 

return 0;

}

 

编译环境用的是ubuntu9.10,直接用韦老师的虚拟机文件。

推荐阅读

史海拾趣

Corning Cable Systems公司的发展小趣事

1970年,Corning Cable Systems公司凭借其创新技术,成功发明了世界上首款低损耗光纤。这一里程碑式的发明彻底改变了通信行业的面貌,推动了光纤通信的飞速发展。此后,公司不断突破技术壁垒,提升光纤性能,为全球范围内的通信网络建设提供了强有力的支持。

Aptos Technology公司的发展小趣事

为了加速发展,Aptos积极寻求与行业内外的合作伙伴建立合作关系。通过与微软、阿里云等知名公司的合作,Aptos获得了更多的技术支持和市场资源。这些合作伙伴关系的建立,不仅提升了Aptos的技术实力和市场竞争力,还为其未来的发展奠定了坚实的基础。

Eby Electro Inc公司的发展小趣事

进入21世纪后,电子行业竞争日益激烈,Eby Electro Inc意识到必须依靠技术创新才能保持竞争力。公司投入大量资金进行研发,成功推出了一系列具有自主知识产权的电子产品。其中,一款高效能、低功耗的集成电路芯片,因其出色的性能而受到市场的广泛认可。这次技术创新不仅为公司带来了可观的收益,也为公司在行业内树立了良好的技术形象。

EVERLIGHT公司的发展小趣事

随着全球环保意识的不断提高,EVERLIGHT也积极响应环保号召,致力于研发和生产环保型LED产品。公司采用环保材料和节能技术,不断降低产品的能耗和废弃物排放。同时,公司还积极推广绿色照明理念,为客户提供环保、节能的照明解决方案。这种对环保的关注和实践让EVERLIGHT在电子行业中树立了良好的形象。

Gazelle Microcircuits Inc公司的发展小趣事
+12V电压是电脑主板中非常重要的电压之一,它主要用于给硬盘驱动器、光驱、风扇等大功率设备供电。这些设备通常需要较高的电压来驱动其内部的电机或机械结构。
华瓷(Chinocera)公司的发展小趣事

在追求经济效益的同时,华瓷始终注重环保和可持续发展。公司投入大量资金用于研发环保型陶瓷材料和生产工艺,致力于减少生产过程中的能源消耗和废弃物排放。同时,华瓷还积极参与社会公益事业,为保护环境、促进可持续发展贡献自己的力量。

问答坊 | AI 解惑

适用于多平台的新型的按键扫描程序

以下假设你懂C语言,因为纯粹的C语言描述,所以和处理器平台无关,你可以在MCS-51,AVR,PIC,甚至是ARM平台上面测试这个程序性能。当然,我自己也是在多个项目用过,效果非常好的。好了,工程人员的习惯,废话就应该少说,开始吧。 核心算法: ...…

查看全部问答>

单片机与对讲机

单片机输出的数字信号,如何加载到对讲机上发射出去?还是将数字信号转换一下再加载呢?转换成什么格式呢?…

查看全部问答>

vs2005中新建的pocket PC2003 项目与wince4.0是什么关系?

vs2005中新建的pocket PC2003 项目与wince4.0是什么关系? 我新建的是pocket PC2003 项目,看文档说明书的时候,人家都说是,wince3.0 4.0什么的, 我想知道 pocket PC2003 到底是对应wince哪个版本呢? 先谢了..…

查看全部问答>

打开DHCP之后,Microsoft ActiveSync无法连接

wince 2440开发板。我发现个奇怪的问题,如果DHCP打开的话,Microsoft  ActiveSync就连接不上了 刚刚开始玩wince. 本来开始不知道有个DHCP需要开启,就没有开,wince一开就Microsoft  ActiveSync就能连上, 后来出现 Tim ...…

查看全部问答>

关于把自己定制的内核下载到开发板的问题

我的开发板有个操作系统,已经做好操作系统了,现在我想把自己定制的内核下载到开发板上.   我在PB->Target->Configure Remote Connection->Download(Ethernet)->configure中找不到我的开发板的设备,请问这是什么原因? …

查看全部问答>

linphone-1.7.1的编译问题

make  all-am make[1]: Entering directory `/home/lonelysand/huang/lin/linphone-1.7.1/mediastreamer2/src\' /bin/sh ../libtool --tag=CC --mode=link gcc -I.. -I../../oRTP/include -I/home/lonelysand/linphone/speex/include&n ...…

查看全部问答>

【求助】不通过循线 的小车定位问题

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 本人菜鸟,求助小车前方1m处有一个木块,木块尺寸5cm x 5cm x 5cm 场地不能循线,问:小车如何才能行驶到木快处?只通过超声波传感器能实现吗? 1m的距离啊求解好方案 [ 本帖最后由 beife ...…

查看全部问答>

OLED显示器的DC生产测试中测量误差的来源

测量误差的来源是由测试系统的精度、以及在对OLED给出信号和进行测量期间所未曾想到的瞬态过程引起的。在进行快速的生产测试时,在稳定状态下进行精确DC测量的能力,是与尽可能快地完成测试的需求相互牵制的。测试周期的时间长短是由源/测量以及 ...…

查看全部问答>

如何用好电位器?

作者: TI 专家 Bruce Trump 翻译: TI信号链工程师 David Zhao (赵大伟) 电位器可以起到位置传感器的作用,同时可以对电路进行适当的调整。电位器最适宜被用作分压器。电位器还可以充当可变电阻,然而这时会存在一些潜在的缺陷。你知道两个功能间 ...…

查看全部问答>