历史上的今天
今天是:2024年11月01日(星期五)
2021年11月01日 | ARM处理器和体系结构介绍(Cortex-A9)
2021-11-01 来源:eefocus
ARM(Advanced RISC Machines)
概述:有三种含义,它是一个公司的名称,是一类微处理器的通称,还是一种技术的名称。
技术特征
体积小、低功耗、低成本、高性能。
支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8/16位器件。
大量使用寄存器,指令执行速度更快。
大多数数据操作都在寄存器中完成。
寻址方式灵活简单,执行效率高。
指令长度固定。
嵌入式RISC微处理器
概述:RISC(Reduced Instruction Set Computer)是精简指令集计算机,RISC把着眼点放在如何使计算机的结构更加简单和如何使计算机的处理速度更加快速上。RISC选取了使用频率最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,不用或少用微码控制。
嵌入式CISC微处理器
概述:传统的复杂指令级计算机(CISC)更侧重于硬件执行指令的功能性,使CISC指令及处理器的硬件结构更加复杂。
RISC和CISC的区别

ARM的基本数据类型
ARM采用32位架构,ARM的基本数据类型有以下3种。
Byte:字节,8bit。
Halfword:半字,16bit(半字必须与2字节边界对齐)。
Word:字,32bit(字必须与4字节边界对齐)。
注意
ARM 系统结构 v4 以上版本支持以上3种数据类型,v4 以前版本仅支持字节和字。
ARM指令编译后是4个字节(与字边界对齐),Thumb指令编译后是2个字节(与半字边界对齐)
ARM工作模式

注意:除用户模式外的其他7种处理器模式成为**特权模式**。在特权模式下,程序可以访问所有的系统资源,也可以任意进行处理器模式切换。其中以下6种又称异常模式。
快速中断模式(fiq)
外部中断模式(irq)
特权模式(svc)
数据访问中止模式(abt)
未定义指令中止模式(und)
监控模式(mon)(Cortex-A特有模式)
注意:
处理器模式可以通过软件控制切换,也可以通过外部中断或异常处理过程进行切换。
大多数的用户程序运行在用户模式下。当处理器工作在用户模式时,应用程序不能够访问受操作系统保护的一些系统资源,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式切换。这种体系结构可以使操作系统控制整个系统资源的使用。
当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组专用寄存器以供相应的异常处理程序使用,这样就可以保证在进入 ARM 的工作模式异常模式时用户模式下的寄存器(保存程序运行状态)不被破坏。
ARM的流水线结构
本文用的Cortex-A9是ARMv7架构,使用3级流水线,分为取指、译码、执行。
取指令:从寄存器装载一条指令。
译码:识别被执行的指令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通路。
执行:处理指令并将结果写会寄存器。

当处理器执行简单的数据处理指令时,流水线使得平均每个时钟周期能完成1条指令。但1条指令需要3个时钟周期来完成,因此,有3个时钟周期的延时,但吞吐率是每个周期1条指令。
ARM9使用5级流水线:取指、译码、执行、缓冲/数据、回写。
寄存器组织
根据ARM型号的不同,寄存器数量有所不同,本文所述Cortex-A9有
40个32位寄存器。
33个通用寄存器。(不分组寄存器R0-R15,分组寄存器R8-R14,程序计数器R15)
6个状态寄存器:1个CPSR(current program status register,当前程序状态寄存器),6个SPSR(saved prgram status register,备份程序状态寄存器)。
1个PC(program counter,程序计数器)。

寄存器R13(SP)
概述:寄存器R13在ARM处理器中常用做堆栈指针,称为SP,保存的是每种模式下的栈空间的地址,每一种模式都有自己的栈空间。异常处理程序负责初始化自己的的R13,使其指向该异常模式专用的栈地址。在异常处理程序入口处,将用到的其他寄存器的值保存在堆栈中,返回时,重新将这些值加载到寄存器。通过这种保护程序现场的方法,异常不会破坏被其中断的程序现场。
寄存器R14(LR)
概述:寄存器R14又被称为连接寄存器(LR),它在ARM体系结构中具有下面两种特殊作用;
每一种处理器模式用自己的R14存放当前子程序的返回地址。
当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序返回时,把R14的值复制到程序计数器(PC)。
R14也可以被用做通用寄存器使用。
寄存器R15(PC)
寄存器R15用作程序计数器(PC)。保存的是正在取指的指令的地址。
程序状态寄存器(CPSR和SPSR)
每一种处理器模式下都有一个专用的物理寄存器做备份程序程序状态寄存器(=SPSR)。在所有处理器模式下都可以访问当前程序状态寄存器(CPSR)。当特定的异常中断发生时,这个物理存储器负责存放当前程序状态寄存器的内容(SPSR用于保存CPSR的状态)。当异常处理程序返回时,再将其内容恢复到当前程序状态寄存器。

标志位
N、Z、C、V通称为条件标志位。(在这里不做赘述,如需详细了解可以参考系统书籍)。
Q标志位
用于在异常中断发生时保存和恢复CPSR中的Q标志位。(在带DSP指令扩展中,表示增强的DAP指令是否发生了溢出)。
控制位
CPSR的低8位(I、F、T及M【4:0】)统称为控制位。当异常发生时,这些位的值将发生相应的变化。另外,如果在特权模式下,也可以通过软件编程来修改这些位的值。
中断禁止位:I=1,IRQ被禁止;F=1,FIQ被禁止
状态控制位(T位是处理器的状态控制位):T=0,处理器处于ARM状态(即正在执行32位的ARM指令);T=1,处理器处于Thumb状态(即正在执行16位Thumb指令)。当然,T位只有在T系列的ARM处理器上才有效,在非T系列的ARM版本中,T位始终为0。
模式控制位:M【4:0】作为位模式控制位,这些位的组合确定了处理器处于哪种状态

==注:==博客所用开发平台为三星ARM Cortex-A9四核CPU的Exynos-4412。
上一篇:ARM之I2C总线协议介绍
下一篇:ARM串行通信与并行通信介绍
史海拾趣
|
从同一个模板创建dialog,用dialogbox创建,一切正常。而用createdialog创建,callback里只有WM_INITDIALOG,没有WM_COMMAND,也就不能对button控件进行任何操作了。由于设备不能连接电脑,也看不见消息队列。… 查看全部问答> |
|
在linux下我用如下的命令去单步编译 gcc -c ADInclude.c gcc -c test2.c gcc -o test test2.o ADInclude.o 可以编译通过,但我用makefile文件去编译就会出错 /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In funct ...… 查看全部问答> |
|
CString str,str1; m_stbar.SetWindowText(_T(\"Testing......\")); str1 = m_stbar ::Sleep(2000); &nb ...… 查看全部问答> |
|
吉时利专家邀请您首先了解“高亮度LED测试( HBLED)” 高亮发光二极管(High brightness light emitting diodes,HBLED)综合具备了高输出、高效率和长寿命等优势。制造商们正在开发可以实现光通量更高、寿命更长、色彩更丰富而且单位功率发光度 ...… 查看全部问答> |
|
大家在TI购买的EK-LM4F120XL写了在运送时,有没有给快递号啊? 大家在TI购买的EK-LM4F120XL写了在运送时,有没有给快递号啊? Status: Shipped Shipping Method: Shipping Included in Price of Item Carrier: FEDERAL EXPRESS CORP Tracking : Not available… 查看全部问答> |
|
大家好,我想问一下,大家是否用FPGA做过高精度的时间测量,时间间隔是0.1ns的,或者是10ps的。 我看文献中显示有人在2000年左右就用FPGA实现了100ps分辨率的高精度时间间隔采集, 但是我给xilinx的技术人员打电话询问,他们说单从硬件上来说是无 ...… 查看全部问答> |




