文档库 最新最全的文档下载
当前位置:文档库 › P2020处理器的存储映射

P2020处理器的存储映射

P2020处理器的存储映射
P2020处理器的存储映射

本文简要表述P2020处理器的存储映射:

P2020处理器的存储空间映射关系总体如下:

...

其中E500V2内核的MMU单元负责将有效地址转换为虚拟地址,最终转换为物理地址,之后通过12个LAW寄存器来分配整个物理地址空间,在LAW寄存器中指定外设接口存储空间的类型和大小。

1、为什么要采用EA、VA、PA这种映射关系?

EA:在程序中能够直接使用的地址,E500内核的有效地址为32位,E500内核的EA由有效地址页表索引EPN和地址偏移Offset两部分组成。

在支持多进程的操作系统中,每个进程使用的虚拟空间独立,此时需要使用处理器提供的MMU将各个进程使用的地址空间进行有效隔离。

32位处理器能够访问的最大物理地址空间仅为4GB,然而在有些操作系统汇总,如Linux系统,每一个进程都拥有3GB虚拟地址空间。因此一个多进程操作系统中使用的虚拟地址空间一般都大于4GB。为此操作系统必须采取某种转换机制建立虚拟地址空间与实际物理空间的映射。

处理器的MMU为系统软件设立了转换查找表以支持虚实地址的映射。在这些查找表中将规定虚实地址的对应关系及访问控制等一系列信息。系统软件将利用处理器提供的查找表完成虚实地址的映射。

寄存器和存储器的区别

https://www.wendangku.net/doc/107036321.html,/p-20032411.html

寄存器和存储器的区别

如果仅是讨论CPU的范畴 寄存器在cpu的内部,容量小,速度快 存储器一般都在cpu外部,容量大,速度慢 回答者:athlongyj - 高级经理六级6-1 08:52 从根本上讲,寄存器与RAM的物理结构不一样。 一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,这个在数电里面大家都看过; 而RAM则有自己的工艺,一般1Bit由六MOS管构成。所以, 这两者的物理结构不一样也导致了两者的性能不同。寄存器 访问速度快,但是所占面积大。而RAM相反,所占面积小, 功率低,可以做成大容量存储器,但访问速度相对慢一点。 1、 寄存器存在于CPU中,速度很快,数目有限; 存储器就是内存,速度稍慢,但数量很大; 计算机做运算时,必须将数据读入寄存器才能运算。 2、 存储器包括寄存器, 存储器有ROM和RAM 寄存器只是用来暂时存储,是临时分配出来的,断电,后,里面的内容就没了`````

寄存器跟存储器有什么区别? 一般数据在内存里面,要处理(或运算)的时候, 独到寄存器里面。 然后CPU到寄存器里面拿值,拿到运算核内部, 算好了在送到寄存器里面 再到内存 寄存器跟存储器有什么区别? 寄存器跟存储器有什么区别? 寄存器上:“一个操作码+一个操作数”等于一条微指令吗?一条微指令是完成一条机器指令的一个步骤对吗?cpu是直接跟寄存器打交道的对吗?也就是说寄存器是运算器、控制器的组成部分对不? 设计一条指令就是说把几条微指令组合起来对吗? 刚开始学硬件相关知识,学的晕头转向的!! 存储器与寄存器区别 2009-06-09 12:27 寄存器是CPU内部存储单元,数量有限,一般在128bit内,但是速度快,CPU访问几乎没有任何延迟。分为通用寄存器和特殊功能寄存器。 通常说的存储器是独立于cpu之外的,比如内存,硬盘,光盘等。 所有数据必须从存储器传入寄存器后,cpu才能使用。

hello第四课(二)f2812存储器映射及cmd详解-日志-eyes417-

hello第四课(二):f2812存储器映射及cmd详解-日志 -eyes417-... 2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。 2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3. CPU中断向量。在程序空间里也保留了64个地址作为CPU 的32个中断向量。通过CPU的一个寄存器ST1中的VMAP

位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址  F2812内部的映射空间  2812CMD详解CMD:command 命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明 将funcA数据块定位于用户自定义的段"dataA"中------ 需要在CMD中指定dataA段的物理地址2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Headers_nonBIOS.cmd为例 F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置CMD文件里有两个基本的段:初始化段和

3.单片机的存储器、寄存器及位地址空间

单片机的存储器有几种?多存放何种内容和信息? 答:单片机的存储器有程序存储器ROM与数据存储器RAM两种。 这两种存储器在使用上是严格区分的,不得混用。 程序存储器存放程序指令,以及常数,表格等;而数据存储器则存放缓冲数据。 MCS-51单片机存储器的结构有哪几部分? 答:MCS-51单片机存储器的结构共有3部分: 一是程序存储器 二是内部数据存储器 三是外部数据存储器 MCS-51单片机的存储器分为哪几类? 答:MCS-51单片机的存储器可分为5类:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间、外部数据存储器。 程序存储器用于存放什么内容?它可寻址的地址空间是多少? 答:程序存储器用于存放编号的程序和表格常数 程序存储器以程序计数器PC作地址指针 由于MCS-51单片机的程序计数器为16位,因此可寻直的地址为64KB。 MCS-51单片机复位后,对系统有何要求? 答:单片机复位后,程序计数器PC的内容为0000H,所以系统必须从0000H单元开始取指令来执行程序。

0000H单元是系统的起始地址,一般在该单元存放一条绝对跳转指令(LJMP) 而用户设计的主程序,则从跳转后的地址开始安放。 MCS-51单片机内部数据存储器是怎样设置的? 答:MCS-51单片机内部有128个字节的数据存储器,内部RAM编址为00H~7FH。 MCS-51对其内部的RAM存储器有很丰富的操作指令,方便了程序设计。 单片机内部数据存储器的特点是什么? 答:工作寄存器和数据存储器是统一编址的,这是单片机内部存储器的主要特点。 什么是堆栈?MCS-51单片机的堆栈怎样设置的? 答:程序设计时,往往需要一个后进先了的RAM区,以保存CPU的现场。这种后进先出的缓冲区,就称为堆栈。 MCS-51单片的堆栈原则上设在内部RAM的任意区域内。但是,一般设在31H~7FH的范围之间,栈顶的位置由栈指针SP指出。 什么是特殊功能寄存器? 答:特殊功能寄存器是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区。 MCS-51单片机特殊功能寄存器的作用是什么? 答:特殊功能寄存器的作用是对片内各功能模块进行管理、控制和监视。 MCS-51单片机特殊功能寄存器是怎样设置的? 答:MCS-51单片机内的I/O口锁存器、定时器、串行口缓冲器以及各种控制寄存器和状态寄存器都以特殊功能寄存器的形式出现。

5509A开发板存储空间和存储器映射

5509A开发板存储空间和存储器映射 TMS320VC5509A数字信号处理芯片具有一个比较复杂的存储空间分配体系。因此,在使用之前,首先需要了解一下TMS320VC5509的存储空间体系。关于TMS320VC5509的存储空间的详细说明,请参考TMS320VC5509 Datasheet 和TMS320VC5509 DSP External Memory Interface(EMIF)(编号为SPRU670)用户手册。 1. 存储空间组织 TMS320VC5509A 芯片的存储空间组织如下图所示: 明伟TMS320VC5509A开发板外扩一片16位的SDRAM,用/CE0选通,容

量为4M X 16位,寻址占用/CE0和/CE1两个存储空间。最大可配置为8M*16 位,占用CE0—CE3全部四个片外存储空间。 片选CE0---CE3引至总线扩展器上,供用户自行连接设备。其中,CE1和 CE2接至CPLD使用,用户使用时请详细阅读以下内容,以免造成冲突。 2. 寄存器组映射 TMS320VC5509A 开发板共有6个扩展寄存器组,用于与板上外设如按键、 网络芯片等通信,进行控制或读写信息。这些寄存器组通过CPLD扩展,分别是:z功能选择寄存器组 z按键寄存器组 z Flash地址扩展寄存器组 z网络控制寄存器组 z LCD控制寄存器组 z LCD数据寄存器组 2.1 寄存器组定义 1)功能选择寄存器组(W,只写) 功能选择寄存器组用于选择与切换对其它寄存器组的控制功能,其各位含义 如下: D5 D4 D3 D2 D1 D0 D15-D6 ALCDC ALCDD ANET AFLASH AKEY X LCDDIR X:无影响,可取任意值 LCDDIR:控制LCD的数据输入/输出方向,0为写LCD,1为读LCD ALCDC:控制LCD控制寄存器组的使能,0为使能,1为禁用 ALCDD:控制LCD数据寄存器组的使能,0为使能,1为禁用 ANET:控制8019网络芯片控制寄存器组的使能,0为使能,1为禁用 AFLASH:控制Flash地址扩展寄存器组的使能,0为使能,1为禁用 AKEY:控制按键寄存器组的使能,0为使能,1为禁用

2812存储器映射

2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。 2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3.CPU中断向量。在程序空间里也保留了64个地址作为CPU的32个中断向量。通过CPU 寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址

F2812内部的映射空间 低地址空间 高地址空间 2812CMD详解 CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DA TA_SECTION伪指令 #pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明

将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址 2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。 以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Headers_ nonBIOS.cmd为例 F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置 CMD文件里有两个基本的段:初始化段和非初始化段。初始化段包含代码和常数等必须在D SP上电之后有效的数。故初始化块必须保存在如片内FLASH等非遗失性存储器中,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。 已初始化的段:.text,.cinit,.const,.econst,..pinit和.switch.. .text:所有可以执行的代码和常量 .cinit:全局变量和静态变量的C初始化记录 .const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明 .econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明 .pinit:全局构造器(C++)程序列表 .switch:包含switch声明的列表

存储器映射和存储器重映射概念

存储器映射和存储器重映射 1.1 什么是存储器映射? 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就称为存储器映射。如图 1.所示。 图 1.1 映射原理图 在完成了存储器映射后,用户就可以按地址去访问对应的存储单元。 1.2 什么是存储器重新映射? 顾名思义,存储器重映射就是给存储单元再分配1个地址。此时,该存储单元就有了两个地址。用户可以通过这两个地址来访问该存储单元。如图 1.1所示。 图 1.1 存储器重映射 1.3 为什么要进行存储器重映射? 在实际应用中,我们需要对某些存储单元再分配地址;此时,就要进行存储器重映射。例如,异常向量表所在存储单元和Boot ROM都须进行重映射。下面以异常向量表所在存储单元的重映射为例说明如下: (1)用户程序总是从异常向量表开始执行 在ARM7编程中,异常向量表是用户程序的必备部分,程序流总是从异常向量表开始的。 (2)发生异常时,只能通过规定地址访问异常向量表

由ARM7体系结构可知,ARM7的异常向量地址始终是0x0000 0000~0x0000 001c 。例如,复位时,CPU 会自动跳转到复位异常向量地址0x0处读取该处指令。 (3) 异常向量表所在的存储单元地址不固定 用户程序可以存储在片内RAM 、片内Flash 、片外存储器,随着存储位置的不同,用户程序的存储地址显然也不同;因此,作为用户程序一部分的异常向量表的存储地址也是不固定的。如图 1.2所示。 0x0000 00000x0000 001C 0x4000 0000 0x4000 001C 0x8000 00000xE000 0000 0xFFF FFFF 0x8000 001C 不定 图 1.2 各异常向量表的实际位置 (4) 问题的提出 当异常向量表的实际存储地址并不在要求的0x0000 0000~0x0000 001c 范围时,那么发生异常时,CPU 怎样才能访问到异常向量表呢? (5) 解决办法――存储器重映射 存储器重映射机制就是为了解决(4)所提的问题而设计的。用户可通过存储器重映射,把地址0x0000 0000~0x0000 001c 再分配给异常向量表所在存储单元。至此,CPU 内核既可以通过0x0000 0000~0x0000 001c 访问异常向量表,也可以通过异常向量表所在存储单元的实际地址来访问异常向量表。例如:用户程序现存放在片外Flash ,该程序的异常向量表实际存储地址位于0x80000000~0x8000003C ;但通过存储器重映射,可将地址0x00000000~0x0000003C 分配给0x80000000~0x8000003C 的存储单元。于是,用户既可以通过0x80000000~0x8000003C ,也可以通过0x00000000~0x0000003C 来访问异常向量表。所以,发生异常时,CPU 虽然仍是访问0x00000000~0x0000003C 处,但仍可通过该地址访问到实际位于片外Flash 的异常向量表。 1.4 小结 由上述可知,存储器重映射的用途就是给存储器单元再分配1个地址,以解决一些实际需要。 应用存储器重映射机制的例子,除异常向量表以外还有Boot ROM 。若您有兴趣,可参考我们的《深入浅出ARM7――LPC2300(上册)》中的“存储器重映射及引导块”小节。

ARM存储器结构

ARM存储器结构 ARM存储器:片内Flash、片内静态RAM、片外存储器 映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系。 我们可以把存储器看成一个具有输出和输入口的黑盒子。输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体电路实现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。 普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的,UGG boots。 而ARM比较复杂,ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理存储单元的地址可以根据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了(这就是后面要说的重新映射)。例如将0x00000000地址上的存储单元映射到新的地址0x00000007上。CPU存取0x00000007就是存取0x00000000上的物理存储单元。(随便举的例子为了说明道理,没有实际意义) 存储器重新映射(Memory Re-Map) 存储器重新映射是将复位后用户可见的存储器中部分区域,再次映射到其他的地址上。 存储器重新映射包括两个方面:1、Boot Block重新映射(关于Boot Block的相关内容看我博客中的另一篇文章)。2、异常(中断)向量重新映射 Boot Block重新映射:本来Boot Block在片内Flash的最高8KB,但是为了与将来期间相兼容,生产商为了产品的升级换代,在新型芯片中增加内部Flash容量时,不至于因为位于Flash高端的Boot Block的地址发生了变化而改写其代码,整个Boot Block都要被重新映射到内部存储器空间的顶部,即片内RAM的最高8KB。(地址为: 0x7FFFE000~0x7FFFFFFF) 异常(中断)向量重新映射:本来中断向量表在片内Flash的最低32字节,重新映射时要把这32个字节再加上其后的32个字节(后面这32个字节是存放快速中断IRQ的服务程序的)共64个字节重新映射(地址为:0x00000000~0x0000003F)重新映射到的地方有三个:内部Flash高端的64字节空间、内部RAM低端的64字节空间和外部RAM低端的64字节空间,再加上原来的内部Flash低端的64字节空间,异常向量一共可以在四个地方出现。为了对存储器映射进行控制,处理器设置了存储器映射控制寄存器MEMMAP,其控制格式如下图所示:

存储器寻址方式

存储器寻址方式 存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。8088的存储器空间是分段管理的。程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA) 1.直接寻址 在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以采用段超越前缀。 例将数据段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, [2000H] 该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。 如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。

MOV AX, [2000H];指令代码:A1 00 20 例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。 MOV AX, ES:[2000H]; 指令代码:26 A1 00 20 变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如 WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。假设它在数据段偏移地址是0010H 。 例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。 MOV AX, WV AR; 指令功能: 上述指令实质就是如下指令: AX WV AR AX DS :[0010H]

第4课 2812的片内资源、存储器映射以及CMD文件的编写

第4课F2812片内资源、存储器映射以及CMD文件的编写 作者:顾卫钢谢芬(HELLODSP资深会员) 从今天开始,我们的课程终于进入F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学习2812的片内资源,初步了解它究竟有哪些本事,能拿来干些什么,然后一起了解2812存储器的结构,统一编址的方式、存储器映射关系,并重点分析CMD文件,以期望消除大家对CMD文件的迷惑,在自己编写程序的时候会修改CMD文件中的部分内容,从而满足自己设计时的需求。 1.F2812的片内资源 我们知道,TMS320F2812是32位的定点DSP,它既具有数字信号的处理能力,又具有强大的事件管理能力和嵌入式控制功能,特别适合用于需要大批量数据处理的测控领域,例如自动化控制、电力电子技术、智能化仪表、电机伺服控制。下面是F2812的内部资源框图。 图1 TMS320F2812内部资源框图 2812采用了高性能的静态CMOS技术,时钟频率可达150MHZ(6.67ns),其核心电压为1.8V,I/O口电压3.3V,Flash编程电压也为3.3V,所以我们在设计2812电源部分的时候,需要将常用的5V电压转换成1.8V和3.3V的电压之后,才能供给2812。具体的设计我们将会在以后的硬件设计内容里进行探讨。

让我们一起来看看图1,最左边的A(18-0)和D(15-0)是表示2812外扩存储器的能力,2812外扩的存储空间最大是219*16 bit,就是说最多只能扩512K个存储单元,每一个存储单元的位数为16位。 从图中我们也可以看到,F2812支持JTAG边界扫描(Boundary Scan),这也是为什么我们的仿真器都是采用JTAG口的原因了,在这里,提醒大家一点的就是,仿真的时候,JTAG口的方向不能插反,如果插反的话会将仿真器烧坏。我们所使用的14针JTAG口的第6针是空脚,所以一般情况下仿真器JTAG线的第6针是填针的,同时在板子上的第6脚是拔空的,这样可以防止您插反JTAG口,以避免不必要的损失。这一点,在我们自己设计板子的时候尤其需要注意。 在图1中,我们可以看到连接整个芯片各个模块的两条黑色的线,从英文单词上我们可以看到一条是Program Bus,另一条是Data Bus,就是程序总线和数据总线。这个概念讲的还是比较笼统的,下面我们详细分析这两天总线,并结合图中总线上的各个箭头来理解这些概念。 我们首先需要知道2812的存储器空间被分成了2块,一块是程序空间,一块是数据空间,而无论是那一块的内容,我们都需要借助于两种总线来进行传送相关的内容——地址总线和数据总线,用地址总线来传送存储单元的地址,而用数据总线来传送存储单元内的内容。2812的存储器接口具有3条地址总线和3条数据总线。了解了这些基本的内容之后我们接下来一一讲述2812内部的总线结构。 先来讲地址总线,顾名思义,这类总线的作用就是来传送存储单元的地址的。 1.PAB (Program Address Bus)程序地址总线,它是一个22位的总线,用于传送程序空间的读写地址。 程序在运行的时候,假如执行到了某一个指令,那么需要去找到这段代码的地址,就是用PAB来传送。 2.DRAB(Data-Read Address Bus)数据读地址总线,它是个32位的总线,用于传送数据空间的读地址。 假如要读取数据空间某一个单元的内容,那么这个单元的地址就是通过DRAB来传送。 3.DWAB(Data-Write Address Bus)数据写地址总线,它也是个32位的总线,用于传送数据空间的写地 址。类似的,如果我要对数据空间的某一个单元进行写操作,那么这个单元的地址就是通过DWAB来传送。 了解了地址总线后,我们再来看看数据总线,这类总线传送的就是数据了,也就是各个存储单元内的具体内容了。 1.PRDW(Program-Read Data Bus)程序读数据总线,它是一个32位的总线,用于传送读取程序空间时 的指令或者数据。我们在执行代码的时候,首先是通过PAB传送并找到了存放该指令的存储单元,但是这个存储单元下的具体内容就要由我们的PRDW来传送了。 2.DRDB(Data-Read Data Bus)数据读数据总线,它是一个32位的总线,在读取数据空间时用来传送数 据。我们在进行读操作时,先通过DRAB总线确定了需要进行读操作的数据单元的地址,接下来传送这个数据单元下面的具体内容时就需要DRDB了。 3.DWDB(Data/Program-Write Data Bus)数据写数据总线,它是一个32位的总线,在进行写操作时,

F2812存储器映射及CMD详解

2812存储器映射及CMD 2812存储器映射 2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0 xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。 2812的存储器被划分成了下面的几个部分: 1. 程序空间和数据空间。2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。

2. 保留区。数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。 3.CPU中断向量。在程序空间里也保留了64个地址作为CPU的32个中断向量。通过CPU寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。 映射和空间的统一编址 F2 812内部的映射空间 低地址空间

高地址空间 2812CMD详解 CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。 1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令 #pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明 将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址

程序存储器 指令寄存器 程序计数器(PC,IP) 地址寄存器的区别与联系

先明白定义再说区别和原理: 1、程序存储器(program storage) 在计算机的主存储器中专门用来存放程序、子程序的一个区域。 2、指令寄存器(IR ):用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中,然后再传送至IR。指令划分为操作码和地址码字段,由二进制数字组成。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。指令译码器就是做这项工作的。指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。 3、程序计数器(PC):为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器

(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。 当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。有些机器中也称PC为指令指针IP(Instruction Pointer) 4、地址寄存器:用来保存当前CPU所访问的内存单元的地址。由于在内存和CPU之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止。 当CPU和内存进行信息交换,即CPU向内存存/ 取数据时,或者CPU从内存中读出指令时,都要使用地址寄存器和数据缓冲寄存器。同样,如果我们把外围设备的设备地址作为像内存的地址单元那样来看待,那么,当CPU和外围设备交换信息时,我们同样使用地址寄存器和数据缓冲寄存器。

ARM的存储器映射与存储器重映射.

Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only. ARM的存储器映射与存储器重映射 当系统上电后,程序将自动从0x00000000地址处开始执行,因此在系统的初始状态,要求0x00000000地址处的存储器是非易性的ROM或Flash等。但是ROM 或Flash的访问速度相对较慢,每次中断发生后,都要读取ROM或Flash上的向量表开始,影响了中断响应速度。因此,LPC2200提供一种灵活的地址重映射方法,该方法可以将内部RAM的地址重新映射到0x00000000的位置。在系统执行重映射命令之前,需要将Flash中的中断向量代码拷贝到内部RAM中。这样在重映射命令执行之后相当于从内部RAM中0x00000000的位置找到中断向量,而实际上是将RAM的起始地址0x40000000映射为0x00000000了。这样,中断执行时相当于在RAM中找到对应中断向量,实现异常处理调试。 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说,0X00000000依 Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2008For Evaluation Only. 次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器0X80000000,VPB(低速外设地址,如GPIO,UART)—— 0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。由于系统在上电复位时要从0X00000000开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。BOOTBLOCK运行完就是要运行用户自己写

存储器地址映射

通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数 在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。... 就是把一个地址连接到另一个地址。 例如,内存单元A的地址为X,把它映射到地址Y,这样访问Y时,就可以访问到A 了。当然,访问原来的地址X,也可以访问到A。 再如,在C语言等高级语言里面没有访问IO的指令,所以那样的话在C里面就无法访问IO,只能通过嵌入汇编或者通过调用系统函数来访问IO了。采用IO映射后就不同了,因为IO空间和内存空间本来不同,有不同的访问指令,那么,将IO空间映射到内存空间,就可以通过使用访问内存的方法来访问IO了,例如在C语言里面可以通过指针来访问内存 单元,从而访问到被映射的IO。 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统 一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。 用户只能在挂外部RAM或FLASH的情况下可进行自定义。ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说,0X00000000依次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器0X80000000,VPB(低速外设地址,如GPIO,UART)——0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器)——从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。由于系统在上电复位时要从0X00000000 开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK 区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK 区了。BOOTBLOCK运行完就是要运行用户自己写的启动代码了,而启动代码中最重要的就是异常向量表,这个表是放在FLASH的头部首先执行的,而异常向量表中要处理多方面的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ(中断) ,FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器,BOOTBLOCK,SRAM中固化的,不可能都由用户直接定义,所以还是需要重映射把那些异常向量表的地址映到总表中。为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。重映射主要包括引导块―Boot Block‖重映射和异常向量表的重映射。1.引导块―Boot Block‖及其重映射Boot Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。这段代码在复位时被首先运行,主要用来判断运行哪个存储器上面的程序,检查用户代码是否有效,判断芯片是否被加密,系统的在应用编程(IAP)以及在系统编程功能(ISP)等。Boot Block存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间,但也有其他的LPC系列不占用FLash空间的,而部分没有内部Flash空间的ARM处理器仍然存在Boot Block。重映射的原因:Boot

地址分配和存储器映射

在嵌入式编程里,特别是32bit CPU里,各种各样五花八门的动作是CPU通过对外设的驱动来完成的.因为底层编程大部分工作就是外设编程。 CPU本身几乎每一种外设都是通过读写设备上的寄存器来进行操作的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。注意,这里的外设是相对于CPU来讲的,比如S3C2440除了ARM920T的内核以外,还在同一块CPU里集成很多模块,这一些模块也称为外设。 CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped)称为端口映射,另一种是存储空间映射方式(Memory-mapped),称为内存映射。而具体采用哪一种则取决于CPU的体系结构。 内存映射 有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设 I/O端口的物理地址就被映射到CPU的单一物理地址空间中,而成为存储空间的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。这就是所谓的“存储空间映射方式”(Memory -mapped)。ARM体系的CPU均采用这一模式.

简而言之,就是内存(一般是SDRAM)与外设寄存器统一编址。 端口映射 而另外一些体系结构的CPU(典型地如X86)则为外设专门实现了一个单独地地址空间,称为“I/O地址空间”或者“I/O端口空间”。这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即 I/O端口)。这就是所谓的“I/O映射方式”(I/O-mapped)。与RAM物理地址空间相比,I/O地址空间通常都比较小,如x86 CPU的I/O空间就只有64KB(0-0xffff)。这是“I/O映射方式”的一个主要缺点。而且必须要专门的汇编语言才能处理. 内存映射模式下,对寄存器的访问就是某一个地址的操作,因此C语言的指针即可完成此操作。这样编程相当方便。 Linux 最早是在在X86运行,对硬件地址采用端口映射,后来又扩展到ARM之类运行.为了简化操作,Linux在所以CPU上都采用I/O端口概念.如果是象ARM这样内存映射.也被模拟成端口. SOC的外设地址编址 -----------------------------------------------------------------------------------------------

存储器知识点小结

CPU工作的实质即为不断从存中取指令并执行指令的过程。 一、8086CPU构成 CPU的工作:取指令和执行指令 1.C PU部两大功能部件:总线接口部件BIU和执行部件EU(2部件并行工作提高了CPU的工作效率) 重点:理解2个独立功能部件的分工和协同配合关系。 理解BIU地址加法器的作用,理解指令队列的作用。 2.掌握CPU部寄存器的作用 包括:通用寄存器AX,BX,CX,DX,BP,SP,SI,DI 段寄存器CS,DS,SS,ES 指令指针寄存器IP 标志寄存器FLAG 二、存储器的基础知识 1.物理地址 8086的存储器是以字节(即每个单元存放8位二进制数)为单位组织的。8086CPU具有20条地址总线,所以可访问的存储器地址空间容量为220即1M字节(表示为1MB)。每个单元对应一个唯一的20位地址,对于1MB存储器,其地址围用16进制表示为00000H~0FFFFFH,如图1所示。

地址低端 地址高端 图1 1MB存储器地址表示 物理地址:存储器的每个单元都有一个唯一的20位地址,将其称为物理地址。 2.字节地址与字地址 存储器两个连续的字节,定义为一个字,一个字中的每个字节,都有一个字节地址,每个字的低字节(低8位)存放在低地址中,高字节(高8位)存放在高地址中。字的地址指低字节的地址。各位的编号方法是最低位为位0,一个字节中,最高位编号为位7;一个字中最高位的编号为位15。 字数据在存储器中存放的格式如图2所示。 地址低端 地址高端 图2 字数据在存储器中的存放

3.单元地址与容 内容 单元地址 图3 如图3,地址是00100H的字节单元的容为27H,表示为(00100H)= 27H。 图3中字数据3427H存放在地址是00100H和00101H的两个字节单元中,其中低字节27H在低地址的字节单元00100H中,高字节34H在高地址的字节单元00101H中,字数据3427H的地址是低地址00100H。地址是00100H的字单元的容为3427H,表示为(00100H)= 3427H 可见一个地址既可作字节单元的地址,又可作字单元的地址,视使用情况而定。 总结: 字节单元:(00100H)=27H 字单元:(00100H)=3427H 设寄存器DS=0000H, 用MOV指令访问字节单元:MOV AL,[0100H] 用MOV指令访问字单元:MOV AX,[0100H] 三、存储器的分段 1.为什么要分段

单片机存储器和寄存器

单片机的存储器、寄存器 单片机的存储器有程序存储器ROM与数据存储器RAM两种。这两种存储器在使用上是严格区分的,不得混用。程序存储器存放程序指令,以及常数,表格等;而数据存储器则存放缓冲数据。 MCS-51单片机存储器的结构共有3部分:一是程序存储器二是内部数据存储器三是外部数据存储器MCS-51单片机的存储器可分为5类:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间、外部数据存储器 程序存储器 程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。如前述用助记符编写的命令MOV A,#20H,换成机器认识的代码74H、20H:(写成二进制就是01110100B和00100000B)。在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。程序存储器可以放在片内或片外,亦可片内片外同时设置。由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH。8051内部有4k字节的ROM,就占用了由0000H~0FFFH的最低4k个字节,这时片外扩充的程序存储器地址编号应由1000H开始,如果将8051当做8031使用,不想利用片内4kROM,全用片外存储器,则地址编号仍可由0000H开始。不过,这时应使8051的第{31}脚(即EA脚)保持低电平。当EA为高电平时,用户在0000H至0FFFH范围内使用内部ROM,大于0FFFH后,单片机CPU自动访问外部程序存储器。 数据存储器 单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用寄存器区。实际使用时应首先充分利用内部存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。因为将来在学习指令系统和程序设计时会经常用到它们。8051内部数据存储器地址由00H至FFH共有256个字节的地址空间,该空间被分为两部分,其中内部数据RAM的地址为00H~7FH(即0~127)。而用做特殊功能寄存器的地址为80H~FFH。在此256个字节中,还开辟有一个所谓“位地址”区,该区域内不但可按字节寻址,还可按“位(bit)”寻址。对于那些需要进行位操作的数据,可以存放到这个区域。从00H到1FH安排了四组工作寄存器,每组占用8个RAM 字节,记为R0~R7。究竟选用那一组寄存器,由前述标志寄存器中的RS1和RS0来选用。在这两位上放入不同的二进制数,即可选用不同的寄存器组。 特殊功能寄存器 特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带*号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS-51共有P0~P3四个这样的并行口,可提供32 根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加

相关文档
相关文档 最新文档