ARM处理器中CP15协处理器的寄存器
- 格式:pdf
- 大小:247.80 KB
- 文档页数:10
arm汇编cp15格式-回复CP15格式是一个用于ARM架构处理器中的协处理器格式。
它被用于实现对特殊寄存器和一些特权操作的访问和控制。
在本文中,我们将一步一步地回答一些关于CP15格式的问题,包括它的功能、如何使用它以及它的一些使用示例。
一、什么是CP15格式?CP15格式是ARM架构中的一个协处理器格式。
它被用来实现对一些特殊寄存器和特权操作的访问和控制。
这些特殊寄存器和特权操作对于操作系统和处理器架构之间的通信和控制至关重要。
二、CP15格式的功能是什么?CP15格式的主要功能包括:1. 访问系统控制寄存器(System Control Registers,SCR)和体系结构版本寄存器(Architectural Version Registers,AVR)等特殊寄存器;2. 控制处理器的访问权限和特权级别;3. 提供对异常处理的支持,例如中断处理和系统调用;4. 管理cpu缓存和内存管理单元(MMU)等。
5. 提供对TLB(Translation Lookaside Buffer)的访问和控制。
三、怎么使用CP15格式?使用CP15格式,我们需要通过特殊的指令来进行访问和控制。
在ARM 汇编语言中,这些指令通常以"MCR"(Move to Co-processor Register)或"MRC"(Move from Co-processor Register)开头,后跟协处理器编号和寄存器编码。
下面是一些使用CP15格式的示例:1. 读取系统控制寄存器的值:MRC p15, 0, R1, c1, c0, 0这条指令读取CP15寄存器1(c1)中的值,并将其放入R1寄存器中。
2. 更新系统控制寄存器的值:MCR p15, 0, R0, c1, c0, 0这条指令将R0寄存器的值写入CP15寄存器1(c1)中,从而更新系统控制寄存器的值。
四、CP15格式的使用示例1. 启用或禁用MMU:MRC p15, 0, R1, c1, c0, 0 读取系统控制寄存器的值ORR R1, R1, #0x1 << 0 将R1寄存器中的Bit 0位置1以启用MMUMCR p15, 0, R1, c1, c0, 0 更新系统控制寄存器的值通过读取和更新系统控制寄存器的值来启用或禁用MMU。
ARM的37个寄存器详解ARM寄存器ARM共有37个32位物理寄存器,7种⼯作模式下可访问的寄存器见下表,User和System使⽤完全相同的物理寄存器。
2.1 R0~R7所有⼯作模式下,R0-R7都分别指向同⼀个物理寄存器(共8个物理寄存器),它们未被系统⽤作特殊的⽤途。
在中断或异常处理进⾏⼯作模式转换时,由于不同⼯作模式均使⽤相同的物理寄存器,可能造成寄存器中数据的破坏。
2.2 R8~R12在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同⼀个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独⽴的物理寄存器(共5个物理寄存器)。
2.3 R13和R14在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各⾃模式下独⽴的物理寄存器(共12个物理寄存器)。
R13在ARM指令中常⽤作堆栈指针(SP),但这只是⼀种习惯⽤法,⽤户也可使⽤其他的寄存器作为堆栈指针。
⽽在Thumb指令集中,某些指令强制性的要求使⽤R13作为堆栈指针。
由于处理器的每种⼯作模式均有⾃⼰独⽴的物理寄存器R13,在⽤户应⽤程序的初始化部分,⼀般都要初始化每种模式下的R13,使其指向该⼯作模式的栈空间。
这样,当程序进⼊异常模式时,可以将需要保护的寄存器放⼊R13所指向的堆栈,⽽当程序从异常模式返回时,则从对应的堆栈中恢复,采⽤这种⽅式可以保证异常发⽣后程序的正常执⾏。
R14称为链接寄存器(Link Register),当执⾏⼦程序调⽤指令(BL)时,R14可得到R15(程序计数器PC)的备份。
在每⼀种⼯作模式下,都可⽤R14保存⼦程序的返回地址,当⽤BL或BLX指令调⽤⼦程序时,将PC的当前值复制给R14,执⾏完⼦程序后,⼜将R14的值复制回PC,即可完成⼦程序的调⽤返回。
以上的描述可⽤指令完成。
执⾏以下任意⼀条指令:MOV PC, LRBX LR在⼦程序⼊⼝处使⽤以下指令将R14存⼊堆栈:STMFD SP!,{,LR}对应的,使⽤以下指令可以完成⼦程序返回:LDMFD SP!,{,PC}R14也可作为通⽤寄存器。
课后题答案:第一章1.写出下列英文缩写的英文原文及中文含义。
RAM随机存储器 DRAM动态随机存储器 ROM只读存储器PROM可编程只读存储器 EPROM可插除可编程只读存储器 CANCAN总线RTOS实时操作系统 SOPC片上可编程系统 ICE硬件调试器 FI快速终端请求EEPROM电可插除可编程只读存储器 API应用程序接 DMA直接内存存取RISC精简指令集计算机 SPI串行万维指令 MMU存储管理单元UART异步接受发送装置 ARM先进RISC存储器 SWI软件终端指令2、什么是嵌入式系统? P3嵌入式系统是用于检测、控制、辅助、操作机械设备的装置。
以应用为中心,一计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗等严格要求的专用计算机系统。
3、是比较嵌入式系统与通用PC的区别。
P3(1)嵌入式系统是专用的计算机系统,而PC是通用的计算机系统。
(2)技术要求不同,通用PC追求高速、海量的数据运算;嵌入式要求对象体系的智能化控制。
(3)发展方向不同,PC追求总线速度的不断提升,存储容量不断扩大;嵌入式追求特定对象系统的智能性,嵌入式,专用性。
4、嵌入式体统有哪些部分组成?简单说明各部分的功能与作用(1)硬件层是整个核心控制模块(由嵌入式微处理器、存储系统、通信模块、人机接口、其他I/O 接口以及电源组成),嵌入式系统的硬件层以嵌入式微处理器为核心,在嵌入式微处理器基础上增加电源电路、时钟电路、和存储器电路(RAM和ROM等),这就构成了一个嵌入式核心控制模块,操作系统和应用程序都可以固化在ROM中。
(2)中间层把系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。
一般包括硬件抽象层(Hardware Abstract Layer,HAL)和板级支持包(Board Support Package,BSP)。
(3)软件层由实时操作系统(Real Time Operating System,RTOS)、文件系统、图形用户接口(Graphical User Interfaces,GUI)、网络组件组成。
关于mrc?p15,0,r0,c1,c0,0
mrc是协处理器命令。
用于读取协处理器中的寄存器的数据到ARM处理器的寄存器里面。
mrc p15,0,r0,c1,c0,0 这句话的意思应该是读协处理器中的寄存器数据到ARM处理器的r0里面。
应该是ARM访问MMU,一般cp15就是MMU。
<MCR|MRC>{cond} p#, <expression1>,Rd,cn,cm{, <expression2>}
MRC 从协处理器移到ARM7寄存器(L=1)
MCR 从ARM7寄存器移到协处理器(L=0)
{cond} 两个字符的条件代码
p# 被请求得协处理器的惟一标识苻
<expression1> 计算一个常量并放到CP Opc域
Rd 是一个表达式计算ARM7有效寄存器序号
cn 和cm 是计算有效协处理器寄存器CRn CRm序号
<expression2> 计算一个常量,并放到CP域
举例:
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6。
内存管理单元(MMU)和协处理器CP15介绍(转)内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌⼊式系统中,存储系统差别很⼤,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使⽤虚拟地址对其进⾏读写;系统中,需引⼊存储保护机制,增强系统的安全性。
为适应如此复杂的存储体系要求,ARM处理器中引⼊了存储管理单元来管理存储系统。
⼀内存管理单元(MMU)概述在ARM存储系统中,使⽤MMU实现虚拟地址到实际物理地址的映射。
为何要实现这种映射?⾸先就要从⼀个嵌⼊式系统的基本构成和运⾏⽅式着⼿。
系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处⾼端启动)处启动,顺序执⾏程序,在程序指针(PC)启动地址,属于⾮易失性存储器空间范围,如ROM、FLASH等。
然⽽与上百兆的嵌⼊式处理器相⽐,FLASH、ROM等存储器响应速度慢,已成为提⾼系统性能的⼀个瓶颈。
⽽SDRAM具有很⾼的响应速度,为何不使⽤SDRAM来执⾏程序呢?为了提⾼系统整体速度,可以这样设想,利⽤FLASH、ROM对系统进⾏配置,把真正的应⽤程序下载到SDRAM中运⾏,这样就可以提⾼系统的性能。
然⽽这种想法⼜遇到了另外⼀个问题,当ARM处理器响应异常事件时,程序指针将要跳转到⼀个确定的位置,假设发⽣了IRQ中断,PC将指向0x18(如果为⾼端启动,则相应指向0vxffff_0018处),⽽此时0x18处仍为⾮易失性存储器所占据的位置,则程序的执⾏还是有⼀部分要在FLASH或者ROM中来执⾏的。
那么我们可不可以使程序完全都SDRAM中运⾏那?答案是肯定的,这就引⼊了MMU,利⽤MMU,可把SDRAM的地址完全映射到0x0起始的⼀⽚连续地址空间,⽽把原来占据这⽚空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。
ARM中MMU之地址转换第一次发帖略微有点激动,有不足的地方还请各位大神指教。
最近看了看mmu,找了好多资料,看了好多博文终于稍微清楚了一点,现在我把自己理解的内容总结一下:首先我来说一下MMU的作用,MMU就是负责虚拟地址(virtual address)转化成物理地址(physical address)。
下面我来说一下ARM CPU上的地址转换过程涉及三个概念:虚拟地址(VA)(CPU 内核对外发出VA),变换后的虚拟地址(MVA)(VA被转换为MVA供cache和MMU使用,在此将MVA转换为PA),物理地址(PA)(最后使用PA读写实际设备)。
(1)CPU看到的用到的只是VA,CPU不管VA最终是怎样到PA的;(2)而cache、MMU也是看不到VA的,它们使用的是MVA(VA到MVA的转换是由硬件自动完成的);(3)实际设备看不到VA、MVA,读写设备使用的是PA物理地址。
前期的铺垫基本完成,接下来进入重点。
在此过程中要用到以下两个必备的东西:1、 cp15协处理器的c2寄存器(这个里面的东西需要程序员自己装载)2、虚拟地址MVA。
接下来我说以下mmu对虚拟地址到物理地址的转化过程。
1、无论进行那种有效转换都必须进行一级页表的转换,所以我们先去产生一级页表。
产生一级页表经过以下步骤a) 由协处理器CP15中的寄存器C2(高18位,即[31:14]为转换表基地址,低14位为0)为一级转换表基地址,即TTB该地址指向了一个2^14=16KB大小的存储区,即一级转换表。
b) 将MVA的高12位,即位[31:20]作为一级转换表的地址索引,因此一级转换表具有2^12=4096项,这4096项的地址为32位,最高的18位[31:14]为寄存器C2的高18位,中间12位为MVA的高12位[31:20],最低2位为0b00。
这4096项中的内容称为一级描述符。
至此一级页表产生完毕。
2、 mmu拿到一级描述符首先看它的后两位也就是bits[1:0],根据这两位的取值mmu会进入不同的转换模式,这两位会出现下面四种取值。
关于ARM9协处理器CP15及MCR和MRC指令在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15包含16个32位的寄存器,其编号为0~15。
访问CP15寄存器的指令MCR ARM寄存器到协处理器寄存器的数据传送MRC 协处理器寄存器到ARM寄存器的数据传送MCR指令和MRC指令只能在处理器模式为系统模式时执行指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。
MCR指令MCR指令将ARM处理器的寄存器中的数据传送到协处理器寄存器中。
如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。
指令语法格式MCR{<cond>} <p>,< opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}MCR{<cond>} p15,0,<Rd>,<CRn>,<CRm>{,<opcode_2>}其中,<cond>为指令执行的条件码。
当<cond>忽略时指令为无条件执行。
< opcode_1>为协处理器将执行的操作的操作码。
对于CP15协处理器来说,< opcode_1>永远为0b000,当< opcode_1>不为0b000时,该指令操作结果不可预知。
<Rd>作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中。
<CRn>作为目标寄存器的协处理器寄存器,其编号可能是C0,C1,…,C15。
<CRm>和<opcode_2>两者组合决定对协处理器寄存器进行所需要的操作,如果没有指定,则将为<CRm>为C0,opcode_2为0,否则可能导致不可预知的结果。
嵌⼊式复习题嵌⼊式系统原理与设计第⼀章嵌⼊式系统概述1、什么是嵌⼊式系统?嵌⼊式系统和普通⼈的⽣活⾮常紧密,如⽇常⽣活中使⽤的⼿机、微波炉、有线电视机顶盒等,都属于嵌⼊式系统。
与通常使⽤的PC机相⽐,嵌⼊式系统的形式变化多样、体积⼩,可以灵活地适应各种设备的需求。
因此,可以把嵌⼊式系统理解为⼀种为特定设备服务的,软件硬件可裁剪的计算机系统。
嵌⼊式系统的英⽂名称是Embedded System。
⽬前被我国科学家普遍认同的定义是:嵌⼊式系统是以应⽤为中⼼,以计算机技术为基础,软硬件可裁减,对功能、可靠性、成本、体积、功耗要求严格的专⽤计算机系统。
2、嵌⼊式系统具有哪些特点?嵌⼊式系统通常是⾯向特定应⽤的嵌⼊式CPU,与通⽤型的最⼤不同就是嵌⼊式CPU⼤多⼯作在为特定⽤户群设计的系统中,执⾏的是带有特定要求的预先定义的任务,如实时性、安全性、可⽤性等。
它通常具有低功耗、体积⼩、集成度⾼等特点,能够把通⽤CPU中许多由板卡完成的任务集成在芯⽚内部,从⽽有利于嵌⼊式系统设计趋于⼩型化,移动能⼒⼤⼤增强,跟⽹络的耦合也越来越紧密。
嵌⼊式系统是将先进的计算机技术、半导体技术和电⼦技术与各个⾏业的具体应⽤相结合的产物。
这⼀点就决定了它必然是⼀个技术密集、资⾦密集、⾼度分散、不断创新的知识集成系统;嵌⼊式系统的硬件和软件都必须⾼效率地设计,量体裁⾐、去除冗余,⼒争在同样的硅⽚⾯积上实现更⾼的性能,这样才能在具体应⽤中对处理器的选择更具有竞争⼒。
由于嵌⼊式系统通常需要进⾏⼤量⽣产,所以单个的成本节约,能够随着产量进⾏成百上千的放⼤。
3、嵌⼊式系统与通⽤计算机相⽐有哪些区别?嵌⼊式系统通常是⾯向特定应⽤的嵌⼊式CPU,与通⽤型的最⼤不同就是嵌⼊式CPU⼤多⼯作在为特定⽤户群设计的系统中,执⾏的是带有特定要求的预先定义的任务,如实时性、安全性、可⽤性等。
它通常具有低功耗、体积⼩、集成度⾼等特点,能够把通⽤CPU中许多由板卡完成的任务集成在芯⽚内部,从⽽有利于嵌⼊式系统设计趋于⼩型化,移动能⼒⼤⼤增强,跟⽹络的耦合也越来越紧密。
ARM的CP15协处理器的寄存器访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:ARM7处理器的主标识符寄存器编码格式如下所示:ARM7之前处理器的主标识符寄存器编码格式如下所示:控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:cache容量字段bits[8: 6]的含义如下所示:cache相联特性字段bits[5: 3]的含义如下所示:cache块大小字段bits[1: 0]的含义如下所示:•CP15的寄存器C1访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中mcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中CP15中的寄存器C1的编码格式及含义说明如下:•CP15的寄存器C2CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。
其编码格如下所示:mcr p15, 0, <rd>, <c7>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能•CP15中的寄存器C8CP15的C8寄存器用来控制清除TLB的内容,是只写寄存器,读操作将产生不可预知的后果。
访问CP15的C8寄存器的指令格式如下所示:mcr p15, 0, <rd>, <c8>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能,见第4.2节•CP15中的寄存器C9CP15的C9寄存器用于控制cache内容锁定。
内存的基本单位是字节(BYTE)。
每个字节是8个二进制位, 所以每个字节能表示的最大的数是11111111, 即十进制的255。
一般来说, 用十六进制比较方便, 因为每4个二进制位刚好等于1个十六进制位, 11111111b = 0xFF。
内存中的字节是连续存放的, 两个字节构成一个字(WORD), 两个字构成一个双字(DWORD)。
BIG Endian 和 Little Endian(small endian)模式的区别谈到字节序的问题,必然牵涉到两大CPU派系z Motorola的PowerPC系列CPU:采用big endian 方式存储数据,低地址存放最高有效字节(MSB)z Intel的x86系列CPU: 采用little endian 方式存储数据,低地址存放最低有效字节(LSB) 举例说明:十六进制数803E7D0C, 每两位是一个字节,z Intel系列中内存中的形式: 0C 7D 3E 80。
z Motorola系列中则是正常形式80 3E 7D 0C。
用文字说明可能比较抽象,下面用图像加以说明。
比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:Big Endian低地址高地址----------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 12 | 34 | 56 | 78 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Little Endian低地址高地址----------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 78 | 56 | 34 | 12 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+所有网络协议也都是采用big endian方式来传输数据的。
嵌入式技术工程师中级证书考试考前练习题(一)一、选择题(单选题15 道,每题1 分;多选题15 道每题2 分)1. 当Vi 编辑器处于命令行模式时,下列命令叙述错误的是()。
A.按[0]:移动到文章的开头B.按[G]:移动到光标所在行的“行尾”C.按[w]:光标跳到下个字的开头D.按[e]:光标跳到下个字的字尾2. 编写linux 驱动程序,若想动态分配连续的物理内存应该使用的函数是()。
A.kmalloc()B.malloc()C.vmalloc()D.new()3. 在makefile 中对变量赋值,若希望定义的变量是立即变量(即定义时它的值就已经确定了),应选择的操作符是()。
A. =B.?=C.:=D. +=4. 已知makefile 中有函数:$(filter %.c %.s ,foo.c bar.c baz.s ugh.ha.out),则执行后的结果为()。
A.foo.c baz.s ugh.hB.bar.c ugh.h a.outC.baz.s ugh.h a.outD.foo.c bar.c baz.s5. 使用gdb 调试程序,若希望某个表达式的值发生改变或被读取时立即停止程序的运行,应使用的命令是()。
A.watchB.rwatchC.awatchD.info watchpoints6.下列ARM 处理器异常处理模式中优先级最高的是()。
A.复位B.未定义指令C.软件中断D.预取中止7. RISC 型处理器都是采用()结构。
A. READ/WRITEB. LOAD/STOREC. PIPELINED. 哈佛结构8. 下列对ARM 协处理器CP15 的各寄存器的作用叙述错误的是()。
A.R6:故障地址寄存器B.R7:快存Cache 操作C.R8:变换后备缓冲器TLB 操作D.R9:进程ID 映像9. ARM 系统中,协处理器应答信号CPA 和CPB 都处于低电压,表示()。
A. 协处理器可以从ARM 处理器内核接收一条协处理器指令,并立即开始执行B. 协处理器不存在,不能接收正在译码的指令C. 协处理器可以从ARM 处理器内核接收一条协处理器指令,但目前不能处理D. 无效响应10. 对指令LDRD R6,[R11]解析正确的是()。
ARM920T的CP15协处理器ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,本节首先从总体上介绍MMU、Cache和CPU核是如何协同工作的,后面两节分别讲解MMU和Cache的细节。
三星公司的S3C2410是一种很常见的采用ARM920T的芯片,涉及到具体的芯片时我们以S3C2410为例。
以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]),和CPU核的r0到r15寄存器一样,协处理器寄存器也是用0到15来编号,在指令中用4个bit来表示寄存器编号,有些协处理器寄存器有影子寄存器,这种情况下对同一个编号的寄存器使用不同的选项读或者写实际上访问的是不同的寄存器,后文用到某个寄存器时会详细说明它的功能。
表1. CP15协处理器的寄存器列表对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。
对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。
下图是协处理器的指令格式(摘自[S3C2410用户手册])。
图8. 协处理器指令格式和其它ARM指令一样,Cond是条件码,bit 20是L位,表示该指令是读还是写,如果L=1就表示Load,从外面读到CPU核中,也就是mrc指令,如果L=0就表示Store,也就是mcr指令。
[11:8]这四个位是协处理器编号,CP15的编号是15,因此是4个1。
CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4个位。
对于CP15协处理器,规定opcode1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。
虽然这里介绍了协处理器的寄存器编号和相关指令,但读者只需了解对协处理器是这样进行操作的就可以了,我们的重点是讲解MMU和Cache的基本概念,具体各种操作的指令该怎么写可以参考[S3C2410用户手册]。
ARM920T的MMU与Cache目录虚拟地址和物理地址的概念虚拟内存管理ARM920T的CP15协处理器MMUCache操作MMU和Cache的内核启动代码参考资料索引虚拟地址和物理地址的概念CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU (Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。
图 1. 物理地址示意图如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。
图 2. 虚拟地址示意图MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU 通常一页为4K。
例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。
虚拟内存管理现代操作系统充分利用MMU提供的VA到PA的映射机制来做内存管理,以下称为虚拟内存管理(Virtual Memory Management)。
首先看下面的例子:例 1. 进程的地址空间这是bash进程的虚拟地址空间,32位CPU的虚拟地址空间是4GB,也就是0x0000 0000-0xffff ffff,该进程占用的地址范围近似为0x0000 0000-0xbfff ffff,地址范围0xc000 0000-0xffff ffff由内核占用,用户进程不允许访问。
1、智能物联网工程师群,免费共享100G学习资料2、3、qq群号码:5384355434、5、欢迎大家加入交流经验,互相学习分享6、cortex-A8 中只有CP14和CP15 两种协处理器。
CP14用来测试(test),CP15用作系统控制.7、cortex-A8中协处理器CP15是协助处理器做管理工作,属于A8内部。
8、cortex-A8的通用寄存器和状态寄存器属于A8内部的32位存储器。
9、跳转指令BL只能实现前后32M的小范围的跳转,使用“LDR PC,..”伪指令可以实现大范围的跳转。
大范围4G10、汇编中用#注释(F)。
@ 错误,是@符号注释11、根据ATPCS标准,子程序间通过寄存器R0、R1、R2、R3来传递参数,如果参数多余4个,则多出的部分用堆栈传递,返回值用R0传递。
12、寄存器R13用作数据栈指针,记作SP。
13、寄存器R14称为链接寄存器,记作LR,它用于保存子程序的返回地址。
14、寄存器R15是程序计数器,记作PC,不能用作其它用途。
15、汇编的优点是效率高,体积小。
(对)16、S5PV210内部对模块的管理是分区域管理的,分为那几个区域()、()、()。
不清楚答案,查询得知,S5PV210由ARM内核、系统外围设备、存储器子系统、多媒体加速、电源管理、连接性模块等模块组成,p4217、S5PV210内部有三条总线,他们是APB总线,频率100兆以下、AHB总线,200-100兆、AXI总线。
18、S5PV210的AHB总线的工作频率范围是200M~100M。
19、S5PV210的APB总线的工作频率范围是100M以下。
20、CortexA8的工作频率高达(1GHZ),定时器的PLCK的值是(66MHZ)。
21、S5PV210内部有( 5 )个定时器,其中有PWM引脚的有定时器(T0 T1 T2T3 ),有死区功能的有定时器(T0 T1 )。
22、占空比就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比。
嵌⼊式试题集(含答案)1、ARM微处理器有 7种⼯作模式,它们分为两类⾮特权模式、特权模式。
其中⽤户模式属于⾮特权模式2、ARM⽀持两个指令集, ARM核因运⾏的指令集不同,分别有两个状态ARM 、Thumb,状态寄存器CPSR的 T 位反映了处理器运⾏不同指令的当前状态3、ARM核有多个寄存器,其中⼤部分⽤于通⽤寄存器,有⼩部分作为专⽤寄存器,R15 寄存器⽤于存储PC,R13通常⽤来存储SP 。
ARM处理器有两种总线架构,数据和指令使⽤同⼀接⼝的是冯诺依曼,数据和指令分开使⽤不同接⼝的是哈佛结构4、ARM微处理器复位后,PC的地址通常是 0x0 ,初始的⼯作模式是Supervisor 。
5、ARM微处理器⽀持虚拟内存,它是通过系统控制协处理器CP15 和MMU(存储管理部件)来进⾏虚拟内存的存储和管理。
当系统发⽣数据异常和指令领取异常时,异常处理程序透过嵌⼊式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页⾯,以保证程序正常执⾏。
6、编译链接代码时,有两种存储代码和数据的字节顺序,⼀种是⼩端对齐,另⼀种是⼤端对齐。
7、构建嵌⼊式系统开发环境的⼯具链有多种,其中开放源码的⼯具链是GNU⼯具链,ARM公司提供的⼯具链是ADS⼯具链计算机有CISC和RISC两种类型,以ARM微处理器为核⼼的计算机属于 RISC类型,其指令长度是定长的8、⽬前使⽤的嵌⼊式操作系统主要有哪些?请举出六种较常⽤的。
Windows CE/Windows Mobile、VxWork、Linux、uCos、Symbian、QNX任选六9、Boot Loader在嵌⼊式系统中主要起什么作⽤?完成哪些主要的⼯作?答:Boot Loader是在嵌⼊式系统复位启动时,操作系统内核运⾏前,执⾏的⼀段程序。
通过Boot Loader,初始化硬件设备,建⽴内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
ARM寄存器组成R8~R14、SPSR寄存器则被切换到各个模式下的私有寄存器组上,不同的模式下可以访问相应的私有寄存器。
表1显示了在每种模式下,哪些寄存器是有效的(阴影部分的寄存器都是私有寄存器)。
表1ARM状态下的寄存器组织结构从表1中我们可以看出:☆R0~R7、R15、CPSR寄存器组在任何模式下都是共用的,可访问的;☆R13、R14寄存器在用户(uer)和系统(y)模式下共用一套;其他模式(管理(vc)、中止(abt)、未定义(und)、中断(irq)、快中断(fiq)模式)下都具有两个私有寄存器R13和R14。
这就使得这些模式中的每一种模式都具有各自的堆栈寄存器指针R13和链接寄存器R14,分别用于堆栈处理和异常退出;☆SPSR寄存器可用于保存CPSR的值,在用户和系统模式下不能访问,在其他模式下都有私有的SPSR寄存器。
表1中第二列列举了寄存器在汇编语言中的名称,其中括号中的内容是别称。
下面我们对这些寄存器的功能进行介绍。
1、一般通用寄存器R0~R12寄存器R0~R12为保存数据或地址值的一般通用寄存器。
其中寄存器R0~R7为未分组的寄存器,R8~R12为分组寄存器。
未分组的寄存器意味着对于任何处理器模式,他们中的每一个都对应于相同的32位物理寄存器。
他们是完全通用的寄存器,分组寄存器意味着同一个寄存器名对应多个物理寄存器,具体所对应的物理寄存器取决于当前的处理器模式。
参照表2-1,寄存器R8~R12有两个分组物理寄存器。
一组用于除FIQ模式之外的所有寄存器模式(R8~R12),另一组用于FIQ模式(R8_fiq~R12_fiq)。
、寄存器R8~R12在ARM体系结构中没有特定的用途。
不过对于那些只使用R8~R14来说就足够处理的简单的中断,FIQ所单独使用的这些寄存器可实现快速的中断处理。
2、堆栈指针R13寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器,见表2-1。
一个用于用户和系统模式,其余5个分别用于5种异常模式。
ARM处理器中CP15协处理器的寄存器本章和第5章的内容都与ARM处理器中CP15协处理器的寄存器有密切关系,所以我们这里先介绍一下CP15寄存器以及访问CP15寄存器的汇编指令。
4.1.1 访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:31 28 27 24 23 21 219 16 15 12 11 8 7 5 4 3 0cond 1 1 1 0 opcode_1 L cr n rd 1 1 1 1 opcode_21 crm说明::协处理器行为操作码,对于CP15来说,永远为0b000,否则结果未知。
:不能是r15/pc,否则,结果未知。
:作为目标寄存器的协处理器寄存器,编号为C0~C15。
:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm设置为c0,否则结果未知。
:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略或者将其设置为0,否则结果未知。
指令说明语法格式mcr将ARM处理器的寄存器中的数据写到CP15中的寄存器中mcr{} p15, , , , , {}mrc将CP15中的寄存器中的数据读到ARM处理器的寄存器中mcr{} p15, , , , , {}4.1.2 CP15寄存器介绍CP15的寄存器列表如表4-1所示。
表4-1 ARM处理器中CP15协处理器的寄存器寄存器编号基本作用在MMU中的作用在PU中的作用0 ID编码(只读)ID编码和cache类型1 控制位(可读写)各种控制位2 存储保护和控制地址转换表基地址Cachability的控制位3 存储保护和控制域访问控制位Bufferablity控制位4 存储保护和控制保留保留5 存储保护和控制内存失效状态访问权限控制位6 存储保护和控制内存失效地址保护区域控制7 高速缓存和写缓存高速缓存和写缓存控制8 存储保护和控制TLB控制保留9 高速缓存和写缓存高速缓存锁定10 存储保护和控制TLB锁定保留11 保留12 保留13 进程标识符进程标识符14 保留15 因不同设计而异因不同设计而异因不同设计而异CP15的寄存器C0CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的指定要访问哪个具体物理寄存器,与两个标识符寄存器的对应关系如下所示:opcode_2编码对应的标识符号寄存器0b000 主标识符寄存器0b001 cache类型标识符寄存器其他保留1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:31 24 23 20 19 16 15 4 3由生产商确定产品子编号ARM体系版本号产品主编号处理器版本号位说明位[3: 0] 生产商定义的处理器版本号位[15: 4] 生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7位[19: 16] ARM体系的版本号,可能的取值如下:0x1 ARM体系版本40x2 ARM体系版本4T0x3 ARM体系版本50x4 ARM体系版本5T0x5 ARM体系版本5TE其他由ARM公司保留将来使用位[23: 20] 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[31: 24] 生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I intel公司ARM7处理器的主标识符寄存器编码格式如下所示:31 24 23 22 16 15 4 3由生产商确定 A 产品子编号产品主编号处理器版本号位说明位[3: 0] 生产商定义的处理器版本号位[15: 4] 生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7位[22: 16] 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等续表位说明位[23] ARM7支持下面两种ARM体系的版本号:0x0 ARM体系版本30x1 ARM体系版本4T位[31: 24] 生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I Intel公司ARM7之前处理器的主标识符寄存器编码格式如下所示:31 24 23 22 16 15 4 3由生产商确定 A 产品子编号产品主编号处理器版本号位说明位[3: 0] 生产商定义的处理器版本号位[15: 4] 生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7位[22: 16] 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[23] ARM7支持下面两种ARM体系的版本号:0x0 ARM体系版本30x1 ARM体系版本4T位[31: 24] 生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I intel公司2)cache类型标识符寄存器访问cache类型标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 1 ;将cache类型标识符寄存器C0,1的值读到r0中ARM处理器中cache类型标识符寄存器的编码格式如下所示:31 29 28 25 24 23 12 11 00 0 0 属性字段S 数据cache相关属性指令cache相关属性位说明位[28: 25] 指定控制字段位[24: 0]指定的属性之外的cache的其他属性,详见表4-2位[24] 定义系统中的数据cache和指令cache是分开的还是统一的:0 系统的数据cache和指令cache是统一的;1 系统的数据cache和指令cache是分开的位[23: 12] 定义数据cache的相关属性,如果位[24]为0,本字段定义整个cache的属性位[31: 24] 定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性其中控制字段位[28:25]的含义说明如下:表4-2 cache类型标识符寄存器的控制字段位[28:25]编码cache类型cache内容清除方法cache内容锁定方法0b0000 写通类型不需要内容清除不支持内容锁定0b0001 写回类型数据块读取不支持内容锁定0b0010 写回类型由寄存器C7定义不支持内容锁定0b0110 写回类型由寄存器C7定义支持格式A0b0111 写回类型由寄存器C7定义支持格式B控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:11 9 8 6 5 3 2 1 00 0 0 cache容量cache相联特性M 块大小cache容量字段bits[8: 6]的含义如下所示:编码M=0时含义(单位KB)M=1时含义(单位KB)0b000 0.5 0.750b001 1 1.50b010 2 30b011 4 60b100 8 120b101 16 240b110 32 480b111 64 96cache相联特性字段bits[5: 3]的含义如下所示:编码M=0时含义M=1时含义0b000 1路相联(直接映射)没有cache0b001 2路相联3路相联0b010 4路相联6路相联0b011 8路相联12路相联0b100 16路相联24路相联0b101 32路相联48路相联0b110 64路相联96路相联0b111 128路相联192路相联cache块大小字段bits[1: 0]的含义如下所示:编码cache块大小0b00 2个字(8字节)0b01 4个字(16字节)0b10 8个字(32字节)0b11 16个字(64字节)CP15的寄存器C1访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中mcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中CP15中的寄存器C1的编码格式及含义说明如下:31 16 151413 12 11 10 9 8 7 6 5 4 3 2 1 0附加L4RRV I Z F R S B L D P W C A M位说明M 0:禁止MMU或者PU;1:使能MMU或者PUA 0:禁止地址对齐检查;1:使能地址对齐检查C 0:禁止数据/整个cache;1:使能数据/整个cacheW 0:禁止写缓冲;1:使能写缓冲P 0:异常中断处理程序进入32位地址模式;1:异常中断处理程序进入26位地址模式D 0:禁止26位地址异常检查;1:使能26位地址异常检查L 0:选择早期中止模型;1:选择后期中止模型B 0:little endian;1:big endianS 在基于MMU的存储系统中,本位用作系统保护R 在基于MMU的存储系统中,本位用作ROM保护F 0:由生产商定义Z 0:禁止跳转预测功能;1:使能跳转预测指令I 0:禁止指令cache;1:使能指令cacheV 0:选择低端异常中断向量0x0~0x1c;1:选择高端异常中断向量0xffff0000~ 0xffff001c RR 0:常规的cache淘汰算法,如随机淘汰;1:预测性淘汰算法,如round-robin淘汰算法L4 0:保持ARMv5以上版本的正常功能;1:将ARMv5以上版本与以前版本处理器兼容,不根据跳转地址的bit[0]进行ARM指令和Thumb状态切换:bit[0]等于0表示ARM指令,等于1表示Thumb指令附加:∙CP15的寄存器C2CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。
其编码格如下所示:31一级映射描述符表的基地址(物理地址)∙CP15的寄存器C3CP15中的寄存器C3定义了ARM处理器的16个域的访问权限。
31D1 5 D14D13D12D11D1D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 ∙CP15的寄存器C5CP15中的寄存器C5是失效状态寄存器,编码格式如下所示:31 9 8 7 43 0UNP/SBZP 0 域标识状态标识其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。
状态标识bit[3:0]表示放引起存储访问失效的存储访问类型,该字段含义如表4-3所示(优先级由上到下递减)。