ARM--存储管理器

发布者:天涯拾遗最新更新时间:2023-06-20 来源: elecfans关键字:ARM  存储管理器  省电模式 手机看文章 扫描二维码
随时随地手机看文章

初入领悟:

1、 bank、L-bank的概念

2、 s3c2440内部管理SDRAM寄存器配置

 

Frist part:原理分析

S3c2440为32位微处理器,其可访问空间为4G;但其中提供1G外设访问空间,这1G空间有8个bank组成;及平均每个bank有128M的访问空间;其中8bank的特性为:

1、 bank0~bank5支持外接SRAM、ROM等,bank6、bank7支持外接SRAM、ROM与SDRAM等;

2、 bank0~bank6的起始地址是固定

3、 bank7的起始地址可编程设定

4、 bank6、bank7大小可编程确定

5、 每个bank访问周期均可编程设定

6、 外接SDRAM是支持自刷新与省电模式

 

S3c2440向外引出27根地址线,可实现128M的寻找空间;那他怎么实现1G的空间范围访问呢?这就涉及到了nGCSx片选信号,由控制这几根信号线实现bank的切换,如下图所示:

左边为nor flash下;右边为nand flash;

说到此又想起一概念,就是有关于nor flash与nand flash启动方式;

一、norflash启动

简而言之,既是nor flash启动模式下cpu启动会执行地址0x00000000的指令此指令在使能了nor flash下是就是nor flash的首地址;其中原因为nor flash支持一种名为XIP的执行机制;

二、nandflash启动

nand flash下不支持XIP因此在执行nandflash的程序是,系统将会把nandflash的头4K(最大)启动代码拷贝至系统SRAM中既s3c2440中的steppingstone;

 

我使用的是GT2440开发板从原理图中可知:

Bank6外接2片H57V2562GTR芯片;

在使用SDRAM时要设置到如下13个寄存器的操作:

各个寄存器值的设置参考开发板每一个bank所接的外设进行设置;

此设置参考示例程序:

    .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

(.long 汇编中词法,既long数据型)

 

Second part:程序编写

现在开始编写代码,如我上诉一样启动时CPU将会报前4K程序拷贝至steppingstone中运行;现在编写的代码任务为将steppingstone中的代码拷贝回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即可

    movr1,     #0x53000000

    movr2,     #0x0

    strr2,     [r1]

    movpc,     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的未地址?

    bne1b              @ 若没有复制完,继续

    movpc,     lr      @ 返回

 

memsetup:

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

 

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

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

    addr3,     r1, #52             @ 13*4 = 54

1: 

    ldrr4,     [r2], #4            @ 读取设置值,并让r2加4

    strr4,     [r1], #4            @ 将此值写入寄存器,并让r1加4

    cmpr1,     r3                  @ 判断是否设置完所有13个寄存器

    bne1b                          @ 若没有写成,继续

    movpc,     lr                  @ 返回

 

 

.align 4                            @ARM地址指针对齐伪指令

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

 

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;  

 

#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 -oleds.o leds.c

    arm-linux-ld -Ttext0x30000000 head.o leds.o -o sdram_elf

    arm-linux-objcopy -Obinary -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

原理概念纯属个人见解,可能存在一定的不严谨性。


关键字:ARM  存储管理器  省电模式 引用地址:ARM--存储管理器

上一篇:S3C2440触摸屏驱动实例开发讲解
下一篇:FCLK PCLK HCLK

推荐阅读最新更新时间:2024-11-08 11:56

基于 ARM 和 Linux 通用工控平台设计与实现
随着工控技术的进步和市场竞争的加剧,开发人员通常需要在尽可能短的时间内设计出满足用户要求的测控系统。本文针对嵌入式系统的特点,以高性价比的32位ARM嵌入式处理器AT91RM9200为硬件核心,搭建了通用工控硬件平台,在此平台上移植嵌入式Linux操作系统和图形界面开发环境MiniGUI。以此通用工控平台为基础,可以方便地构建工程应用所需的绝大部分自动测控系统。其应用无论是在性能还是在成本方面都极具竞争力,这预示着本平台具有较好的应用前景。 本工控平台在硬件上,选择ATMEL公司的AT91RM9200微处理器,并对其最小系统及外围部件进行设计,以适应当前工控现场更加丰富的技术要求,并结合工业测控Modbus协议,扩展多种通信接口
[工业控制]
基于 <font color='red'>ARM</font> 和 Linux 通用工控平台设计与实现
基于ARM处理器的TSC2046触摸屏控制器的应用
摘要:触摸屏技术经过十几年的发展已经成为一种方便、经济的人机界面输入手段。 TSC2046 是四线电阻式触摸屏控制器,其核心是一个具有采样和保持功能的12位逐次逼近式A/D转换器。以飞利浦公司的ARM芯片为基础,通过TSC2046触摸屏控制器和四线电阻式触摸屏构成硬件基础,在此基础上,开发了触摸屏面板控制程序。该触摸屏已应用于实际项目中,触摸效果良好。 关键词:TSC2046;触模屏;LPC2132芯片;控制器 0 引言 随着信息技术的不断发展,嵌入式系统正在越来越广泛地应用到消费类电子、通信设备等便携式电子类产品中。触摸屏由于其轻便、占用空间少、灵活等优点,已经逐渐取代键盘,成为嵌入式系统中最简单、方便、自然的一种人机交互
[工业控制]
基于<font color='red'>ARM</font>处理器的TSC2046触摸屏控制器的应用
ARM推出针对智能卡领域的新款处理器SC000
ARM公司(LSE:ARM;Nasdaq:ARMH)在香港举办的亚洲智能卡工业大会(Cartes-Asia)上宣布推出高度紧凑、节能型ARM® SecurCore™ SC000™处理器,该款处理器专为最高容量的智能卡和嵌入式安全应用而设计。SC000处理器是已经取得巨大成功的ARM SecurCore系列处理器的最新成员,该款处理器大大扩展了目标应用的范围,将SIM卡、政府、银行、交通、ID和条件接收等需要防篡改的接触和非接触智能卡应用纳入其中。SC000能够以具有竞争力的8/16位成本、面积和功耗提供前所未有的丰富的32位性能,是最高容量智能卡市场下一代设备的理想之选。 同已被广泛支持且取得巨大成功的SC100™和
[安防电子]
ARM微控制器LPC210X的LCD接口技术
摘要:本文分别以GPI0口直接连接、串行转换连接、CPLD分部连接三种方法阐述了无外部总线的Philips ARM微控制器LPC210X与点阵图形液晶显示器的接口设计,并给出硬件电路框图和主要程序。 关键词:ARM LPC210X LCD接口 串并转换 CPLD 引言 Philips最近推出了其第一款基于ARM内核的控制器LPC210X,但由于LPC210X外部总线不开放,无法扩展内存、驱动液晶显示器等,给它的推广带来了一定的影响。笔者最近在一工控板项目中采用了该系列芯片,项目后斯应客户要求需对几个参量进行显示并扩展键盘,不得已之下,采用了CPLD,并利用了GPIO口模拟总线和液晶时序与点阵图形液日模块HS12864-16建
[应用]
微捷码Talus平台实现世界最快的低功耗处理器核心
芯片设计解决方案供应商微捷码(Magma®)设计自动化有限公司(纳斯达克代码:LAVA)日前宣布,高速低功耗处理器提供商Intrinsity公司通过使用Talus® Vortex和Talus Power Pro以低功耗工艺实现了世界速度最快的ARM® Cortex™ A8处理器核心。微捷码的开放式架构IC实现系统不仅为Intrinsity提供了所需的定制流程支持和被认可的时序收敛能力,同时还满足了其低功耗需求。鉴于此次的成功,Intrinsity已升级使用微捷码的最新版本产品Talus 1.1。 这款处理器核心在三星(Samsung)公司的45纳米(nm)低功耗低漏电工艺技术上进行实施,主要用于标准移动片上系统(So
[手机便携]
ARM嵌入式系统的ISP设计
应用程序的固化是嵌入式产品开发和生产过程中一个重要环节。基于ARM的嵌入式系统常用的程序固化方法是,用仿真器通过JTAG口将程序烧录到Flash里,在产品的开发阶段,使用仿真器几乎是必然的;然而到了产品的生产阶段,进行应用程序烧录或升级操作的往往是生产线上的工人,他们不易掌握仿真器的使用方法,而且在生产阶段也需要把JTAG调试口封住以防软件被窥视。笔者在使用意法半导体的STR730开发产品的过程中,设计了一种通过串口进行ISP(In System Programming,在系统编程)的方案。该方案成本低,生产线使用起来也很方便,而且即使升级过程中发生掉电之类的意外也不会影响下一次升级,安全而可靠。 1 硬件连接 ISP方案
[单片机]
<font color='red'>ARM</font>嵌入式系统的ISP设计
GNU ARM汇编--(二十)总结
从这个系列第一篇开始,那是4月22号,到今天做一个总结,已经有7个多月的时间了,利用业余时间学习自己感兴趣的东西,进度比较慢,也是比较累的,但收获也是很多的. 这个系列之所以写出来,是因为自己在玩linux文件系统和驱动的时候,总是觉得自己应该回头看看bootloader到底是怎么工作的.本来只想着重新看下arm体系结构和汇编语言的,没想到一路上还学习了以前从没想过的编译链接的细节,提高了自己阅读makefile和脚本的能力,对指针有了更深的理解,对操作系统也有了更深的理解. 列一下完成这个系列所阅读或浏览过的书和资料: 《ARM System Developer's Guide》
[单片机]
基于ARM7的LED回流焊机温控系统的设计
插件UD的耗材和人工成本高,严重影响了LED高效节能灯的推广应用;而贴片封装LED元件更适合自动化焊接,焊接时在大于其100.200倍的铝基散热片上,要求较低的焊接温度,较好的散热效果,现有的自动回流焊机和焊接工艺不能满足其要求,焊接设备不配套成为u?D照明灯发展.推广的瓶颈. 本文设计了一种基于ARM7的嵌入式u C/OS-II实时操作系统的LED回流焊机温度控制系统.本产品能预设八条曲线,每一条曲线有五个段,每一段的加热时间可改动.用户可根据焊料所需的加热温度和时间来从重新设置加热曲线.本温控系统的硬件.软件设计如下. 1硬件平台设计 本系统选用Philips公司的AItM7(LPC2148)作为控制系统的核心处理器.本系统主
[电源管理]
基于<font color='red'>ARM</font>7的LED回流焊机温控系统的设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved