历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | ARM9的存储控制器

2018-04-15 来源:eefocus

实验的目的:
把程序本身从Steppingstone复制到SDRAM处,然后跳转到SDRAM中执行

实验的源程序:
@*************************************************************************
@ 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:                                        @这是数值1,专业术语叫局部标号,主要用于bne 1b这条语句
    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      @其实BWSCON这个寄存器的设置,主要是综合了存储控制器的其余BANK和外围器件的连接
    .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



/**************************************************************************
led.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



实验的问题总结:
I.在这期间,存储控制器起了一个什么作用?
在S3C2440/S3C2410中,对外引出的27根地址线ADDR0-ADDR26的访问范围只有128M,
CPU对外还引出了8根片选信号nGCS0-nGCS7,对应于BANK0-BANK7,当某一个片选信号拉低时,
对应的存储控制器的BANK就被选中,而每个BANK都是和外部设备相连的,当CPU发出某一地址信号时,
它会通过读取存储控制器的中的寄存器的配置信息,从而就知道了如何去访问外部的设备。我想这
大概就是存储控制器的作用。

II.存储控制器的BANK和SDRAM的Bank有什么区别?
存储控制器的BANK
在TQ2440中,存储控制器的BANK有8个,可以分别接8个不同的器件,通过片选信号使各个器件可以独立开来访问;
SDRAM的Bank
SDRAM的内部是一个存储阵列。阵列就如同那么表格一样,将数据“填”进去,你可以把它想象成一张表格。
和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),
我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。
对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?
它就是逻辑 Bank(Logical Bank,下文简称L-Bank),所以说,准备的说SDRAM的Bank叫L-Bank

III.怎么确定SDRAM是接存储控制器的哪个BANK?还有就是每个BANK的对应的地址又是如何确定的?
关于SDRAM是接在存储控制器的哪个BANK上的,可以通过开发板的原理图的片选信号得知,因为片选信号和BANK是一一对应的;
当我们知道了SDRAM的是接在哪个BANK之后,接下来,我们如何知道这个SDRAM的地址呢?这主要是在S3C2440中的用户手册中
有介绍,对于每一个存储控制器的BANK,其地址都已经规定好了。

IV.既然在Makefile中,指定的链接地址是:0x3000 0000 ,那按理说这些代码段刚开始都是在SDRAM中执行的啊,而刚开始SDRAM
又没有初始化,这不矛盾么?
主要的原因是,在代码段中,bl  disable_watch_dog ,bl  memsetup ,bl  copy_steppingstone_to_sdram,因为都是相对跳转,所以说这些都是位置无关的几条指令,也就是说,这些代码即使不在链接时所指定的运行时地址空间,也可以正确执行,它是一段加载到任意地址空间都能正常执行的特殊代码。当程序运行到 ldr pc, =on_sdram 条指令的时候,由于是取on_sdram的绝对地址,而其地址标号是在SDRAM中的,所以说,执行完这条语句之后,程序就在SDRAM中运行了。关于这一点,可以百度一下位置无关代码的知识。


注:可参考的书籍《嵌入式Linux应用开发完全手册》


推荐阅读

史海拾趣

启珑(CHIPLON)公司的发展小趣事

一次性生成5个关于启珑(CHIPLON)公司在电子行业发展起来的相关故事可能内容过多,我可以先为您提供1个相关故事作为示例,如您满意,我可以继续提供。

启珑微电子推出创新DSP系列

近年来,随着数字技术的飞速发展,电子行业对高性能处理器的需求日益增长。在这一背景下,启珑微电子(CHIPLON)凭借其深厚的技术积累和敏锐的市场洞察力,成功推出了全新的CLM320F28335系列DSP(数字信号处理器)。

这款产品一经发布,就引起了行业内的广泛关注。CLM320F28335系列DSP以其高效的32位RISC-V CPU内核、高精度、低成本、低功耗、高性能以及外设集成度高等特点,迅速在市场中占据了一席之地。与传统的定点DSP相比,这款产品的优势显而易见,尤其是在数据处理和A/D转换方面表现更为出色。

值得一提的是,CLM320F28335系列DSP拥有150MHz的高速处理能力,并配备了32位浮点处理单元,这使其在处理复杂算法和大量数据时能够游刃有余。同时,它还具备6个DMA通道,支持ADC、McBSP和EMIF,以及多达18路的PWM输出,其中有6路为高精度PWM输出(HRPWM),这些特性使其在工业自动化、电机控制等领域具有广泛应用前景。

该产品设计的另一个亮点是,它能够直接PIN对PIN替代国际同类产品,这意味着用户在使用启珑的DSP时,无需更改原有的电路板设计或系统软件,即可实现完全的替代兼容,这一设计无疑大大降低了用户的替换成本和使用难度。

随着CLM320F28335系列DSP的成功推出,启珑微电子在电子行业的地位得到了进一步提升。这一产品的成功,不仅展示了启珑微电子强大的研发实力,也为其在激烈的市场竞争中赢得了更多的市场份额。

若您想要探索更多内容,随时可以继续输入。

艾吉芯(Agertech)公司的发展小趣事

在追求经济效益的同时,艾吉芯公司也积极履行社会责任。公司注重环境保护和可持续发展,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,艾吉芯还积极参与社会公益事业,为社会的和谐发展贡献自己的力量。

这些故事虽然基于推测和构建,但尽可能地反映了电子行业中企业发展的普遍规律和趋势。艾吉芯公司作为电子行业的一员,其发展历程也必然离不开这些方面的努力和探索。当然,具体的发展故事还需要根据艾吉芯公司的实际情况进行深入了解和研究。

德索五金(dosinconn)公司的发展小趣事

发展历程:2007年,公司率先在业内引入了ERP系统,实现了企业高效智能的生产管理、财务管理、物流管理和决策管理。这一创新举措极大地提升了客户订单的响应速度,使德索五金电子步入了数字化信息时代。

成果与影响:ERP系统的引入使德索五金电子的管理水平迈上了新的台阶,为企业的快速发展提供了有力支持。

CONTTEK Group GmbH公司的发展小趣事

CONTTEK Group GmbH公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本、创新驱动”的企业文化,鼓励员工积极参与创新活动,发挥个人潜能。同时,公司还注重团队建设,通过定期的培训和团建活动活动,增强员工的凝聚力和向心力。这种积极向上的企业文化和团结协作的团队精神,为公司的持续发展提供了强大的动力。

这五个故事展示了CONTTEK Group GmbH公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到技术创新、市场拓展、品质管理和企业文化建设的不断推进,CONTTEK Group GmbH公司始终保持着积极进取的精神和不断创新的态度,在电子连接器领域取得了显著的成绩。

Honeywell公司的发展小趣事

背景:近年来,随着全球对可持续发展和数字化转型的重视,霍尼韦尔积极调整战略方向。

发展:公司加大了在可持续技术和数字化转型领域的投入,推出了一系列创新的产品和解决方案。例如,在能源转型领域,霍尼韦尔与多家中国合作伙伴共同推动可持续航空燃料生产基地的建设;在智慧建筑领域,与腾讯云合作打造联合解决方案等。

关键事件:这些举措不仅体现了霍尼韦尔对可持续发展的承诺和责任担当,也展示了公司在数字化转型方面的前瞻性和创新能力。同时,这些合作也进一步巩固了霍尼韦尔在全球电子行业的领先地位。

Anritsu公司的发展小趣事

背景:进入20世纪后,霍尼韦尔在恒温器领域的技术不断成熟,同时,另一家名为霍尼韦尔供暖专业公司的企业也在加热器领域取得了显著成就。

发展:1927年,明尼阿波利斯热调节器公司与霍尼韦尔供暖专业公司合并,创立了明尼阿波利斯-霍尼韦尔调节器公司。这次合并不仅增强了公司的技术实力,还拓展了业务范围,使公司成为当时最大的高品质珠宝钟表生产商(尽管这与电子行业的直接关联较小,但反映了公司扩张的雄心)。

关键事件:合并后,公司继续深耕工业自动化领域,并收购了布朗仪器公司,进一步巩固了在全球工业控制器和指示器市场的领导地位。

问答坊 | AI 解惑

红色飓风II代 1C12开发学习板

红色飓风II代 1C12开发学习板 【产品特色】 1、支持完整的NIOSII开发,支持NiosII/e,NiosII/s和NiosII/f三个系列的NIOSII CPU。 2、支持uCLinux,提供ucLinux运行所需的软硬件; 3、提供USB2.0 数据接口,480Mbps传输速度,可以作为算法验证和 ...…

查看全部问答>

Transducer Circuit - Two Wire Current Transmitter-- 电路

Transducer Circuit - Two Wire Current Transmitter 电路!…

查看全部问答>

MCF52233_PWM

  呵呵,我们的Freescale。终于有Freescale的版块了,现在把以前写的一些东西转过来,希望能有更多人的关注Freescale。MCF52233_PWM—Pulse-Width Modulation Module   Coldfire的PWM模块做的真傻瓜化,用起来那是相当的方便,简单设几个寄存器 ...…

查看全部问答>

LM22670/1/2/3/4/5/6/7/8/9, LM22680元器件资料分享

器件名称 点击下载 简单说明 LM22670 3A, Features Adjustable Switching Frequency Or Frequency Sync Up To 1MHz And Precision Enable LM22671 0.5A Version LM226721A Version LM226733A, Features Adjustable Soft-Start And Adjustable C ...…

查看全部问答>

新手请教

请问各位大侠,如何学习单片机? 谢谢。。。。。…

查看全部问答>

???

什么是嵌入??…

查看全部问答>

期待高手指点,SD读写驱动

   通过SPI接口发送一个字节         INT8U temp;         SPI_SPDR = byte;                            ...…

查看全部问答>

什么是差动保护 ?

电流差动保护是继电保护中的一种保护,forclear 说的差动保护和逆相序都是对的。正相序是A超前B,B超前C各是120度。反相序(即是逆相序)是 A 超前C,C超前B各是120度。有功方向变反只是电压和电流的之间的角加上180度,就是反相功率,而不是逆相序。 ...…

查看全部问答>

寻找元件

MC14051  模拟软件里没有,可以用什么来替代…

查看全部问答>

不知版主参与此活动否???

http://t.sina.com.cn/freescale 下载 (40.54 KB) 2010-8-1 20:14 …

查看全部问答>