DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1238|回复: 0
打印 上一主题 下一主题

[待整理] ARM存储器之:协处理器CP15

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-10 07:23:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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量级。
       

        图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寄存器
                                                                        寄存器编号
                       
                                                                        基 本 作 用
                       
                                                                        特 殊 用 途
                       
                                                                        0
                       
                                                                        ID编号(只读)
                       
                                                                        ID和Cache类型
                       
                                                                        1
                       
                                                                        控制位
                       
                                                                        各种控制位
                       
                                                                        2
                       
                                                                        存储器保护和控制
                       
                                                                        MMU:地址转换表基地址
                                                                        PU:Cache属性设置
                       
                                                                        3
                       
                                                                        内存保护和控制
                       
                                                                        MMU:域访问控制
                                                                        PU:写缓存控制
                       
                                                                        4
                       
                                                                        内存保护和控制
                       
                                                                        保留
                       
                                                                        5
                       
                                                                        内存保护和控制
                       
                                                                        MMU:错误状态
                                                                        PU:访问权限控制
                       
                                                                        6
                       
                                                                        内存保护和控制
                       
                                                                        MMU:错误状态
                                                                        PU:保护区域控制
                       
                                                                        7
                       
                                                                        Cache和写缓存
                       
                                                                        Cache和写缓存控制
                       
                                                                        8
                       
                                                                        内存保护和控制
                       
                                                                        MMU:TLB控制
                                                                        PU:保留
                       
                                                                        9
                       
                                                                        Cache和写缓存
                       
                                                                        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
                       
                                                                        主标识符寄存器
                       
                                                                        0b001
                       
                                                                        Cache类型寄存器
                       
                                                                        其他
                       
                                                                        保留
                       
         
        在操作码opcode2的取值中,主标识符(opcode2=0)是强制定义的,其他标识符由芯片的生产厂商定义。如果操作码opcode2指定的值未定义,指令将返回主标识符。其他标识符的值应与主标识符的值不同,可以由软件编程来实现,同时读取主标识符和其他标识符,并将两者的值进行比较。如果两个标识符值相同,说明未定义该标识符;如果两个标识符值不同,说明定义了该标识符,并且得到该标识符的值。
         
        (1)主标识符寄存器
        当协处理器指令对CP15进行操作,并且操作码opcode=2时,处理器的主标识符将被读出。从主标识符中,可以确定ARM体系结构的版本型号。同时也可以参考由芯片生产厂商定义的其他标识符,来获得更详细的信息。
         
        在主标识信息中,bit[15:12]区分了不同的处理器版本:
        ·  如果bit[15:12]为0x0,说明处理器是ARM7之前的处理器;
        ·  如果bit[15:12]为0x7,说明处理器为ARM7处理器;
        ·  如果bit[15:12]为其他值,说明处理器为ARM7之后的处理器。
         
        对于ARM7之后的处理器,其标识符的编码格式如图15.2所示。
         
        其中各部分的编码含义说明如下。
        bit[3:0]:包含生产厂商定义的处理器版本型号。
        bit[15:4]:生产厂商定义的产品主编号,可能的取值为0x0~0x7。
        bit[19:16]:ARM体系的版本号,可能的取值如表15.3(其他值由ARM公司保留将来使用)所示。
       

        图15.2  ARM7之后处理器标识符编码

         
        表15.3 bit[19:16]与ARM版本号
                                                                        可能的取值
                       
                                                                        版  本  号
                       
                                                                        0x1
                       
                                                                        ARM体系版本4
                       
                                                                        0x2
                       
                                                                        ARM体系版本4T
                       
                                                                        0x3
                       
                                                                        ARM体系版本5
                       
                                                                        0x4
                       
                                                                        ARM体系版本5T
                       
                                                                        0x5
                       
                                                                        ARM体系版本5TE
                       
         
        bit[23:20]:生产厂商定义的产品子编号。当产品主编号相同时,使用子编号区分不同的产品子类,如产品中不同的cache的大小。
         
        bit[31:24]:生产厂商的编号现已定义的如表15.4所示。其他的值ARM公司保留将来使用。
         
        表15.4 bit[31:24]值与ARM生产厂商
                                                                        可能的取值
                       
                                                                        ARM芯片生产厂商
                       
                                                                        0x41(A)
                       
                                                                        ARM公司
                       
                                                                        0x44(D)
                       
                                                                        Digital Equipment
                       
                                                                        0x69(i)
                       
                                                                        Intel公司
                       
         
        对于ARM7系统的处理器,其主标识符的编码如图15.3所示。
       

        图15.3  ARM7处理器标识符编码

         
        其中各部分的含义说明如下。
        bit[3:0]:包含生产厂商定义的处理器版本型号。
        bit[15:4]:生产厂商定义的产品主编号,其最高4位的值为0x7。
        bit[22:16]:生产商定义的产品子编号。当产品的主编号相同时,使用子编号区分不同的产品子类,如产品中不同的产品子类、不同产品中高速缓存的大小。
        bit[23]:ARM7处理器支持下面两种ARM体系的版本号。0x0代表ARM体系版本3;0x1代表ARM体系版本4T。
        bit[31:24]:生产厂商的编号已定义的如表15.5所示,其他的值ARM公司保留将来使用。
         
        表15.5 bit[31:24]值与ARM生产厂商
                                                                        可能的取值
                       
                                                                        ARM芯片生产厂商
                       
                                                                        0x41(A)
                       
                                                                        ARM公司
                       
                                                                        0x44(D)
                       
                                                                        Digital Equipment
                       
                                                                        0x69(i)
                       
                                                                        Intel公司
                       
         
        对于ARM7系统的处理器,其主标识符的编码如图15.4所示。
       

        图15.4  ARM7之前处理器标识符编码

         
        其中各部分的含义说明如下。
        bit[3:0]:包含生产厂商定义的处理器版本型号。
        bit[31:4]:处理器标识符及其含义如表15.6所示。
         
        表15.6 ARM之后处理器标识符与含义
                                                                        处理器标识符
                       
                                                                        含    义
                       
                                                                        0x4156030
                       
                                                                        ARM3(体系版本2)
                       
                                                                        0x4156060
                       
                                                                        ARM600(ARM体系版本3)
                       
                                                                        0x4156061
                       
                                                                        ARM610(ARM体系版本3)
                       
                                                                        0x4156062
                       
                                                                        ARM620(ARM体系版本3)
                       
         
        (2)Cache类型标识符寄存器
        如前所述,对于指令MRC来说,当协处理器寄存器为r0,而第二操作数opcode2为0b001时,指令读取值为Cache类型,即可以用下面的指令将处理器的Cache类型标识符寄存器的内容读取到寄存器r0中。
         
        MRC  P15,0,r0,c0,c0,1
         
        Cache类型标识符定义了关于Cache的信息,具体内容如下所述。
         
        ·  系统中的数据Cache和指令Cache是分开的还是统一的。
        ·  Cache的容量、块大小以及相联特性。
        ·  Cache类型是直(write-through)写还是回写(write-back)。
        ·  对于回写(write-back)类型的Cache如何有效清除Cache内容。
        ·  Cache是否支持内容锁定。
        Cache类型标识符寄存器各控制字段的含义编码格式如图15.5所示。
       

        图15.5  Cache属性寄存器标识符编码格式

         
        其中各控制字段的含义说明如下。
        属性字段(ctype):指定没有在S位、数据Cache相关属性位、指令Cache相关属性类中指定的属性,其具体编码参见表15.7。
         
        表15.7 Cache类型标识符寄存器属性字段含义
                                                                        编    码
                       
                                                                        Cache类型
                       
                                                                        Cache内容清除方法
                       
                                                                        Cache内容锁定方法
                       
                                                                        0b0000
                       
                                                                        直写
                       
                                                                        不需要内容清除
                       
                                                                        不支持
                       
                                                                        0b0001
                       
                                                                        回写
                       
                                                                        数据块读取
                       
                                                                        不支持
                       
                                                                        0b0010
                       
                                                                        回写
                       
                                                                        由寄存器定义
                       
                                                                        不支持
                       
                                                                        0b0110
                       
                                                                        回写
                       
                                                                        由寄存器定义
                       
                                                                        支持格式A,见后
                       
                                                                        0b0111
                       
                                                                        回写
                       
                                                                        由寄存器定义
                       
                                                                        支持格式B,见后
                       
         
        S位:定义系统中的数据Cache和指令Cache是分开的还是统一的。如果S=0,说明指令Cache和数据Cache是统一的,如果S=1,则说明数据Cache和指令Cache是分离的。
         
        数据Cache相关属性:定义了数据Cache容量、行大小和相联(associativity)特性(如果S&ne;0)。
         
        指令Cache相关属性:定义了指令Cache容量、行大小和相联(associativity)特性(如果S&ne;0)。
         
        数据Cache相关属性和指令Cache相关属性分别占用控制字段[23:12]和[11:0],它们的结构相同,图15.6以指令Cache为例,显示了编码结构。
       

        图15.6  指令Cache编码结构

         
        其中,各部分的含义说明如下。
        bit[11:9]:保留用于将来使用。
        bit[8:6]:定义Cache的容量,其编码格式及含义如表15.8所示。
         
        表15.8 类型标识符寄存器控制字段bit[8:6]含义
                                                                        编    码
                       
                                                                        M=0时的含义
                       
                                                                        M=1时的含义
                       
                                                                        0b000
                       
                                                                        0.5KB
                       
                                                                        0.75KB
                       
                                                                        0b001
                       
                                                                        1KB
                       
                                                                        1.5KB
                       
                                                                        0b010
                       
                                                                        2KB
                       
                                                                        3KB
                       
                                                                        0b011
                       
                                                                        4KB
                       
                                                                        6KB
                       
        续表
                                                                        编    码
                       
                                                                        M=0时的含义
                       
                                                                        M=1时的含义
                       
                                                                        0b100
                       
                                                                        8KB
                       
                                                                        12KB
                       
                                                                        0b101
                       
                                                                        16KB
                       
                                                                        24KB
                       
                                                                        0b110
                       
                                                                        32KB
                       
                                                                        48KB
                       
                                                                        0b111
                       
                                                                        64KB
                       
                                                                        96KB
                       
         
        bit[1:0]:定义Cache的块大小,其编码格式及含义如表15.9所示。
        表15.9 类型标识符寄存器控制字段bit[1:0]含义
                                                                        编    码
                       
                                                                        Cache块大小
                       
                                                                        0b00
                       
                                                                        2个字(8字节)
                       
                                                                        0b01
                       
                                                                        4个字(16字节)
                       
                                                                        0b10
                       
                                                                        8个字(32字节)
                       
                                                                        0b11
                       
                                                                        16个字(64字节)
                       
         
        bit[5:3]:定义了Cache的相联属性,其编码格式及含义如表15.10所示。
        表15.10 类型标识符寄存器控制字段bit[5:3]含义
                                                                        编    码
                       
                                                                        M=0时的含义
                       
                                                                        M=1时的含义
                       
                                                                        0b000
                       
                                                                        1路相联
                                                                        (直接映射)
                       
                                                                        没有Cache
                       
                                                                        0b001
                       
                                                                        2路相联
                       
                                                                        3路相联
                       
                                                                        0b010
                       
                                                                        4路相联
                       
                                                                        6路相联
                       
                                                                        0b011
                       
                                                                        8路相联
                       
                                                                        12路相联
                       
                                                                        0b100
                       
                                                                        16路相联
                       
                                                                        24路相联
                       
                                                                        0b101
                       
                                                                        32路相联
                       
                                                                        48路相联
                       
                                                                        0b110
                       
                                                                        64路相联
                       
                                                                        96路相联
                       
                                                                        0b111
                       
                                                                        128路相联
                       
                                                                        192路相联
                       
         

        15.1.4  寄存器c1

        CP15中的寄存器c1包括以下控制功能:
        ·  禁止/使能MMU以及其他与存储系统有关的功能;
        ·  配置存储系统以及ARM处理器中相关的工作。
         
                                                                       
                       
                                                                        注意
                       
                                                                        在寄存器c1中包含了一些没有使用的位,这些位在将来可能被扩展其他功能时使用。因此为了编写代码在将来更高版本的ARM处理器中仍可以使用,在修改寄存器c1中的位时应该使用“读取-修改特定位-写入”的操作序列。
                       
         
        当对寄存器c1进行读操作时,指令中CRm和opcode2的值将被处理器忽略,所以要人工将其置位为0。
         
        例15.2用MRC/MCR指令将协处理器寄存器c1的值进行读取和写入。
        【例15.2】
         
        MRC  P15,0,r0,c1,0,0   ;将寄存器c1的值读取到ARM寄存器r0中
        MCR  P15,0,r0,c1,0,0   ;将ARM寄存器r0的值写入寄存器c1
         
        图15.7显示了寄存器c1的编码格式。
       

        图15.7  寄存器c1编码格式

         
        寄存器c1各控制字段的含义如表15.11所示。
         
        表15.11 寄存器c1中各控制位字段的含义
                                                                        C1中的控制位
                       
                                                                        含    义
                       
                                                                        M(bit[0])
                       
                                                                        禁止/使能MMU或者MPU
                                                                        0:禁止MMU或者MPU
                                                                        1:使能MMU或者MPU
                                                                        如果系统中没有MMU或者MPU,读取时该位返回0,写入时忽略
                       
                                                                        A(bit[1])
                       
                                                                        对于可以选择是否支持内存访问时地址对齐检查的系统,本位禁止/使能地址对齐检查功能
                                                                        0:禁止地址对齐检查功能
                                                                        1:使能地址对齐检查功能
                                                                        对寄存器进行写操作时,忽略该位
                       
                                                                        C(bit[2])
                       
                                                                        当数据Cache和指令Cache分开时,本控制位禁止/使能数据Cache。
                                                                        当数据Cache和指令Cache统一时,该控制位禁止/使能整个Cache
                                                                        0:禁止Cache
                                                                        1:使能Cache
                                                                        如果系统中不含Cache,读取时该位返回0,写入时忽略
                                                                        当系统中Cache不能禁止时,读取返回1,写入时忽略
                       
                                                                        W(bit[3])
                       
                                                                        禁止/使能写缓存
                                                                        0:禁止写缓存
                                                                        1:使能写缓存
                                                                        如果系统中不含写缓存,读取时该位返回0,写入时忽略
                                                                        当系统中的写缓存不能禁止时,读取时该位返回0,写入时忽略
                       
                                                                        P(bit[4])
                       
                                                                        对于向前兼容26位ARM处理器,本控制位控制PRGC32控制信号
                                                                        0:异常中断处理程序进入32位地址模式
                                                                        1:异常中断处理程序进入26位地址模式
                                                                        如果系统不支持向前兼容26位地址,读取该位时返回1,写入时被忽略
                       
                                                                        D(bit[5])
                       
                                                                        对于向前兼容26位ARM处理器,本控制位控制DATA32控制信号
                                                                        0:禁止26位地址异常检查
                                                                        1:使能26位地址异常检测
                                                                        如果系统不支持向前兼容26位地址,读取该位时返回1,写入时被忽略
                       
        续表
                                                                        C1中的控制位
                       
                                                                        含    义
                       
                                                                        L(bit[6])
                       
                                                                        对于ARMv3及以前版本,本控制位可以控制处理器的中止模式
                                                                        0:选择早期中止模式
                                                                        1:选择后期中止模式
                                                                        对于以后的处理器读取该位时返回1,写入时忽略
                       
                                                                        B(bit[7])
                       
                                                                        对于存储系统同时支持大/小端(big-endian/little-endian)的ARM处理器,该控制位配置系统使用哪种内存模式
                                                                        0:使用小端(little-endian)
                                                                        0:使用大端(big-endian)
                                                                        对于只支持小端(little-endian)的系统,读取时该位返回0,写入时忽略
                                                                        对于只支持大端(big-endian)的系统,读取时该位返回1,写入时忽略
                       
                                                                        S(bit[8])
                       
                                                                        支持MMU的存储系统中,本控制位用作系统保护
                       
                                                                        R(bit[9])
                       
                                                                        支持MMU的存储系统中,本控制位用作ROM保护
                       
                                                                        F(bit[10])
                       
                                                                        本控制位由生产厂商定义
                       
                                                                        Z(bit[11])
                       
                                                                        对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能
                                                                        0:禁止跳转预测功能
                                                                        1:使能跳转预测功能
                                                                        对于不支持跳转预测的ARM系统,读取时该位返回0,写入时忽略
                       
                                                                        I(bit[12])
                       
                                                                        当数据Cache和指令Cache是分开的,本控制位禁止/使能指令Cache
                                                                        0:禁止指令Cache
                                                                        1:使能指令Cache
                                                                        如果系统中使用统一的指令Cache和数据Cache或者系统中不含Cache,读取该位时返回0,写入时忽略该位
                                                                        当系统中的指令Cache不能禁止时,读取该位返回1,写入时忽略该位
                       
                                                                        V(bit[13])
                       
                                                                        支持高端异常向量表的系统中,本控制位控制向量表的位置
                                                                        0:选择0x00000000~0x0000001c
                                                                        1:选择0Xffff0000~0xffff001c
                                                                        对于不支持高端中断向量表的系统,读取时返回0,写入时忽略
                       
                                                                        RR(bit[14])
                       
                                                                        如果系统中Cache的淘汰算法可以选择的话,本控制位选择淘汰算法
                                                                        0:选择常规的淘汰算法,如随机淘汰算法
                                                                        1:选择预测性的淘汰算法,如轮转(round-robin)淘汰算法
                                                                        如果系统中淘汰算法不可选择,写入该位时被忽略,读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回1或者0
                       
                                                                        L4(bit[15])
                       
                                                                        ARM版本5及以上的版本中,本控制位可以提供兼容以前的ARM版本的功能
                                                                        0:保持当前ARM版本的正常功能
                                                                        1:对于一些根据跳转地址的bit[0]进行状态切换的指令,忽略bit[0],不进行状态切换,保持和以前ARM版本兼容
                                                                        此控制位可以影响以下指令:LDM、LDR和POP
                                                                        对于ARM版本5以前的处理器,该位没有使用,应作为UNP/SBZP
                                                                        对于ARM版本5以后的处理器,如果不支持向前兼容的属性,读取时该位返回0,写入时忽略
                       
                                                                        Bit(bit[31:16])
                       
                                                                        这些位保留将来使用,应为UNP/SBZP
                       
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-20 21:20 , 耗时 0.106651 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表