历史上的今天
返回首页

历史上的今天

今天是:2025年04月03日(星期四)

正在发生

2020年04月03日 | ARM体系结构与编程-1

2020-04-03 来源:eefocus

ARM处理器的7中运行模式:usr、fiq、irq、svc、abt、und、sys。


ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在所有模式下指的都是同一个物理寄存器;备份寄存器R8-R12,每个寄存器对应两个不同的物理寄存器。对于R13[sp]和R14[lr]来说,每个寄存器对应6个不同的寄存器;程序计数器R15[pc]),6个状态寄存器(当前程序状态寄存器[cpsr];5个备份状态寄存器[spsr])。


ARM体系的异常中断:复位、未定义指令、软件中断、指令预取中止、数据访问中止、外部中断请求、快速中断请求。


ARM处理器响应异常中断的过程:

1.保存CPSR到将要执行的异常中断对应的SPSR。

2.设置CPSR,使处理器进入相应的模式。

3.将寄存器R14[lr_mode]设置成返回地址

4.将寄存器R15[PC]设置成该异常中断的中断向量地址。


从异常中断处理程序中返回的过程:

1.恢复SPSR_mode到CPSR。

2.复制R14[lr_mode]到R15[PC]。


ARM体系的存储系统:单一的平板地址空间,空间大小为2^32个8位,即2^32B,空间地址为0 到 2^32-1。存储格式分big-endian和little-endian。


ARM指令:ARM指令字长为固定的32位。一般编码格式如下:

|cond|001|opcode|S|Rn|Rd|shifter_operand|

cond:指令执行的条件编码

opcode:指令操作符的编码

S:决定指令的操作是否影响CPSR的值

Rn:目标寄存器编码

Rd:包含第一个操作数的寄存器编码

shifter_operand:第二个操作数的编码

ARM指令的寻址方式:数据处理指令的操作数的寻址方式、字及无符号字节的Load/Store指令的寻址方式[Load指令从内存中读取数据到寄存器中,Store指令将寄存器中的数据保存到内存]、杂类Load/Store指令的寻址方式、批量Load/Store指令的寻址方式[实现在一组寄存器和一块连续的内存单元之间传输数据]、协处理器Load/Store指令的寻址方式[实现在ARM处理器和协处理器之间传输批量数据]。


ARM指令集:

1.跳转指令:B、BL、BLX、BX。

<1>.B及BL:用于实现子程序调用,可跳转的地址范围大致为-32MB 至 32MB。B指令仅跳转,BL指令同时还将PC寄存器的值保存到LR寄存器,子程序的返回可以通过将LR寄存器的值复制到PC寄存器中来实现。

<2>.BLX:语法1:BLX target_address。

操作的伪代码:LR = address of the instruction after the BLX instruction

    T Flag = 1 (即表示切换到Thumb指令集)

    PC = PC + 跳转地址

语法2:BLX{}

操作的伪代码:if cond  then

            LR = address of the instruction after the BLX instruction

        T Flag = Rm[0] (是否切换指令集取决于寄存器Rm中的目标地址的bit[0])

        PC = Rm AND 0xfffffffe

<3>BX:语法:BX{}

操作的伪代码:if cond  then

        T Flag = Rm[0] (是否切换指令集取决于寄存器Rm中的目标地址的bit[0])

        PC = Rm AND 0xfffffffe


2.数据处理指令:数据传送MOV、比较CMP、位测试TST、相等测试TEQ、加法ADD、减法SUB、位清除BIC、异或EOR、或ORR等。


3.乘法指令:32位乘法MUL等。


4.状态寄存器访问指令:通常修改状态寄存器是通过“读取-修改-写回”的操作来实现的。

<1>MRS:状态寄存器 到 通用寄存器 的传送指令。语法:MRS{} , CPSR 

<2>MSR:通用寄存器 到 状态寄存器 的传送指令。语法:MSR{} CPSR, 或 MSR{} CPSR,#立即数

例如将处理器的模式切换到特权模式:

MRS R0, CPSR ;读取CPSR

BIC R0, R0, #0x1F ;修改,去除当前处理器模式

ORR R0, R0, #0x13 ;修改,设置特权模式

MSR CPSR_c, R0 ;写回,仅仅修改CPSR中的控制位域


5.Load/Store内存访问指令:字数据读取指令LDR(从内存将一个32位的字读取到目标寄存器),字数据写入STR(将一个32位的字写入到指定的内存单元)等。


6.批量Load/Store内存访问指令:批量内存字数据读取指令LDM,批量内存字数据写入指令STM。


7.信号量操作指令:信号量用于进程间的同步和互斥,对信号量的操作要求是一个原子操作,不可被打断。ARM提供SWP(字交换指令)和SWPB(字节交换指令)来完成信号量的操作。

语法为:SWP{} , , [Rn]

功能:将一个内存单元[Rn]的内容读取到一个寄存器中,同时将另一个寄存器的内容写入到该内存单元[Rn]中。


8.异常中断产生指令:软中断指令SWI(ARM通过软中断实现在用户模式下对操作系统中特权模式的程序调用即系统调用)

语法为:SWI{}

功能:用于用户程序调用操作系统的系统服务,操作系统在SWI的中断服务程序中提供相关的系统服务,并定义了参数传递的方法,通常参数传递方法如下两种<1>指令中的24为立即数用于指定用户请求的服务类型,参数通过通用寄存器传递。<2>指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的数值来决定,参数通过其他的通用寄存器来传递。


9.ARM协处理器指令:ARM支持16个协处理器。ARM协处理器指令包括以下3类:<1>用于ARM处理器初始化ARM协处理器的数据处理操作<2>用于ARM处理器的寄存器和ARM协处理器的寄存器间的数据传送操作<3>用于在ARM协处理器的寄存器和内存单元之间传送数据。一共五条指令如下:

<1>CDP:协处理器数据操作指令

例如:CDP p5, 2, c12, c10, c3, 4 ;协处理器p5的操作初始化。其中,操作码1为2,操作码2为4,目标寄存器为c12,源操作数寄存器为c10和c3。

<2>LDC:协处理器数据读取指令

例如:LDC p6, CR4, [R2, #4] ;R2为ARM寄存器,指令读取内存单元[R2, #4]的字数据,传送到协处理器p6的CR4寄存器中。

<3>STC:协处理器数据写入指令

例如:STC p8, CR8, [R2, #4]! ;R2为ARM寄存器,指令将协处理器p8的CR8寄存器中的字数据写入到内存单元[R2, #4]中,指令执行后R2=R2+4。

<4>MCR:ARM寄存器到ARM协处理器的数据传送指令

例如:MCR p14, 3, R7, c7, c11, 6 ;指令从ARM寄存器中将数据传送到协处理器p14的寄存器中。其中R7为ARM寄存器,存放源操作数;c7和c11为协处理器寄存器,为目标寄存器;操作码1为3,;操作码2为6。

<5>MRC:ARM协处理器到ARM寄存器的数据传送指令

例如:MRC p15, 2, R5, c0, c2, 4 ;指令将协处理器p15寄存器中的数据传送到ARM寄存器中。其中R5为ARM寄存器,是目标寄存器;c0和c2为协处理器寄存器,存放源操作数;操作码1为2,操作码2为4。

推荐阅读

史海拾趣

弘凯光电(BRIGHTEK)公司的发展小趣事

2021年,弘凯光电在江苏南通投资建设了集成智慧光源项目,总投资额高达10亿元。这一项目的建成,不仅大幅提升了公司的产能和效率,更为汽车照明、智能家居、3C电子等LED高端应用领域提供了高品质的产品。项目的成功投产,标志着弘凯光电在光电半导体领域的技术实力和市场地位得到了进一步提升。

Allianc公司的发展小趣事

随着公司规模的不断扩大和市场份额的增加,Allianc公司开始关注社会责任和可持续发展。公司积极参与公益事业和环保活动,努力为社会做出贡献。同时,公司还加强了对产品环保性能的研发和改进,推出了多款符合环保标准的产品。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了电子行业中一个成功公司可能经历的一些关键阶段和挑战。希望这些故事能够满足您的需求,并为您了解电子行业提供一定的参考。

埃派克森微电子(Apexone)公司的发展小趣事

在埃派克森微电子的发展过程中,著名投资机构多尔基金和华登国际的风险投资起到了重要的推动作用。这些投资不仅为公司提供了资金支持,还带来了宝贵的市场资源和管理经验。借助这些资源,埃派克森加快了国际化步伐,积极拓展海外市场,与全球范围内的客户和合作伙伴建立了紧密的合作关系。

千志电子(CCO)公司的发展小趣事

为了进一步拓展业务版图,千志电子开始进军国际市场。2006年,千志电子在香港设立了千志电子(香港)有限公司,将其作为国际服务据点重心之一。这一举措使千志电子能够更好地了解国际市场需求和趋势,加强与国外客户的联系和合作。同时,千志电子还积极参加国际展览和论坛,展示其优质产品和先进技术,提高了品牌知名度和国际影响力。

天钰(FITIPOWER)公司的发展小趣事

千志电子于1986年由董事长陈初志先生在台湾创立,起初专注于生产各类型插件式电阻。随着业务的不断发展,公司意识到拓展更广阔市场的重要性。1996年,千志电子进军中国市场,在深圳设立了千志电子(深圳)有限公司,这一举措标志着公司开始走向国际化。深圳作为中国改革开放的前沿阵地,为千志电子提供了丰富的资源和广阔的市场空间,为其后续的发展奠定了坚实基础。

CML Microcircuits公司的发展小趣事

面对未来电子行业的挑战和机遇,CML Microcircuits公司制定了可持续发展的未来规划。公司将继续加大在研发和创新方面的投入,推动技术的不断进步。同时,CML还将关注环保和可持续发展的问题,积极采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,公司还将加强与全球合作伙伴的合作,共同推动电子行业的可持续发展。

这些故事虽然基于虚构,但它们展示了CML Microcircuits公司可能经历的发展路径和关键事件。在实际情况下,公司的发展可能受到多种因素的影响,包括市场环境、技术趋势、竞争态势等。因此,对于CML Microcircuits公司的真实历史和发展情况,还需要进一步了解和分析相关资料。

问答坊 | AI 解惑

状态机资料

状态机资料的资料,设计例子加资料…

查看全部问答>

PMO与PDT

项目管理办公室(Project Management Office)是为让企业内共享项目管理的技能、经验等而建立的全公司的一个职能性组织。在企业中,它可能有各种各样的称谓,比如:产品线管理办(Product-line Management Office)、项目管理办、运作支撑部等等。 ...…

查看全部问答>

谈无线通信技术在电网通信中的应用前景

摘要:随着现代科学技术的飞速发展,构建完善坚强可靠的电力通信网,显得越来越重要。文章结合电力通信的特点和需求及无线新技术的特性,分析无线通信技术在电网通信中的应用前景。           关键词:无线通信;电网通 ...…

查看全部问答>

EVC下的Process.h问题

现在我要把一个VC下的控制台程序移植到EVC环境下,我装了EVC 4.0 , SP4 和Standard SDK,但还是发现没有Process.h和errno.h等一些C库函数,怎么解决这个问题呢?我从网上看到 说有人整理了这些文件,licence是LGPL的. LGPL是什么意思呢?我想最好能 ...…

查看全部问答>

请教一下CE下开发多语言程序的问题(MUI)

最近需要解决CE下开发多语言程序的问题 在论坛上找到一个相关的帖子,使用资源DLL实现的。 http://community.eeworld.net/Expert/TopicView3.asp?id=5679121 这个简单。 -- 我看CE的帮助文档里有MUI(Multilingual User Interface)的内容,应该 ...…

查看全部问答>

STM32:如何关联:“stm32f10x_vector.c”文件?

在 STM32 Firmware library 目录:...STM32F10xFWLibFWLibprojectRIDE  有一个stm32f10x_vector.c  文件, 这个 ..._vector.c  就是跟中断向量有关的吧。对于 Ride7  ...…

查看全部问答>

我的CAN模块程序 出现这样的错误 求高手解答啊!

我在调试LM3S9L97板子的Can模块时 系统一直提示identifier \"GPIO_PB4_CAN0RX\" is undefined 但是 我在上面已经声明了 #define PART_LM3S9L97#include \"driverlib/pin_map.h\"了啊   下面是我的can模块的初始化代码 SysCtlPeripheralEn ...…

查看全部问答>

单片机用汇编语言的问题

我做的项目本来用ATmega128去驱动SSD1289的屏幕时,使用的是UTFT的代码,结果显示速度不能令人满意。后来发现有人说使用汇编会快一些,后来证实了这个是正确的。 所以我想问,有没有会写关于I2C和SPI的汇编代码?这样能不能使得SD卡读写速度、I2C ...…

查看全部问答>

脉宽参数测量

       前阵子做了个脉宽参数测量仪,好像是12年的电赛题目。        做这个题我主要是基于STC12C5A60S2的硬件资源上折腾的。        首先峰值测量用的是单片机上十位AD,通过在某 ...…

查看全部问答>

最小系统板最后一步,JTAG接口的问题,求助啊

28027最小系统板,如图黄色高亮的地方,jtag接口的电源引脚要不要接到芯片上?? …

查看全部问答>