ARM7体系结构 您所在的位置:网站首页 ARM处理器内核体系结构 ARM7体系结构

ARM7体系结构

2023-08-08 10:49| 来源: 网络整理| 查看: 265

ARM7体系结构

之前有提到嵌入式系统的目标就是将计算机芯片化,集成为单片微型计算机,满足对象体系的控制要求。为了实现这一轻便的性能,提供更大的灵活性和更高的智能化,ARM内核采用精简指令集计算机体系结构——RISC,它的逻辑简单,指令集少。

这里有必要说一下RISC结构体系的特征: 具有大量的通用寄存器 通过装载/保存结构使用独立的load和store指令,完成数据在寄存器和外部存储器之间的传送。其中需要说明的是,处理器只处理寄存器中的数据。这样可以加快访问速度,因为不必每次访问存储器。 ARM体系结构还有如下特征: load/store进行批量数据传输,实现最大数据吞吐量。每条数据指令可以同时包含算数逻辑单元ALU的运算和移位处理。地址自动增加,自动减少的寻址方式,优化程序中的循环处理。大多数ARM指令是条件执行的。 RISC的缺点:

功能少

ARM处理器的系列: M:微控制处理器

成本低,体积小,引脚数目少,Cortex-M3采用纯Thumb2指令执行方式,32位高性能ARM内核能够实现8位和16位处理器级数的代码存储密度,非常适用于几K的存储器MCU市场

R:实时处理器

按照我的理解,应该是因为有很多的中断,实现其实时性

A:应用处理器

性能最好,效能最高

在ARM7系列中,可以使用Embedded ICE JTAG进行在线调试 ARM7TDMI

T: 支持Thumb D: 在线调试 M: 双字相乘 I: 硬件仿真

存储器的字和半字

ARM处理器直接支持8位的字节,16位的半字和32位的字,其中以能被4整除的地址开始连续的4个字节构成一个字,从偶数地址开始连续的2个字节构成一个半字——ARM指令的长度为一个字(四个字节),Thumb指令的长度为一个半字(两个字节) 即ARM为32位的字,Thumb为16位的半字 注意:由于不管是ARM还是Thunb,地址都是偶数,因此bit0位一定是为0,ARM属于字对齐,bit1和bit0都为0,Thumb半字对齐,仅有bit0为0.

三级流水线

流水线的三个阶段分别为:取指,译码,执行 注意:ARM正在执行第一条指令的同时对第二条指令进行译码,并将第三条指令从存储器中取出。只有在取第四条指令时,第一条指令才算正真完成执行。 若将正在执行的指令作为参考点,称为第一条指令,则PC总是指向第三条指令,即:PC总指向正在执行的指令再加2条指令地址 ARM状态时:PC=当前指令位置+8字节 Thumb状态时:PC=当前指令位置+4字节 例如:

0x4000 ADD PC,PC,#4 ;正执行的命令,将PC+4赋给PC(找准PC的值) 0X4004 ... ;被译码的命令 0X4008 ... ;被取指的命令(PC总是指向正执行命令的地址再加2条指令地址,及现在这个地址,0X4008) 0X400C ... ;PC是0x4008,加上4之后为现在这个地址0X400C ARM处理器的状态

当前程序状态寄存器CPSR中的控制位T反应处理器正在操作的状态,状态切换时不影响模式和寄存器的内容

ARM:T=0

上电默认状态也是ARM,32位

Thumb:T=1

16位 两者不能混合使用,内核必须切换状态才可以,切换的指令有BX(有条件跳转,检测R0的最低位,为0则为ARM,为1则为Thumb),BXL(无条件跳转)

;从ARM状态切换到Thumb状态 CODE32 LDR R0,=Lable+1 ;R0的bit0=1,BX自动将CPSR中T置1 BX R0 ;切换到Thumb状态,跳转到Lable CODE16 ;Thumb指令 Lable MOV R1, #12 ;从Thumb状态切换到ARM状态 CODE16 ;Thumb指令 LDR R0,=Lable ;R0的bit0为0,BX将CPSR中T置0 BX R0 ;切换到ARM指令 CODE32 Lable MOV R1,#10 ARM处理器模式(7种) 用户模式

正常工作状态,不能由此切换到其他状态

系统模式

用户模式和系统模式不能由异常进入,想要进入系统模式,必须修改CPSR才能实现 如下:管理模式切换到系统模式:

MSR CPSR_c,#(NoInt | SYS32Mode)

特权模式,与用户模式类似,但可以切换到其他模式,与用户模式共用相同寄存器

未定义模式 中断模式 快速中断模式 管理模式 中止模式

这五种属于异常模式,只有当相应的异常相应时,才能进入。

ARM内部寄存器

ARM共有37个寄存器,其中31个32位的都用了,另外有6个32位的仅用了12位。

ARM状态下的寄存器

这里写图片描述

一般通用

R0~R7

堆栈指针R13(SP)

保护待使用的寄存器里的内容

链接寄存器R14(LR)

保护现场返回地址,子程序的返回地址将自动的存入到R14中,当程序结束后,将R14复制到程序计数器PC中,实现子程序的返回 执行如下任何一条指令都OK

MOV PC,LR BX LR

在子程序入口,使用STMFD指令将R14和其它寄存器的内容保存到堆栈SP中

STMFD SP!,{,LR}

在子程序结束时,使用批量寄存器读取指令LDMFD,将返回地址从堆栈中复制到程序计数器PC中,实现子程序返回

程序计数器R15(PC)

当前程序状态寄存器,P15(PC)总是指向正在取指的指令。若无其他跳转指令,则PC将自动加1个地址,跳转到下一个地址位 (1)读R15 当使用STM或STR指令保存R15时,R15保存的是当前指令地址+偏移量 测试芯片具体存储PC时的偏移量程序:

SUB R1,PC,#4 ;R1存放下面STR指令的地址 STR PC,[R0] ;保存“STR指令地址+偏移量”到R0中 LDR R0,[R0] ;重装 SUB R0,R0,R1 ;计算偏移量=PC-STR地址

(2)写R15 由于ARM是字对齐的,因此写的地址必须是有效的正确地址,即是bit0=0,bit1=0,bit[1:0]=0b00 Thumb半字对齐,bit0=0,写入地址时可先与0xFFFF FFFE相与再写入

CPSR和SPSR

用户和系统模式不是异常中断,没有SPSR,其他每种异常都有各自相应的SPSR,它们的作用是异常产生时,保存当前CPSR的值。然后设置CPSR为相应的异常模式。异常中断程序退出返回时,可以通过保存在SPSR中的值来恢复CPSR 除用户模式,其他每种处理器模式都可以通过改写CPSR中的模式位改变

Thumb状态下寄存器 各种模式下实际访问的寄存器

这里写图片描述

一般通用寄存器

R8~R12thumb状态一般不会用,只有个别指令可以访问,如MOV,ADD,CMP

堆栈指针R13(SP)

Thumb指令集带有传统PUSH和POP指令用于堆栈操作处理。

链接寄存器R14(LR)

跟前面ARM的用法差不多

ARM状态寄存器和Thumb状态寄存器的关系

R0~R7是相同的 Thumb状态CPSR(没有SPSR)和ARM的CPSR一样,Thumb指令集不包含MSR和MRS,要修改CPSR任何标志位必须回到ARM状态,而且当完成复位时,或者进入到异常模式时,会被自动切换到ARM状态 所有异常在ARM状态下执行

当前程序状态寄存器 条件代码标志

N: 负标志,运算结果的第31位,记录标志设置操作结果 Z: 零标志 C: 进位标志 V: 一处标志

控制标志位

I: 中断禁止标志,I=1禁止 F: 快速中断禁止标志,F=1禁止 T: 处理器状态位,T=1,Thumb;T=0,ARM M0~M4:处理器模式位,特定的几种模式位有定义处理器模式

ARM体系的异常、中断及向量表

~~~~老胡说这里很重要!!! 可是我好困了,这个留着明天再总结好了~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有