S3C2410的内存映射

发布者:HappyExplorer最新更新时间:2016-05-04 来源: eefocus关键字:S3C2410  内存映射 手机看文章 扫描二维码
随时随地手机看文章
这片文章主要介绍S3C2410的内存映射,主要参考2410的用户手册。

   我用的板子是基于三星的2410,三星的内存片选有8个bank,这里所谓的bank我开始也不是很清楚,在网上搜了一通也不知所云,但是当我看了 2410的用户手册后才有点明白,这里的bank就是片选,一个片选就是一个bank,在U-Boot中,配制的时候要配制SDRAM和FLASH的 bank数,那么如果你的SDRAM或者FLASH就接了一个片选的时候,就定义为1就可以了,其他的类推。
下面是2410的内存映射图,2410和其他的大部分的处理器一样,支持NorFlash和NANDFlash启动,而这两种启动方式内存所映射的地址不怎么相同,我的板子没有NANDFlash,所以就以从NorFlash启动为例子了:
==============================================<-------0xFFFF_FFFF
    NOT USED
==============================================<-------0x6000_0000
    SFR Area (各个接口的控制寄存器)
==============================================<-------0x4800_0000
==============================================<-------0x4000_0FFF
    BootSRAM         (4KBytes)
==============================================<-------0x4000_0000
    SROM/SDRAM    nGCS7    (bank7)
==============================================<-------0x3800_0000
    SROM/SDRAM    nGCS6    (bank6)
==============================================<-------0x3000_0000
    SROM   nGCS5    (bank5)
==============================================<-------0x2800_0000
    SROM   nGCS4    (bank4)
==============================================<-------0x2000_0000
    SROM   nGCS3    (bank3)
==============================================<-------0x1800_0000
    SROM   nGCS2    (bank2)
==============================================<-------0x1000_0000
    SROM   nGCS1    (bank1)
==============================================<-------0x0800_0000
    SROM   nGCS0    (bank0)
==============================================<-------0x0000_0000
    上面的每个bank最大支持128M,除了bank0,其它的每个bank都支持8/16/32位操作,bank0只支持16/32位操作,在我的板子上,Flash接bank0,一共8M,16位,SDRAM接bank6,一个32M,32位。所以启动的时候,CPU从0x0000_0000开始执行,而在这上面的NorFlash,存放的是U-Boot,用于启动Linux的。
    而我们目前所做的工作就是要把U-Boot移植成功,然后烧写到该地址,假设你的板子的供应商已经提供了少些的工具,等到我们少些成功,我们就可以通过网络来加载Linux,通过串口来调试了,至于怎么做的,我们慢慢来,以后的帖子会涉及到。。。
    在上面的存储地址布局中,SFR Area就是各个接口控制器的地址,我们可以把它定义如下,来自华恒PPCboot上面的源代码中的头文件s3c2410.h:

#define rBWSCON        (*(volatile unsigned *)0x48000000)
#define rBANKCON0        (*(volatile unsigned *)0x48000004)
#define rBANKCON1        (*(volatile unsigned *)0x48000008)
#define rBANKCON2        (*(volatile unsigned *)0x4800000C)
#define rBANKCON3        (*(volatile unsigned *)0x48000010)
#define rBANKCON4        (*(volatile unsigned *)0x48000014)
#define rBANKCON5        (*(volatile unsigned *)0x48000018)
#define rBANKCON6        (*(volatile unsigned *)0x4800001C)
#define rBANKCON7        (*(volatile unsigned *)0x48000020)
#define rREFRESH         (*(volatile unsigned *)0x48000024)
#define rBANKSIZE        (*(volatile unsigned *)0x48000028)
#define rMRSRB6        (*(volatile unsigned *)0x4800002C)
#define rMRSRB7        (*(volatile unsigned *)0x48000030)

#define rHcRevision            (*(volatile unsigned *)0x49000000)
#define rHcControl             (*(volatile unsigned *)0x49000004)
#define rHcCommonStatus        (*(volatile unsigned *)0x49000008)
#define rHcInterruptStatus     (*(volatile unsigned *)0x4900000C)
#define rHcInterruptEnable     (*(volatile unsigned *)0x49000010)
#define rHcInterruptDisable    (*(volatile unsigned *)0x49000014)
#define rHcHCCA                (*(volatile unsigned *)0x49000018)
#define rHcPeriodCuttendED   (*(volatile unsigned *)0x4900001C)
#define rHcControlHeadED       (*(volatile unsigned *)0x49000020)
#define rHcControlCurrentED    (*(volatile unsigned *)0x49000024)
#define rHcBulkHeadED          (*(volatile unsigned *)0x49000028)
#define rHcBuldCurrentED   (*(volatile unsigned *)0x4900002C)
#define rHcDoneHead            (*(volatile unsigned *)0x49000030)
#define rHcRmInterval          (*(volatile unsigned *)0x49000034)
#define rHcFmRemaining       (*(volatile unsigned *)0x49000038)
#define rHcFmNumber            (*(volatile unsigned *)0x4900003C)
#define rHcPeriodicStart   (*(volatile unsigned *)0x49000040)
#define rHcLSThreshold       (*(volatile unsigned *)0x49000044)
#define rHcRhDescriptorA    (*(volatile unsigned *)0x49000048)
#define rHcRhDescriptorB   (*(volatile unsigned *)0x4900004C)
#define rHcRhStatus          (*(volatile unsigned *)0x49000050)
#define rHcRhPortStatus1   (*(volatile unsigned *)0x49000054)
#define rHcRhPortStatus2       (*(volatile unsigned *)0x49000058)

#define rSRCPND            (*(volatile unsigned *)0x4A000000)
#define rINTMOD            (*(volatile unsigned *)0x4A000004)
#define rINTMSK            (*(volatile unsigned *)0x4A000008)
#define rPRIORITY          (*(volatile unsigned *)0x4A00000C)
#define rINTPND            (*(volatile unsigned *)0x4A000010)
#define rINTOFFSET       (*(volatile unsigned *)0x4A000014)
#define rSUBSRCPND         (*(volatile unsigned *)0x4A000018)
#define rINTSUBMSK         (*(volatile unsigned *)0x4A00001C)

#define rULCON0            (*(volatile unsigned *)0x50000000)
#define rUCON0             (*(volatile unsigned *)0x50000004)
#define rUFCON0            (*(volatile unsigned *)0x50000008)
#define rUMCON0            (*(volatile unsigned *)0x5000000C)
#define rUTRSTAT0          (*(volatile unsigned *)0x50000010)
#define rUERSTAT0          (*(volatile unsigned *)0x50000014)
#define rUFSTAT0       (*(volatile unsigned *)0x50000018)
#define rUMSTAT0       (*(volatile unsigned *)0x5000001C)
#define rUBRDIV0       (*(volatile unsigned *)0x50000028)
#define rULCON1            (*(volatile unsigned *)0x50004000)
#define rUCON1           (*(volatile unsigned *)0x50004004)
#define rUFCON1            (*(volatile unsigned *)0x50004008)
#define rUMCON1            (*(volatile unsigned *)0x5000400C)
#define rUTRSTAT1          (*(volatile unsigned *)0x50004010)
#define rUERSTAT1          (*(volatile unsigned *)0x50004014)
#define rUFSTAT1        (*(volatile unsigned *)0x50004018)
#define rUMSTAT1        (*(volatile unsigned *)0x5000401C)
#define rUBRDIV1        (*(volatile unsigned *)0x50004028)
#define rULCON2            (*(volatile unsigned *)0x50008000)
#define rUCON2           (*(volatile unsigned *)0x50008004)
#define rUFCON2            (*(volatile unsigned *)0x50008008)
#define rUTRSTAT2        (*(volatile unsigned *)0x50008010)
#define rUERSTAT2        (*(volatile unsigned *)0x50008014)
#define rUFSTAT2         (*(volatile unsigned *)0x50008018)
#define rUBRDIV2         (*(volatile unsigned *)0x50008028)
#ifdef __BIG_ENDIAN
#define rUTXH0            (*(volatile unsigned char *)0x50000023)
#define rURXH0            (*(volatile unsigned char *)0x50000027)
#define rUTXH1            (*(volatile unsigned char *)0x50004023)
#define rURXH1            (*(volatile unsigned char *)0x50004027)
#define rUTXH2            (*(volatile unsigned char *)0x50008023)
#define rURXH2            (*(volatile unsigned char *)0x50008027)
#define WrUTXH0(ch)        (*(volatile unsigned char *)0x50000023)=(unsigned char)(ch)
#define RdURXH0()          (*(volatile unsigned char *)0x50000027)
#define WrUTXH1(ch)        (*(volatile unsigned char *)0x50004023)=(unsigned char)(ch)
#define RdURXH1()          (*(volatile unsigned char *)0x50004027)
#define WrUTXH2(ch)        (*(volatile unsigned char *)0x50008023)=(unsigned char)(ch)
#define RdURXH2()          (*(volatile unsigned char *)0x50008027)
#define UTXH0            (0x50000020+3)
#define URXH0            (0x50000024+3)
#define UTXH1            (0x50004020+3)
#define URXH1            (0x50004024+3)
#define UTXH2            (0x50008020+3)
#define URXH2            (0x50008024+3)
#else
#define rUTXH0            (*(volatile unsigned char *)0x50000020)
#define rURXH0            (*(volatile unsigned char *)0x50000024)
#define rUTXH1            (*(volatile unsigned char *)0x50004020)
#define rURXH1            (*(volatile unsigned char *)0x50004024)
#define rUTXH2            (*(volatile unsigned char *)0x50008020)
#define rURXH2            (*(volatile unsigned char *)0x50008024)
#define WrUTXH0(ch)        (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
#define RdURXH0()          (*(volatile unsigned char *)0x50000024)
#define WrUTXH1(ch)        (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)
#define RdURXH1()          (*(volatile unsigned char *)0x50004024)
#define WrUTXH2(ch)        (*(volatile unsigned char *)0x50008020)=(unsigned char)(ch)
#define RdURXH2()          (*(volatile unsigned char *)0x50008024)
#define UTXH0            (0x50000020)   
#define URXH0            (0x50000024)
#define UTXH1            (0x50004020)
#define URXH1            (0x50004024)
#define UTXH2            (0x50008020)
#define URXH2            (0x50008024)
#endif

#define rTCFG0             (*(volatile unsigned *)0x51000000)
#define rTCFG1             (*(volatile unsigned *)0x51000004)
#define rTCON              (*(volatile unsigned *)0x51000008)
#define rTCNTB0            (*(volatile unsigned *)0x5100000C)
#define rTCMPB0            (*(volatile unsigned *)0x51000010)
#define rTCNTO0            (*(volatile unsigned *)0x51000014)
#define rTCNTB1            (*(volatile unsigned *)0x51000018)
#define rTCMPB1            (*(volatile unsigned *)0x5100001C)
#define rTCNTO1            (*(volatile unsigned *)0x51000020)
#define rTCNTB2            (*(volatile unsigned *)0x51000024)
#define rTCMPB2            (*(volatile unsigned *)0x51000028)
#define rTCNTO2            (*(volatile unsigned *)0x5100002C)
#define rTCNTB3            (*(volatile unsigned *)0x51000030)
#define rTCMPB3            (*(volatile unsigned *)0x51000034)
#define rTCNTO3            (*(volatile unsigned *)0x51000038)
#define rTCNTB4            (*(volatile unsigned *)0x5100003C)
#define rTCNTO4            (*(volatile unsigned *)0x51000040)

关键字:S3C2410  内存映射 引用地址:S3C2410的内存映射

上一篇:基于MINI2440开发板的LED流水灯实验(含init.s)
下一篇:S3C2440 2440init.s分析第一篇(二)

推荐阅读最新更新时间:2024-03-16 14:52

嵌入式智能家居控制系统的研究与设计
系统结构设计     本文将控制系统分为现场控制级(主机)和多个控制对象级(分机)。现场控制级设备能够收集到控制对象的各种信息,对这些数据进行处理,并能够在设定的条件下产生报警。通过该系统,可以得到家居的各种运行状态(例如,房间温度、湿度,煤气泄漏报警等),并能根据现场情况做出相应的调整控制(例如,照明及家电控制等)。其家居控制系统结构如图1所示。 图1 家居控制系统结构图     本文仅研究设计智能家居的现场控制部分,图1中的GSM和GPRS等远程通信模块作为以后系统的扩展升级。主机MCU选用ARM9芯片S3C2410,因其具有丰富的功能端口而适合设计要求和日后扩展。S3C2410嵌入式微处理器集成了众多的常用资
[嵌入式]
基于Linux和S3C2410的嵌入式图象传输系统设计
1 引言 如何更好的获得监控现场的图象数据一直是棘手的一个问题,传统的方法是采用CCD摄象机获取现场的视频信息,这种方法易于实现,但成本较高。随着ARM系列处理器应用的越来越广和基于linux的嵌入式技术的迅速发展,利用linux自身带有的TCP/IP协议来实现远程监控、图象传输已成为可能。本文提出的正是一种这样的方法,利用市场上很常见的中星微系列的USB摄象头来得到现场的图象数据,利用linux内核中的Video4Linux编程接口函数采集图象,并把得到的图象通过Internet传输到上位机PC上,在PC上实现图象的保存和显示。 2 硬件系统设计原理 系统的硬件功能框图如图1所示,CPU采用的是三星公司的S3C2410。该
[嵌入式]
基于ARM920T微处理器的IDE硬盘接口设计与实现
   1 引言   20世纪90年代后期,嵌入式系统在工业控制、远程监控和数据采集等领域的应用日趋广泛,人们对嵌入式系统的存储容量也提出了较高的要求。因此研制适用于嵌入式系统的大容量、高速率、高可靠性的数据存储系统变得日益重要。本文针对一款基于ARM920T芯片的开发板,根据ATA硬盘接口规范,设计了IDE硬盘接口电路,实现了对IDE硬盘的读写,可以在Linux系统中对其上的文件系统自由访问,达到了高速率和高可靠性的要求。    2 ARM920T与S3C2410介绍   ARM 包括一系列微处理芯片技术。ARM920T是ARM系列微处理器的一种,它采用5阶段管道化ARM9TDMI内核,同时配备了Thumb扩展、Emb
[嵌入式]
WindowsCE环境下无线网卡的自动安装
  Windows CE是为多种嵌入式系统和产品而设计的紧凑、高效、可升级的操作系统 ,并特别为有限的硬件资源设计了多线程、多任务和完全优先的操作系统环境。在 无线通信领域有很大的应用前景。   本文重点讨论了Windows CE环境下无线网卡的安装,并提出了一种在系统断电重启时自动安装无线网卡的解决方案;还对Windows CE的系统定制、应用程序的开发及系统封装进行了介绍。由于Windows CE与Windows的同源和相似,决定了学习Windows CE的简易性,这样就缩短了应用者的开发周期。   1 Windows CE简介   Windows CE包括四大基本模块,它们提供了操作系统的关键特性,分别是:内核(Ker
[单片机]
WindowsCE环境下无线网卡的自动安装
ucOS-II移植到S3C2410笔记之一
1: 问题: 移植汇编函数:OSStartHighRdy, 如下,但发现只有OS_TaskIdle一个任务时,都不能正确运行。 .globl OSStartHighRdy .type OSStartHighRdy, %function OSStartHighRdy: /* C variable OSRunning = TRUE */ mov r0, #1 ldr r1, =OSRunning str r0, /* get the stack pointer of task that will be running. */ ldr r5, =OSTCBHighRdy
[单片机]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟(RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行方式进行通讯。 SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单。串行A/D转换器具有电路简单、工作可靠的特点,而ARM芯片被设计用于手持设备以及普通的嵌人式应用的集成系统,将上述两种实用的芯片和SPI总线技术相结合以实现数据采集十分有效。 1 AD7888的功能与使用 AD7888是美国模拟器件公司推出的一款
[嵌入式]
S3C2410-WinCE6.0-OAL的启动代码分析
到现在为止,我们已经了解了S3C2410平台上WinCE6.0的启动过程,包括NBOOT、EBOOT、OAL.exe、Kernel.dll的工作流程。关于WINCE600的目录也做了介绍。准备工作都做好了,接下来开始介绍S3C2410平台上WinCE6.0的移植。BSP的移植很大一部分是代码的移植,所以,这里仍然以代码为主线,以函数为单位来做介绍。BSP的代码一般来说也不是自己从无到有CODE出来的,大多由芯片厂商或者微软提供,OEM厂商需要做得事情是修改相关代码以满足自己硬件的特定需求,快速推出新的产品。如果BSP的移植从零开始,那么市场的先机就完全丧失了。所以这里的介绍将基于现有代码,着重说明移植时需要修改和注意的地方。
[单片机]
<font color='red'>S3C2410</font>-WinCE6.0-OAL的启动代码分析
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟(RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行方式进行通讯。 SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单。串行A/D转换器具有电路简单、工作可靠的特点,而ARM芯片被设计用于手持设备以及普通的嵌人式应用的集成系统,将上述两种实用的芯片和SPI总线技术相结合以实现数据采集十分有效。 1 AD7888的功能与使用 AD7888是美国模拟器件公司推出的一款
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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