历史上的今天
返回首页

历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2021年09月24日 | JZ2440存储管理器代码实现(使用SDRAM)

2021-09-24 来源:eefocus

这里写图片描述

启动文件初始化代码:

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

@ File:head.S

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

@ 代码流程:

@1> 关看门狗

@2> 设置存储控制寄存器(配置)

@3> 复制代码到SDRAM中

@4> 设置堆栈

@5> 跳转到main执行

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


.equ        MEM_CTL_BASE,       0x48000000          @.equ 命令用于把常量值设置为可以在文本段中使用的符号

.equ        SDRAM_BASE,         0x30000000          @类似于C语言中#define

                                                    @0x48000000-BWSCON,0x30000000-BANK6


.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              @ 若没有复制完,继续

    @b:backward 向后跳转  f:forward 向前跳转  

    mov pc,     lr      @ 返回


memsetup:

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


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

    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                          @ 若没有写成,继续

    @b:backward 向后跳转  f:forward 向前跳转  

    mov pc,     lr                  @ 返回


.align 4                                @以4字节对齐

mem_cfg_val:        

    @ 存储控制器13个寄存器的设置值

    .long   0x22011110      @ BWSCON   0x48000000

    .long   0x00000700      @ BANKCON0 0x48000004

    .long   0x00000700      @ BANKCON1 0x48000008

    .long   0x00000700      @ BANKCON2 0x4800000C

    .long   0x00000700      @ BANKCON3 0x48000010

    .long   0x00000700      @ BANKCON4 0x48000014

    .long   0x00000700      @ BANKCON5 0x48000018

    .long   0x00018005      @ BANKCON6 0x4800001C

    .long   0x00018005      @ BANKCON7 0x48000020

    .long   0x008C07A3      @ REFRESH  0x48000024

    .long   0x000000B1      @ BANKSIZE 0x48000028

    .long   0x00000030      @ MRSRB6   0x4800002C

    .long   0x00000030      @ MRSRB7   0x48000030


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

    #-g:加入调试信息 -c只编译不连接

    arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf

    #-Ttext 0x0000000:指定代码段起始地址为0x30000000

    arm-linux-objcopy -O binary -S sdram_elf sdram.bin

    # binary:二进制的 -S:不从源文件复制重定位信息和符号信息到目标文件中去

    arm-linux-objdump -D -m arm  sdram_elf > sdram.dis

    # -D:反汇编所有段 -m arm:指定反汇编文件使用arm架构

clean:

    rm -f   sdram.dis sdram.bin sdram_elf *.o


查看反汇编文件:

这里写图片描述
这里写图片描述
这里写图片描述

bl disable_watch_dog @连接地址0x30000000

bl memsetup @连接地址0x30000004

bl copy_steppingstone_to_sdram @连接地址0x30000008

ldr pc, =on_sdram @连接地址0x3000000c

ldr sp, =0x34000000 @连接地址0x30000010


我们在Makefile中指定了连接地址为0x30000000(0x30000000是sdram中的初始地址),而当我们在跳转到sdram之前,还有几行代码是在steppingstone运行的?为什么可以运行而不出错了?


解释:虽然19~21行连接地址都在SDRAM中,但是由于它们都是位置无关的相对跳转指令,所以可以在Steppingstone里执行。详解点我!


led.s


#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;

}

推荐阅读

史海拾趣

Alps Alpine Co Ltd公司的发展小趣事

Alps Alpine Co., Ltd.是一家总部位于日本的跨国电子制造公司,专注于设计和制造汽车电子、消费电子和工业电子产品。以下是关于Alps Alpine公司发展的五个相关故事:

  1. 公司合并:Alps Electric Co., Ltd.和Alpine Electronics, Inc.于2019年进行了合并,正式成立了Alps Alpine Co., Ltd. 这一合并为两家公司带来了更强大的整合资源和技术实力,使得Alps Alpine能够在全球范围内提供更多样化的电子解决方案。

  2. 汽车电子领域的发展:Alps Alpine在汽车电子领域拥有丰富的经验和技术积累。公司致力于开发汽车内部电子系统,包括车载娱乐系统、导航系统、车载通信系统、驾驶辅助系统等。随着汽车智能化和互联网化的发展,Alps Alpine不断推出创新产品,满足汽车制造商和消费者对智能驾驶体验的需求。

  3. 消费电子产品的多样化:除了汽车电子,Alps Alpine还在消费电子领域拥有广泛的产品线。公司的产品涵盖了手机、平板电脑、摄像机、音响设备等多个终端设备,并不断推出新品,以满足消费者对功能性和设计性的需求。

  4. 工业电子市场的拓展:Alps Alpine在工业电子领域也取得了长足的发展。公司的产品被广泛应用于工业自动化、机器人技术、医疗设备、能源管理等领域,为各行各业提供高性能、可靠的电子解决方案。

  5. 技术创新与研发投入:作为一家技术驱动的企业,Alps Alpine不断加大对研发的投入,致力于技术创新和产品优化。公司拥有强大的研发团队和先进的研发设施,在各个领域持续推动技术进步,提升产品竞争力。

以上是关于Alps Alpine Co., Ltd.发展的五个相关故事,这些故事展示了公司在合并整合、汽车电子、消费电子、工业电子和技术创新方面的发展历程,以及其在电子行业中的重要地位和影响力。

昆泰芯微电子(CONNTEK)公司的发展小趣事

为了加快产品国产化进程,昆泰芯微电子与世强先进(深圳)科技股份有限公司签订了授权代理合作协议。通过这一战略合作,昆泰芯微电子成功将旗下高端传感器产品触达至终端市场,实现了市场的快速扩张。同时,这一合作也进一步提升了昆泰芯微电子在行业中的知名度和影响力。

博众电气(BOZHONG ELECTRIC)公司的发展小趣事

随着企业实力的不断增强和产品质量的不断提升,博众电气开始积极寻求市场扩张的机会。公司凭借优质的产品和服务,成功开拓了多个国内外市场,并与众多知名企业建立了长期稳定的合作关系。

同时,博众电气还注重品牌建设和推广。公司积极参与各类行业展会和论坛,展示公司的最新产品和技术成果;还通过广告宣传、社交媒体等多种渠道提升品牌知名度和影响力。这些举措使得博众电气的品牌形象和市场地位得到了进一步提升。

以上只是博众电气在电子行业发展的几个可能的关键阶段和事实的概括性描述。实际上,博众电气的发展历程可能远比这复杂和丰富。作为一家在电子行业中崭露头角的企业,博众电气未来的发展值得期待。

Forge Europa Ltd公司的发展小趣事

在快速发展的过程中,Forge Europa Ltd公司始终注重品牌与文化的塑造。公司秉承“创新、品质、服务”的企业精神,致力于为客户提供优质的产品和服务。同时,公司还注重员工的培养和发展,建立了完善的培训体系和激励机制,激发了员工的创造力和工作热情。通过这些努力,Forge Europa不仅塑造了一个具有行业影响力的品牌形象,还形成了独特的企业文化,为企业的长远发展奠定了坚实的基础。

Datalinear公司的发展小趣事

作为一家有远见的企业,Datalinear公司始终关注社会责任和可持续发展。公司积极参与环保活动,推行绿色生产理念,努力降低生产过程中的能耗和排放。同时,公司还关注员工的福利和发展,为员工提供良好的工作环境和培训机会。此外,Datalinear公司还积极参与社会公益事业,为社会做出了积极贡献。

Comax Industrial Co Ltd公司的发展小趣事

在电子产品市场竞争日益激烈的背景下,Comax Industrial Co Ltd公司始终坚持品质至上的原则。公司建立了严格的质量管理体系,从原材料的采购到生产制造的每一个环节都进行严格把控。通过持续改进和优化生产流程,公司不断提升产品的品质与性能。这种对品质的执着追求,使得Comax的产品在市场上赢得了广泛的认可与信赖。

问答坊 | AI 解惑

单片机的几个游戏,大家玩玩~

主要就是俄罗斯方块和推箱子…

查看全部问答>

有关电容的资料,请大家帮忙修改

有关电容的资料,请大家帮忙修改…

查看全部问答>

基于51单片机的车用数字仪表设计与实现

基于51单片机的车用数字仪表设计与实现…

查看全部问答>

三极管

某三极管工作在放大区,如果当IB从11μA增大到21μA时,IC从2mA变为3mA,那么它的β约为    C      。 83                 B. 91     ...…

查看全部问答>

请问STM8S103F3中IIC引脚作输出时是不是没有拉电流输出的?

                                 请问STM8S103F3中IIC引脚作输出时是不是没有拉电流输出的?只有灌电流对吗?谢谢!…

查看全部问答>

解决隔离式开关的传导性共模辐射问题

在本篇电源设计小贴士中,我们将继续讨论共模电流问题。如前所述我们可以使用一个机架电容将共模电流返回至电源,该电容还可以降低噪声的源阻抗。然而就我们可以使用的电容大小而言是有一个安全极限的,其决定了共模滤波器的剩余量。共模电流是由 Q ...…

查看全部问答>

TI的高速放大器

http://www.ti.com/lit/ml/slyb199/slyb199.pdf…

查看全部问答>

R4 launchpad新货New Hercules ARM Cortex-R4 Launchpads

链接:http://www.ti.com/ww/en/launchpad/hercules.html 有两种MCU,分别是TMS570LS04 和RM42 对比: …

查看全部问答>

功率因数校正(PFC)功能的实现

本帖最后由 paulhyde 于 2014-9-15 03:03 编辑 我们老师分析的今年题目,估计会用到这方面的内容,和大家分享分享……    …

查看全部问答>

乱玩BeagleBone4-安装ubuntu镜像到内部eMMC

本帖最后由 shower.xu 于 2014-5-14 12:25 编辑 工欲善其事必先利其器,开工之前先把系统搞好,个人比较喜欢ubuntu的系统,BBB上已经更新到13.10了,当然紧跟形势,let\'s do it.之前集中安装发发都试过,觉得这个安装方便时间短,而且插入带系统 ...…

查看全部问答>