历史上的今天
返回首页

历史上的今天

今天是:2024年10月20日(星期日)

正在发生

2021年10月20日 | ARM处理器架构----处理器的工作状态

2021-10-20 来源:eefocus

之前,一直都在看arm的驱动开发,最近看了ucos,同时也开始对arm的架构有了更深入一点的了解。大学学微机原理的时候学的是x86的架构,它和arm还是有挺多区别的。下面就整理一些自己的所学和在网上转载的关于arm架构的内容。有一本很好的讲arm架构的书:《ARM System Developer's Guide》。


从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示:

数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而哈佛结构体系的arm核就会用两个不同的总线.就像所有的RISC处理器,arm采用load-store体系结构.也就是说它含有两条不同的指令类型来出入处理器.load指令将数据从内存拷贝到寄存器,store指令是将数据从寄存器拷贝到内存.没有直接操作内存中数据的数据处理指令.数据的处理离不开寄存器.


ARM指令一般有两个源寄存器,Rn和Rm,和一个目的寄存器,Rd. ARM的一个重要特性是Rm可以在送入ALU之前被桶型移位器做预处理,这样就会有很多形式的表达式和寻址方式. 后面再写博客记录一下arm中的指令集。


下面介绍ARM处理器的几个关键分量:寄存器,当前程序状态寄存器和流水线


一、寄存器。

arm核一共有37个寄存器,有7种工作模式。其中在任一种工作模式下,可见的寄存器通常有18个(在user/system模式下可见的是17个)。另外,某几个寄存器(sp、lr、spsr)在不同的模式下对应的是不同的寄存器,所以总数加起来共有37个。所有的寄存器都是32bit大小.


18个活动的寄存器包括:16个数据寄存器和2个程序状态寄存器.


(1)数据寄存器由r0--r15表示. 其中r0-r12是通用寄存器,r13-r15是三个特殊的寄存器。


r13通常用作栈指针(sp),存储当前处理器工作模式下的栈顶;


r14被称作链接寄存器(lr),当发生函数调用时存放当前的pc指针,作为子程序的返回地址;


r15被称作程序计数器(pc),保存被处理器预取的下一条指令的地址.


这三个寄存器,在写汇编语句的时候都不用r13这种来表示,都是用sp、lr、pc来表示的。


(2)两个程序状态寄存器:cpsr和spsr. 处理器的当前工作模式决定了哪些寄存器是可见的.


cpsr:当前程序状态寄存器。ARM核使用cpsr来显示和控制内部的操作.通用程序状态寄存器的内部如下:

cpsr分为四个域,每个域有8位的宽度:flags,status,extension和control.control域包含处理器模式和状态以及中断屏蔽位.flags域包含condition flags.处理器模式决定了当前哪些寄存器是可用的以及cpsr本身的访问权限.


当发生异常时,arm会自动将cpsr保存到spsr寄存器中。 


二、 处理器模式


处理器模式分为特权模式和非特权模式:特权模式对cpsr有完全的读写控制.而非特权模式只能读cpsr的control域但是仍可以读写condition flags.一共有7种处理器模式:六种特权模式(abort,fiq,irq,svc,system和undefined)和一种非特权模式(user).


abort:当试图访问内存失败时处理器会进入abort模式;


fiq和irq对应ARM处理器的两种中断级别, irq是普通的中断模式,fiq是快速中断模式。


svc是系统reset后进入的默认模式,也是os kernel工作的模式;


system模式是user模式的特殊版本,它有对cpsr的读写控制.


undefined模式在处理器遇到未定以的指令或者不支持的操作时使用.


user模式在应用程序下使用.


在不同的模式下,有不同的Banked registers。所谓的banked register 就是说 这个寄存器是该模式所独有的,不与其他模式共享。

除了user模式,其它模式都可以通过直接写cpsr的模式位来改变处理器模式.当然,在异常或者中断到来时,硬件会自动切换模式.


下列异常和中断会引起模式切换:reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction.


三、cpsr寄存器。


下面接着讲cpsr寄存器。处理器模式对应的cpsr寄存器:

需要注意的是:通过直接写cpsr来改变模式的方法不会将cpsr拷贝到spsr.只有在异常或中断发生时cpsr的值才会保存到spsr。


当ARM核上电时,处于svc特权模式.从特权模式开始是有用的:初始化代码完全控制cpsr来建立其他模式的堆栈.


cpsr中的bit T是表明指令簇用的是ARM指令集还是thumb指令集.T为1表示thumb指令集,T为0表示ARM指令集.


ARM指令集和thumb指令集的特性:

中断屏蔽位: 中断屏蔽位用来屏蔽处理器的特殊中断请求.在ARM核中有两种级别的中断请求:irq和fiq.


 cpsr中的中断屏蔽位是第7位和第6位(I和F),当I或F设为1时irq或fiq就被屏蔽了.       


 condtion flags: condition flags可以被比较操作和带S后缀的ALU操作来更新.

四、异常 中断和向量表


当异常发生时,处理器会将pc指向一个特殊的内存地址.该地址所在的地址范围称为向量表.向量表的入口是跳转指令,跳转到专门处理某个异常或中断的子程序.


存储器映射地址0x00000000是为向量表预留的.在某些处理器中向量表可以放在更高的地址,从0xffff0000开始.linux等操作系统可以利用这个特性.


当异常发生时,处理器挂起正常的处理然后从向量表中加载指令.每个向量表的入口都包含指向特殊处理例程的跳转指令.

reset向量是处理器上电后执行的第一条指令,这条指令跳转到初始化代码处.


undefined instruction向量是当处理器不能对指令译码时使用的.


software interrupt向量执行SWI指令时使用的.SWI可以用来系统调用的实现.


prefetch abort向量发生在当没有访问权限的条件下试图获取该地址的指令时,异常发生在译码阶段.


data abort向量与prefetch abort类似,只不过是访问数据发生的异常.


interrupt request向量被外部硬件用来中断处理器的正常执行.只有在cpsr的相应位为0时才能发生.


fast interrupt request向量与irq类似,是为要求更短的中断响应时间的硬件保留的.只有在cpsr的相应位为0时才能发生.


五、流水线


RISC处理器用流水线机制来执行指令.ARM流水线中的指令只有在完全通过执行阶段才被处理.

上面这张图标明了流水线的使用和程序计数器pc.在执行阶段,pc总是指向该指令地址加上8字节.也就是说pc总是指向当前指令的下下条指令.当用pc来计算


相对偏移量时这点是很重要的,并且它也是所有流水线的特征.


六、条件执行:


条件执行控制指令是否被ARM核执行.处理器会比较指令的条件属性和cpsr中的condition flags,如果匹配,该指令执行;否则该指令被忽略.

推荐阅读

史海拾趣

Easy Magnet Corp公司的发展小趣事

随着市场需求的不断变化,Easy Magnet Corp公司意识到,只有不断创新才能保持竞争优势。因此,公司加大了研发投入,不断推出具有创新性的产品。其中,一款集成了微型化、高性能和高稳定性的磁性传感器,因其独特的优势,在智能手机、平板电脑等电子产品中得到了广泛应用。这一技术突破不仅提升了公司的知名度,也为公司带来了可观的收益。

台湾远翔(Feeling Technology)公司的发展小趣事

2015年,乔光电子经历了重大股权变更,现任总经理颜非接手公司后,开启了二次创业之路。2018年,公司在漳平市选址购地,并于2019年开始建设新工厂,同时决定构建自己的品牌。这一决策虽然对原有客户造成了一定冲击,但颜非坚信品牌是企业的灵魂,坚持走品牌化道路。经过几年的努力,乔光电子不仅成功打造了“FTR”自主品牌,还获得了“UL&TUV&VDE&CQC”等安规认证和多项国家专利证书,品牌影响力显著提升。

Emulation Technology Inc公司的发展小趣事

面对电子行业的快速发展和市场的不断变化,Emulation始终保持着对技术的持续创新。公司不断投入研发资源,推出了一系列具有领先性能的模拟和仿真产品,满足了客户对于高精度、高效率仿真工具的需求。这些产品不仅提高了工程师们的设计效率,还促进了整个电子行业的发展。

HiRel Connectors Inc公司的发展小趣事
选择质量可靠、稳定性好的电源,以保证摄像头的正常工作。
Alan Industries Inc公司的发展小趣事

在追求经济效益的同时,Alan Industries Inc.也始终关注社会责任和可持续发展。公司积极参与公益事业,通过捐款捐物等方式支持社会慈善事业。同时,公司还注重环保和节能,在产品研发和生产过程中采用环保材料和工艺,努力降低对环境的影响。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

以上五个故事都是基于电子行业的一般发展情况和公司成长的常见模式虚构的,旨在展示Alan Industries Inc.公司可能的发展历程。请注意,这些故事并非基于实际发生的事件,因此可能与该公司的实际情况存在差异。

ET Enterprises Ltd公司的发展小趣事

进入1940年代后期,ET Enterprises Ltd公司将业务重心转向光电倍增管的开发和制造。通过不断的技术创新和市场拓展,公司逐渐在光电倍增管领域建立起领先地位,成为国际知名的光电倍增管供应商。

问答坊 | AI 解惑

LED背光2010年首要目标:降低成本

机遇与挑战: 2010年的[url=]LED[/url]背光以降低成本为目标市场数据: 厂商尝试以5630中功率LED取代目前主流的3020低功率规格2010年LED TV背光模组将以四灯条双侧出光的设计直接省下1/3的光源成本光源占LED TV背光模组成本超过50%LED背光是2009年 ...…

查看全部问答>

针对工业级嵌入式应用开发的开发板

FLYSUN-ARM9200开发板由北京飞旭科技有限公司设计开发,主处理器基于Atmel公司的AT91RM9200 ARM处理器。AT91RM9200内嵌ARM920T核,带有全性能的MMU,具有高性能、低功耗、低成本、小体积等优点,广泛地应用在各种嵌入式系统中,如通信、军事、航空 ...…

查看全部问答>

论坛是信誉

像我这样的51菜鸟,初处单片机领域,所以好多东西不懂,不懂得就要问,就像串口线为什么要委托论坛代购,为什么不去中发知春直接搞定,一来对行情不了解,再者不知道什么样的线适合,所以还是喜欢委托论坛组织货源。什么事情还得慢慢来!希望大家互 ...…

查看全部问答>

菜鸟求助:wince内核写入SD卡

我用vs2005定制了一个wince6.0的内核。想把它写入到omap3530的sd卡上,让这个系统启动。网上看了一些类似的问题,不得法。请朋友们帮帮忙,说说该怎么做。本人菜鸟,步骤解释的越详细越好。谢谢。…

查看全部问答>

8279实现4X4键盘6位显示

呵呵,今天看单片机科本,有一道题不会做,就是8279实现4X4键盘6位显示,呵呵,本人菜鸟,请高人给指点下,C语言和汇编程序…

查看全部问答>

调查大家都在用什么GPRS模块

看到这个论坛中用GPRS模块的人很多,所以想调查一下大家具体都在用什么模块,并相应的做哪些应用,以便给新手一些借鉴。…

查看全部问答>

关于LSD-TEST430F22X4学习套件

我最近用LSD-TEST430F22X4学习套件,该套件没有外部晶振,然后就接了一个普通的32K晶振,感觉晶振没起振,想请教一下关于该套件的外部晶振问题…

查看全部问答>

1138板驱动程序下载问题

前几天用1138板还是好的,昨晚下载了几个程序后就出问题了,弹出下面这个对话框: 我以为是芯片锁了,就用ZLG的软件解锁,之后连驱动都安装不了,请问是什么原因呢?是Ft223d坏了,还是1138片子出问题了呢? 请大家帮帮忙,谢谢了! [ 本帖 ...…

查看全部问答>

视频分享

嵌入式视频教程系列http://www.youku.com/playlist_show/id_3541073_as…

查看全部问答>

cadence PCB 免费在线培训(8月-10月)

2012 Cadence PCB 16.5专题在线培训(8月-10月)                                          &nbs ...…

查看全部问答>