电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>浅谈ARM协处理器CP15

浅谈ARM协处理器CP15

2017-10-17 | rar | 0.4 MB | 次下载 | 1积分

资料介绍

 ARM存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要。ARM存储器系统可以使用简单的平板式地址映射机制(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地址),也可以使用其他技术提供功能更为强大的存储系统。比如:
  · 系统可能提供多种类型的存储器件,如FLASH、ROM、SRAM等;
  · Caches技术;
  · 写缓存技术(write buffers);
  · 虚拟内存和I/O地址映射技术。
  大多数的系统通过下面的方法之一实现对复杂存储系统的管理。
  · 使能Cache,缩小处理器和存储系统速度差别,从而提高系统的整体性能。
  · 使用内存映射技术实现虚拟空间到物理空间的映射。这种映射机制对嵌入式系统非常重要。通常嵌入式系统程序存放在ROM/FLASH中,这样系统断电后程序能够得到保存。但是通常ROM/FLASH与SDRAM相比,速度慢很多,而且基于ARM的嵌入式系统中通常把异常中断向量表放在RAM中。利用内存映射机制可以满足这种需要。在系统加电时,将ROM/FLASH映射为地址0,这样可以进行一些初始化处理;当这些初始化处理完成后将SDRAM映射为地址0,并把系统程序加载到SDRAM中运行,这样很好地满足嵌入式系统的需要。
  · 引入存储保护机制,增强系统的安全性。
  · 引入一些机制保证将I/O操作映射成内存操作后,各种I/O操作能够得到正确的结果。在简单存储系统中,不存在这样问题。而当系统引入了Cache和write buffer后,就需要一些特别的措施。
  在ARM系统中,要实现对存储系统的管理通常是使用协处理器CP15,它通常也被称为系统控制协处理器(System Control Coprocessor)。
  ARM的存储器系统是由多级构成的,每级都有特定的容量和速度。
  图15.1显示了存储器的层次结构。
  ① 寄存器。处理器寄存器组可看作是存储器层次的顶层。这些寄存器被集成在处理器内核中,在系统中提供最快的存储器访问。典型的ARM处理器有多个32位寄存器,其访问时间为ns量级。
  浅谈ARM协处理器CP15
  图15.1 存储器的层次结构
  ② 紧耦合存储器TCM。为弥补Cache访问的不确定性增加的存储器。TCM是一种快速SDRAM,它紧挨内核,并且保证取指和数据操作的时钟周期数,这一点对一些要求确定行为的实时算法是很重要的。TCM位于存储器地址映射中,可作为快速存储器来访问。
  ③ 片上Cache存储器的容量在8KB~32KB之间,访问时间大约为10ns。
  ④ 高性能的ARM结构中,可能存在第二级片外Cache,容量为几百KB,访问时间为几十ns。
  ⑤ DRAM。主存储器可能是几MB到几十MB的动态存储器,访问时间大约为100ns。
  ⑥ 后援存储器,通常是硬盘,可能从几百MB到几个GB,访问时间为几十ms。
  注意TCM和SRAM在技术上相同,但在结构排列上不同;TCM在片上,而SRAM在板上。
  15.1 协处理器CP15
  ARM处理器支持16个协处理器。在程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器的指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理程序中,可以通过软件模拟该硬件操作。比如,如果系统不包含向量浮点运算器,则可以选择浮点运算软件模拟包来支持向量浮点运算。
  CP15,即通常所说的系统控制协处理器(System Control Coprocesssor)。它负责完成大部分的存储系统管理。除了CP15外,在具体的各种存储管理机制中可能还会用到其他的一些技术,如在MMU中除CP15外,还使用了页表技术等。
  在一些没有标准存储管理的系统中,CP15是不存在的。在这种情况下,针对协处理器CP15的操作指令将被视为未定义指令,指令的执行结果不可预知。
  CP15包含16个32位寄存器,其编号为0~15。实际上对于某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的标志位来区分这些物理寄存器。这种机制有些类似于ARM中的寄存器,当处于不同的处理器模式时,某些相同编号的寄存器对应于不同的物理寄存器。
  CP15中的寄存器可能是只读的,也可能是只写的,还有一些是可读可写的。在对协处理器寄存器进行操作时,需要注意以下几个问题。
  · 寄存器的访问类型(只读/只写/可读可写)。
  · 不同的访问引发的不同功能。
  · 相同编号的寄存器是否对应不同的物理寄存器。
  · 寄存器的具体作用。
  15.1.1 CP15寄存器访问指令
  通常对协处理器CP15的访问使用以下两种指令。
  MCR:将ARM寄存器的值写入CP15寄存器中;
  MRC:将CP15寄存器的值写入ARM寄存器中。
  注意通过协处理器访问指令CDP、LDC和STC指令对协处理器CP15进行访问将产生不可预知的结果。
  其中,CDP为协处理器数据操作指令,这个指令初始化一些与协处理器相关的操作;
  LDC为一个或多个字的协处理器数据读取指令,此指令从存储器读取数据到指定的协处理器中;
  STC为一个或多个32位字的协处理器数据写入指令,此指令初始化一个协处理器的写操作,从给定的协处理器把数据传送到存储器中。
  指令MCR和MRC指令访问CP15寄存器使用通用语法。
  语法格式为:
  MCR{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
  MRC{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
  其中:
  《cond》为指令的执行条件。当《cond》条件域为空时,指令无条件执行;
  《opcode1》在标准的MRC指令中,为协处理器的《opcode1》,即操作数1。对于CP15来说,此操作数恒为0,即0b000。当针对CP15的MRC指令中《opcode1》不为0时,指令的操作结果不可预知;
  《Rd》为ARM寄存器,在ARM和协处理器交换数据时使用。在MRC指令中作为目的寄存器,在MCR中作为源寄存器。
  注意r15不能作为ARM寄存器出现在MRC或MCR指令中,如果r15作为《Rd》出现在这里,那么指令的执行结果不可预知。
  《CRn》是CP15协处理器指令中用到的主要寄存器。在MRC指令中为源寄存器,在MCR中为目的寄存器。CP15协处理器的寄存器c0、c1、…、c15均可出现在这里。
  《CRm》是附加的协处理器寄存器,用于区分同一个编号的不同物理寄存器和访问类型。当指令中不需要提供附加信息时,将《CRm》指定为C0,否则指令的操作结果不可预知。
  《opcode2》提供附加信息,用于区分同一个编号的不同物理寄存器,当指令中没有指定附加信息时,省略《opcode2》或者将其指定为0,否则指令的操作结果不可预知。
  MCR和MRC指令只能操作在特权模式下,如果处理器运行在用户模式,指令的执行结果不可预知。
  注意在用户模式下,如果要访问系统控制协处理器,通常的做法是由操作系统提供SWI软中断调用来完成系统模式的切换。由于不同型号的ARM处理器对此管理差别很大,所以建议用户在应用时将SWI作为一个独立的模块来管理并向上提供通用接口,以屏蔽不同型号处理器之间的差异。
  例15.1给出了一个典型的利用SWI进行模式切换的例子。
  【例15.1】
  典型的在SWI中进行模式切换的例子。利用此例,调用SWI 0来完成系统模式切换。
  EHT_SWI
  LDR sp,=EHT_Exception_Stack ;更新SWI堆栈指针
  ADD sp,sp,#EXCEPTION_SIZE ;得到栈顶指针
  STMDB sp!,{r0-r2,lr} ;保存程序中用到的寄存器
  MRS r0,SPSR ;得到SPSR
  STMDB sp!,{r0} ;保持SPSR
  LDR r0,[lr,#-4] ;计算SWI指令地址
  BIC r0,r0,#0xFF000000 ;提取中断向量号
  CMP r0,#MAX_SWI ;检测中断向量范围
  LDRLS pc,[pc,r0,LSL #2] ;如果在范围内,跳转到软中断向量表
  B EHT_SWI_Exit ;为定义的SWI指令出口
  EHT_Jump_Table
  DCD EHT_SU_Switch
  DCD EHT_Disable_Interrupts
  ;*********************************************************************************
  ;用户可在此添加更多的自定义软中断,在此SWI0作为系统保留的软中断,调用例程EHT_SU_Switch,来进行模式切换
  ;*********************************************************************************
  EHT_SU_Switch
  MMU_DISABLE ;转换前禁用MMU
  LDMIA sp!,{r0} ;从堆栈中取出SPSR
  BIC r0,r0,#MODE_MASK ;清除模式位
  ORR r0,r0,#SYS_MODE ;设置程序状态字的supper模式位
  STMDB sp!,{r0} ;从新将SPSR放入堆栈
  B EHT_SWI_Exit
  EHT_Disable_Interrupts
  LDMIA sp!,{r0} ;从堆栈中读出SPSR
  ORR r0,r0,#LOCKOUT ;禁止中断
  STMDB sp!,{r0} ;存储SPSR到中断
  ; B EHT_SWI_Exit
  EHT_SWI_Exit
  LDMIA sp!,{r0} ;从堆栈中读出SPSR
  MSR SPSR_cf,r0 ;将SPSR放入SPSR_cf
  LDMIA sp!,{r0-r2,pc}^ ;寄存器出栈并返回
  END
  15.1.2 CP15中的寄存器
  表15.1给出了CP15主要寄存器的功能和作用。
  表15.1 CP15寄存器
  寄存器编号基 本 作 用特 殊 用 途
  0ID编号(只读)ID和Cache类型
  1控制位各种控制位
  2存储器保护和控制MMU:地址转换表基地址
  PU:Cache属性设置
  3内存保护和控制MMU:域访问控制
  PU:写缓存控制
  4内存保护和控制保留
  5内存保护和控制MMU:错误状态
  PU:访问权限控制
  6内存保护和控制MMU:错误状态
  PU:保护区域控制
  7Cache和写缓存Cache和写缓存控制
  8内存保护和控制MMU:TLB控制
  PU:保留
  9Cache和写缓存Cache锁定
  续表
  寄存器编号基 本 作 用特 殊 用 途
  10内存保护和控制MMU:TLB锁定
  PU:保留
  11保留保留
  12保留保留
  13进程ID进程ID
  14保留保留
  15芯片生产厂商定义芯片生产厂商定义
  15.1.3 寄存器c0
  寄存器c0包含的是ARM本身或芯片生产厂商的一些标识信息。当使用MRC指令读c0寄存器时,根据第二个操作码opcode2的不同,读出的标识符也是不同的。操作码与标识符的对应关系如表15.2所示。寄存器c0是只读寄存器,当用MCR指令对其进行写操作时,指令的执行结果不可预知。
  表15.2 操作码和标识符的对应关系
  操作码opcode2对应的标识符寄存器
  0b000主标识符寄存器
  0b001Cache类型寄存器
  其他保留
  在操作码opcode2的取值中,主标识符(opcode2=0)是强制定义的,其他标识符由芯片的生产厂商定义。如果操作码opcode2指定的值未定义,指令将返回主标识符。其他标识符的值应与主标识符的值不同,可以由软件编程来实现,同时读取主标识符和其他标识符,并将两者的值进行比较。如果两个标识符值相同,说明未定义该标识符;如果两个标识符值不同,说明定义了该标识符,并且得到该标识符的值。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费