历史上的今天
返回首页

历史上的今天

今天是:2025年07月22日(星期二)

正在发生

2018年07月22日 | S3C2440 跳到 SDRAM 中执行程序

2018-07-22 来源:eefocus

从Nandflash启动CPU时,CPU会通过内部的硬件将Nandflash开始的4KB数据复制到为Steppingstone的4Kb的内部RAM中(起始地址为0)


然后跳到0地址开始执行.


我们这个例子是先使用汇编语言设置好存储控制器,使我们外接的SDRAM可用,然后把程序本身从Steppingstone复制到SDRAM处,


最后跳到SDRAM中执行.


程序的什么关看门狗,设置存储控制器,复制代码到SDRAM中都比较简单,


程序跳入到C程序之前要设置栈供C程序使用!!!


ldr sp, =0x34000000                 @ 设置堆栈

栈设置在顶部,自上而下.



写这篇记录博客的原因最重要的是:


ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行

这句,这个得弄明白,说实话,我对这个跳转有时候很清楚,有时候又感到模糊.

首先:


Makefile中的文件,

连接地址为0x30000000,是指运行时程序应该位于的地址.即是我们SDRAM的起始地址.


在反汇编中我们可以看到:


ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行

就相当于一个取地址指令,

当前该指令地址的PC=当前该指令地址 + 8;

即是PC = 0x0c +8 ;


就是到0xA4的地址,也就是0x300000A4;




所以:



程序跳到SDRAM的0x30000010; 即是:




对应上了跳到on_sdram,

对应上程序执行的图示:注意PC的所指位置:


1.



2.



3.



4.


程序在SDRAM中执行感觉慢是因为SDRAM的性能比内部SRAM差一些.

这样拷贝小于4KB的程序到SDRAM中运行,感觉多此一举,

但是我们程序要是大于4KB的话,这个就是不可避免要采用的方法,

但是要复制Nandflash4KB后面的代码需要使用Nandflash控制器来读取Nandflash.

汇编代码具体如下,我贴了出来:


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

@ 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


推荐阅读

史海拾趣

BITECH公司的发展小趣事

非常抱歉,由于BITECH公司并非我所熟知的特定电子行业公司,我无法直接提供关于其发展的具体故事。同时,要准确描述一个公司的发展故事,需要详细的数据和事实支持,而这些信息通常需要直接从公司本身或相关报道中获取。

然而,我可以尝试构建一个关于电子行业中某家公司发展故事的框架,供您参考。这些故事可能会涉及公司的创新、市场扩张、技术突破、合作伙伴关系以及行业挑战等方面。

故事一:创新引领发展
BITECH公司自创立之初,便以技术创新为核心竞争力。公司研发团队不断推出具有颠覆性的电子产品,如高效能电池、智能传感器等,这些产品在市场上取得了巨大成功。公司通过持续创新,不仅提升了自身品牌影响力,还为整个电子行业的发展做出了重要贡献。

故事二:市场扩张战略
随着产品线的不断丰富和技术的日益成熟,BITECH公司开始实施市场扩张战略。公司积极拓展国内外市场,通过参加国际展会、建立海外销售网络等方式,将产品推向全球。同时,公司还针对不同市场需求,定制个性化产品解决方案,赢得了众多客户的青睐。

故事三:技术突破助力成长
在电子行业竞争激烈的背景下,BITECH公司不断寻求技术突破。公司投入大量研发资源,成功攻克了一系列关键技术难题,如5G通信、人工智能等。这些技术突破不仅提升了公司产品的竞争力,还为公司带来了新的增长点。

故事四:合作伙伴关系共赢
BITECH公司注重与产业链上下游企业的合作,建立了广泛的合作伙伴关系。通过与供应商、客户以及同行业企业的紧密合作,公司实现了资源共享、优势互补,共同推动电子行业的发展。

故事五:应对行业挑战
在电子行业发展过程中,BITECH公司也面临着诸多挑战,如市场竞争加剧、技术更新换代迅速等。然而,公司始终保持敏锐的市场洞察力,及时调整战略方向,通过加强内部管理、提升产品质量、优化服务体系等方式,成功应对了这些挑战,实现了稳健发展。

请注意,以上仅为故事框架,具体内容需要根据实际情况进行填充。如需获取关于BITECH公司或其他电子行业公司的真实发展故事,建议您查阅相关新闻报道、行业分析或公司年报等资料。

Datatronic公司的发展小趣事

Datatronic公司深知人才是企业发展的核心。因此,公司一直注重人才的培养和引进。公司建立了完善的人才培训体系,为员工提供广阔的发展空间和机会。同时,公司还积极引进国内外优秀人才,为公司的技术创新和市场拓展提供了有力支持。这些举措使得Datatronic公司在人才方面形成了竞争优势。

BOOKHAM公司的发展小趣事

面对国内市场的饱和,BOOKHAM公司决定实施国际化战略,拓展海外市场。公司先后在多个国家和地区设立了分支机构,积极参加国际电子展会和交流活动,与国际同行建立起了广泛的合作关系。通过不断的努力,BOOKHAM公司的产品逐渐打入国际市场,公司的知名度和影响力也得到了显著提升。

Eby Electro Inc公司的发展小趣事

Eby Electro Inc非常重视企业文化的建设。公司倡导“创新、协作、务实、高效”的价值观,鼓励员工积极创新、勇于担当。公司还建立了完善的培训机制,为员工提供各种学习和发展的机会。在这种企业文化的熏陶下,员工们积极向上、团结协作,共同推动公司的发展。同时,公司也注重员工的生活福利和职业发展,为员工创造了一个良好的工作环境和发展空间。

安国国际(ALCOR)公司的发展小趣事

近年来,安国国际将发展重心放在U盘控制IC的开发上。随着USB技术的不断升级和SSD市场的蓬勃发展,安国积极抢占USB 3.0、USB 3.1及SSD控制IC的市场先机。公司的U盘控制IC不仅支持新一代3D NAND技术,还具备高性能、低功耗等优点,深受市场欢迎。通过持续的技术创新和市场拓展,安国在U盘控制IC领域取得了显著成绩。

华大北斗(Allystar)公司的发展小趣事

近年来,安国国际将发展重心放在U盘控制IC的开发上。随着USB技术的不断升级和SSD市场的蓬勃发展,安国积极抢占USB 3.0、USB 3.1及SSD控制IC的市场先机。公司的U盘控制IC不仅支持新一代3D NAND技术,还具备高性能、低功耗等优点,深受市场欢迎。通过持续的技术创新和市场拓展,安国在U盘控制IC领域取得了显著成绩。

问答坊 | AI 解惑

HDL实现视频编解码

现在想的到一个关于视频编解码的HDL/SYSTEMC 的程序代码,不知那位愿帮忙一下?…

查看全部问答>

困惑,得不到数据包协议类型

Packet = PacketArray;         NdisQueryPacket(Packet,NULL,&BufLength,&pBuffer,&PacketSize);         if(!BufLength)              ...…

查看全部问答>

求教关于三角按键的编程方法?

问题描述如下:     假如有四个IO口,P0.0~P0.3,三角按键的意思就是P0.0与P0.1接一个按键,P0.0与P0.2按一个,P0.0与P0.3按一个,P0.1与P0.2接一个,P0.1与P0.3接一个,P0.2与P0.3接一个,共六个按键。      求C的 ...…

查看全部问答>

如何将游戏模拟器移植到ARM的平台?(重金酬谢)

我现在开发的过程中遇到了这样的问题,如何将任天堂(NES)游戏模拟器,移植到我们的平台上。     我们用的是ARM9 的CPU,和LINUX操作系统,或者THREADX上也可以~~ 如果谁会的话,将重金酬谢!! (只要能将任意一款任天堂的游戏,在 ...…

查看全部问答>

D类音频功率放大器IC的环路设计

D类音频功率放大器具有效率高、功耗低的优点,采用D类音频功率放大器的设备能够提高电池的寿命,它特别适合应用于无线和手持通信设备,主要应用在PDA、移动电话和类似的手持移动通信工具的设计和产品中。而大功率输出的音频设备具有很大 ...…

查看全部问答>

【MSP430共享】基于MSP430的便携式医疗监护系统的设计

关于建立医疗监护系统的设计 对于想对提高医疗水平的可以看看…

查看全部问答>

华为FPGA设计流程指南

华为FPGA设计流程指南…

查看全部问答>

TI8月份研讨会

TI8月份将举行一次有关ARM的研讨会,亲!你们有兴趣吗??…

查看全部问答>

如何编写python应用程序

阅读了官方提供的how to write python applications,简单总结一下。首先说明这个教程是不用配合usrp设备就可以进行的,但是一些基本的硬件(例如声卡等)还是必须的。1、流图做为Gnuradio里中的核心,多次被提到。文章中主要涉及的流图有:简单流 ...…

查看全部问答>

晒WEBENCH设计的过程+LED电源设计(100灯)

做一个LED电源的示例 设计要求:10X10灯板电源驱动 点击WEBENCH设计工具LED标签,进入LED电源设计界面,针对设计的要求在下半部分选取灯珠,如果设计上半部的参数进行一些选取,可缩小挑选的范围。 这里选择了GREE里XP系列里的一枚,在灯板排 ...…

查看全部问答>