历史上的今天
返回首页

历史上的今天

今天是:2025年01月18日(星期六)

正在发生

2020年01月18日 | ARM启动代码的分析

2020-01-18 来源:eefocus

估计以后会忘记,所以记下来。


一上电,硬件自动把NandFlash中的前4K数据拷贝进片内的SRAM。开始执行指令

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

@ File:head.S

@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行

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

.equ        MEM_CTL_BASE,       0x48000000    @定义存储控制器的起始地址

.equ        SDRAM_BASE,         0x30000000       @定时SDRAM的起始地址


.text

.global _start

_start:

    bl  disable_watch_dog               @ 关闭WATCHDOG,否则CPU会不断重启,这是在SRAM中执行的。

    bl  memsetup                        @ 设置存储控制器,相对跳转指令,与程序处于片内或者片外无关,在SRAM中执行。

    bl  copy_steppingstone_to_sdram     @ 复制代码到SDRAM中,相对跳转指令,在SRAM中执行。

    ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行,绝对跳转指令,会跳转到SDRAM中,在SRAM中执行。


在编译链接的时候,会在某个内存中保存(0x30000000+偏移地址)这个值,而偏移地址就是on_sdram的偏移地址。反汇编ldr pc,【pc,#144】, 当前pc+144就找到了这个内存,并把内存里面的值赋给pc,使pc指向了SDRAM。而0x3000000在Makefile中指定的。                                     

on_sdram:

    ldr sp, =0x34000000                 @ 设置堆栈。在SDRAM中执行的第一条指令

    bl  main                                      @跳转到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

推荐阅读

史海拾趣

遨格芯微(AGM)公司的发展小趣事

作为电子行业的领先企业之一,AGM始终坚持以创新为核心竞争力。公司不断投入研发资源,加强与国际先进企业的合作与交流,积极引进和吸收新技术、新工艺和新材料。同时,AGM还注重人才培养和团队建设,打造了一支高素质、专业化的研发团队。这些努力为AGM在未来的发展中保持领先地位提供了有力保障,也为公司实现可持续发展奠定了坚实基础。

以上五个故事从不同角度展示了遨格芯微(AGM)公司在电子行业中的发展历程和取得的成就。通过不断的技术创新和市场拓展,AGM逐渐在可编程逻辑技术领域崭露头角,成为电子行业的佼佼者。未来,随着科技的不断进步和市场需求的不断变化,AGM将继续保持创新精神和敏锐的市场洞察力,为电子行业的发展贡献更多力量。

台湾固锝(GD)公司的发展小趣事
避免输入功率过大导致放大器过热。
博通集成(BEKEN)公司的发展小趣事

为了加快市场拓展和技术创新步伐,博通集成积极寻求与产业链上下游企业的战略合作。公司与多家知名企业建立了紧密的合作关系,共同推动无线通讯技术的发展和应用。通过战略合作,博通集成不仅获得了更多的市场资源和技术支持,还实现了与合作伙伴的共赢发展。

Fascomp公司的发展小趣事

为了进一步提升技术实力和市场竞争力,Fascomp积极寻求与国际知名企业的技术合作。通过与多家跨国公司的联合研发项目,Fascomp成功吸收和借鉴了国际先进的技术和管理经验。此外,公司还积极拓展海外市场,产品远销欧美、亚洲等多个国家和地区,进一步提升了公司的国际化水平。

ELMOS公司的发展小趣事

ELMOS作为一家欧洲公司,在世界各地都设有研发和销售办事处。这种全球化的布局使得ELMOS能够更好地了解不同市场的需求,为客户提供更加贴近市场的产品和服务。同时,通过与全球各地的客户和合作伙伴的紧密合作,ELMOS不断拓展其国际市场份额,进一步提升了公司的国际影响力。

Dfx公司的发展小趣事

随着汽车电子化程度的不断提高,某汽车制造商面临着如何在极端环境下保证汽车电子产品稳定性的挑战。通过DFX的设计理念,该公司对汽车电子产品的设计进行了全面优化,包括选用耐高温、抗腐蚀的材料、优化电路布局和散热设计等。这些改进措施显著提高了汽车电子产品的可靠性和耐久性,确保了汽车在恶劣环境下的正常运行。

问答坊 | AI 解惑

【转】VCC、VDD和VSS三种标号的区别

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 在电子电路中,常可以看到VCC、VDD和VSS三种不同的符号,它们有什么区别呢? 一、解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压; VDD:D=device 表示器件的意思, 即器件内部的工作电压 ...…

查看全部问答>

控制面板里的设置保存不了????

我的WINCE在控制面板里修改了电源,声音,背光等设置后,硬重起动,但是控制面板里的设置又变回从前了,谁知道怎么回事呀?要怎么才可以保存呀!…

查看全部问答>

Linux 2.6.14.1 DM9000A 网卡移植问题

首先向四川地震遇难同胞表示深切的哀悼!!! 我用的开发板是博创UP-NETARM2410 S3C2410,网卡是DM9000AEP. 开发板提供的是vivi,2.4内核,我先在开发板原有vivi的基础上移植了Linux 2.6.14,然后参考2.4提供的网卡驱动,基本上没作什么修改, ...…

查看全部问答>

高手请进:关于PDA开发的一个问题

有哪些高手做过PDA开发?想实现一个按键式的PDA,设想用ARM7,请问用哪种类型的操作系统最方便?…

查看全部问答>

请问:74HC08的静态工作电流,灌电流,输出电流

看到对74HC08的介绍, 说:    静态工作电流为2uA,灌电流为1mA,输出电流为25mA 请教: 以上电流参数分别是哪些管脚的电流, 灌电流和输出电流的是指最大值吗?…

查看全部问答>

cd4069实用电路图

哪位仁兄有CD4069(六反相器)的电路应用图啊,急用!…

查看全部问答>

求购闲置launchpad(已解决)

[ 本帖最后由 huang91 于 2011-12-1 13:36 编辑 ]…

查看全部问答>

无线充电器能够普及么?请大家判断一下

无线充电器目前是否能够满足使用者的要求? 这是怎样的一个趋势? 敬请高手指教,谢谢!:carnation:…

查看全部问答>

Hercules菜鸟步步SCI2通讯

一.环境说明:HALCoGen 03.05.02Code Composer Studio 5.3.0参考资料C:\\ti\\Hercules\\HALCoGen\\v03.05.02\\examples\\TMS570LS31x\\example_sci_uart_9600.c二.HALCoGen步步生成试验初始化代码1.新建工程目录:CCS,HALCoGen,my_app2.在HALCoGen中 ...…

查看全部问答>

画PCB板求助

在画一块规定尺寸的PCB板的大小,第一步选择KEEP-OUT层; 第二步选择PIACE LING画出自己的形状,第三部用快捷键E-S-Y,D-S-D后,画出了如上图的形状,Keep-out层都是灰色的,正常都是粉色的;请高手指教。 …

查看全部问答>