各位大虾,ARM的7种arm的工作模式式有什么意义

后使用快捷导航没有帐号?
查看: 3335|回复: 9
Helper2416-15——裸机第七弹——ARM工作模式 & PSR简介 & 堆栈初始化
在线时间434 小时
芯币1440枚
TA的帖子TA的资源
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
裸机第七弹——ARM工作模式 & PSR简介 & 堆栈初始化
参与Helper2416开发板助学计划心得
简述ARM9的七种工作模式
2.0.png (75.65 KB, 下载次数: 0)
10:02 上传
1:用户模式(usr):ARM处理器正常的程序执行状态。2:系统模式(sys):运行具有特权的操作系统任务。3:管理模式(svc):操作系统使用的保护模式。4:数据访问终止模式(sbt):当数据或指令预取终止时进入该模式,可用于与你存储及储存保护。5:未定义指令终止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。6:中断模式(irq):用于通用的中断处理。7:快速中断模式(fiq):用于高速数据传输或通道处理。
不同的模式可以通过软件来相互切换,或者发生各类中断和异常时处理器自动进入相应的模式
如上图所示:除usr模式以外的六种模式都属于特权模式,进入特权模式是为了处理中断、异常,或者访问被系统保护的资源,其实在操作系统下大部分程序是运行在usr模式下的。而对于特权模式中除sys模式以外的五种模式又被称为一场模式,顾名思义,就是处理各种异常的,一旦异常发生,处理器便会自动进入相应的异常模式。需要说明的是:中断本身也就是一种异常
另外,ARM9同时还有两种工作状态。
<font color="#:ARM状态:执行32位的word(4Byte)对齐的ARM指令。
2:Thumb状态:执行16位的halfword(2Byte)对齐的Thumb指令。
注意:处理器上电后便是svc模式ARM状态,Thumb模式基本用不到,我们就不用管他的工作状态了。
如上图所示:
在ARM状态下,每种工作模式都用16个通用寄存器(图中对应模式下的那一列寄存器R0-R15)其中带三角的是该模式下所特有的,具有实际存在,没带三角的就是各个模式所通用的(只有一个实际存在),其中R13作为SP、R14作为LR、R15作为PC。
每种模式除了这16个通用寄存器外,还有一个程序状态寄存器Current Program Status Register(CPSR),另外,五个异常模式下还有一个Saved Program Status Register(SPSR)用于保存模式切换前CPSR的值。
2.6.png (42.63 KB, 下载次数: 0)
15:47 上传
1:工作模式位:
指明CPU当前处于什么模式。可以编写这些位,使CPU进入指定的工作模式。
2.2.png (31.81 KB, 下载次数: 0)
15:47 上传
2:T标志位:
指明当前是处于ARM模式还是Thumb模式
2.3.png (11.15 KB, 下载次数: 0)
15:47 上传
3:中断禁止位:
A、I、F中断禁止位
2.4.png (14.97 KB, 下载次数: 0)
15:47 上传
4:条件标志位与ARM条件码的关系:
2.5.png (39.6 KB, 下载次数: 0)
15:47 上传
堆栈初始化
在实际使用中,我们都会用C开发,这就需要我们初始化好堆栈,由于各种工作模式中都有自己的SP寄存器,我们需要为每种工作模式(暂且将usr和sys模式看作一个模式)都设置好堆栈,
由于各种模式下的SP寄存器只能其对应的模式下才能被访问,所以我们需要先通过修改CPSR的值进入相应的模式,再设置他的堆栈,需要注意的是,CPSR中的工作模式位只能在特权模式下才能被修改。示例如下:
@
@ Set up the Stack for Undefined mode
@
& && && &LDR& &r0, =_stack& && && && && && && &@ Read the stack address
& && && &MSR& &cpsr_c, #MODE_UND|I_F_BIT& && & @ switch to undef&&mode
& && && &MOV& &sp,r0& && && && && && && && && &@ write the stack pointer
& && && &SUB& &r0, r0, #UND_STACK_SIZE& && && &@ give stack space
@
@ Set up the Stack for abort mode
@& && &&&
& && && &MSR& &cpsr_c, #MODE_ABT|I_F_BIT& && & @ Change to abort mode
& && && &MOV& &sp, r0& && && && && && && && &&&@ write the stack pointer
& && && &SUB& &r0,r0, #ABT_STACK_SIZE& && && & @ give stack space
@
@ Set up the Stack for FIQ mode
@& && &
& && && &MSR& &cpsr_c, #MODE_FIQ|I_F_BIT& && & @ change to FIQ mode
& && && &MOV& &sp,r0& && && && && && && && && &@ write the stack pointer
& && && &SUB& &r0,r0, #FIQ_STACK_SIZE& && && & @ give stack space
@
@ Set up the Stack for IRQ mode
@& && &
& && && &MSR& &cpsr_c, #MODE_IRQ|I_F_BIT& && & @ change to IRQ mode
& && && &MOV& &sp,r0& && && && && && && && && &@ write the stack pointer
& && && &SUB& &r0,r0, #IRQ_STACK_SIZE& && && & @ give stack space
@
@ Set up the Stack for SVC mode
@& && &&&
& && && &MSR& &cpsr_c, #MODE_SVC|I_F_BIT& && & @ change to SVC mode
& && && &MOV& &sp,r0& && && && && && && && && &@ write the stack pointer
& && && &SUB& &r0,r0, #SVC_STACK_SIZE& && && & @ give stack space
@
@ Set up the Stack for USer/System mode
@& && &
& && && &MSR& &cpsr_c, #MODE_SYS|I_F_BIT& && & @ change to system mode
& && && &MOV& &sp,r0& && && && && && && && && &@ write the stack pointer复制代码
论坛ID:yuanlai2010
发表时间:
在线时间434 小时
芯币1440枚
TA的帖子TA的资源
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
本帖最后由 yuanlai2010 于
16:29 编辑
论坛的编辑器不怎么会用,最后那两张图不知道怎么删除了。在编辑界面是看不到的,发表出来就有了!
然后 点击图片
就可以看到你多的那个图片了 去掉相应的就可以了。&
在线时间366 小时
芯币1546枚
TA的帖子TA的资源
我也不会用!呵呵,试一下在编辑的时候图片里边去掉那两张图片看看?
My dreams will go on...
在线时间49 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 22, 距离下一级还需 178 积分
一粒金砂(中级), 积分 22, 距离下一级还需 178 积分
楼主第一个图是哪个文档里的?能分享一下吗?
看了下是这篇文档 ,那张图出现的位置是在第43页。&
在线时间9104 小时
威望185400分
芯币16546枚
TA的帖子TA的资源
论坛的编辑器不怎么会用,最后那两张图不知道怎么删除了。在编辑界面是看不到的,发表出来就有了!
点击&&编辑&&然后 点击图片&&就可以看到你多的那个图片了 去掉相应的就可以了。
多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!&
2017,加油!
继续为中国电子行业做出小小的贡献吧!
在线时间434 小时
芯币1440枚
TA的帖子TA的资源
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
楼主第一个图是哪个文档里的?能分享一下吗?
看了下是这篇文档
(4.92 MB, 下载次数: 5)
09:44 上传
点击文件名下载附件
,那张图出现的位置是在第43页。
在线时间434 小时
芯币1440枚
TA的帖子TA的资源
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
点击&&编辑&&然后 点击图片&&就可以看到你多的那个图片了 去掉相应的就可以了。
多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!
刚刚帮你编辑了 :)&
在线时间9104 小时
威望185400分
芯币16546枚
TA的帖子TA的资源
多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!
刚刚帮你编辑了 :)
SOSO姐人实在是太好了&
2017,加油!
继续为中国电子行业做出小小的贡献吧!
在线时间434 小时
芯币1440枚
TA的帖子TA的资源
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
纯净的硅(初级), 积分 674, 距离下一级还需 126 积分
刚刚帮你编辑了 :)
SOSO姐人实在是太好了
应该的呀 :)&
在线时间9104 小时
威望185400分
芯币16546枚
TA的帖子TA的资源
SOSO姐人实在是太好了
应该的呀 :)
2017,加油!
继续为中国电子行业做出小小的贡献吧!
Powered by
逛了这许久,何不进去瞧瞧?嵌入式第二章课后习题
您的位置: →
嵌入式第二章课后习题
第二章1. 按照ARM处理器的命名规则,说明ARM7TDMI中T、D、M、I的含义。
答:T:支持16位的Thumb指令集;D:支持JTAG片上调试;M:支持长乘法操作(64位结果)的ARM指令,包含快速乘法器;I:带有嵌入式追踪宏单元ETM(Embedded Trace Macro),用来设置断点和观察点。2. 什么是哈佛结构?与普林斯顿结构有何区别?答:哈佛结构是一种将程序中指令和数据分开存储的存储器结构。即哈佛结构中程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。普林斯顿结构(冯?诺伊曼结构)是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置。这便是。这便是两种结构的区别。3. 什么是RSIC?什么是CSIC?简述他们的特点与差别。答:RSIC是精简指令集计算机,CISC是复杂指令集计算机。两者的区别在于不同的CPU设计理念和方法。对于CISC:⑴ 在CSIC结构的指令系统中,各种指令的使用频率相差悬殊。有80%的指令只在20%的运行时间内才会用到。⑵ CISC结构指令系统的复杂性带来了计算机体系结构的复杂性,这不仅增加了研制时间和成本,而且还容易造成设计错误。⑶ 在CISC结构指令系统中,由于各条指令的功能不均衡性,不利于采用先进的计算机体系结构技术来提高系统的性能。对于RISC:⑴ 简化指令集,只保留常用的基本指令;⑵ 设计大量的通用存储器,减少访存的次数;⑶ 采用装载/保存结构,支持流水线技术,使每个周期时间相等;⑷ 采用简单的指令格式、规整的指令字长和简单的寻址方式;⑸ 单机器周期指令,即大多数的指令都可以在一个机器周期内完成,并且允许处理器在同一时间内执行一系列的指令。4. ARM7处理器是几级流水线?在ARM7处理器中,“PC指向的是下一条要执行的指令”,这句话对吗?为什么?答:ARM7处理器采用三级流水线。“PC指向的是下一条要执行的指令”,这句话不对。在ARM处理器中将PC程序计数器定义到R15寄存器,无论处理器处于何种状态,PC总是指向“正在取值”指令的地址,一般来说,人们习惯性的约定将“正在执行的指令作为参考点”,成为当前第一条指令,那么PC总是指向随后的第三条指令,或者说PC总是指向当前正在执行的指令地址再加上2条指令的地址,即指向正在执行指令的下下一条指令,而不是指向下一条要执行的指令。5. 简述ARM处理器中在线仿真器模块EmbeddedICE-RT的作用。答:ARM处理器中的在线仿真器模块EmbeddedICE-RT,一般还带有嵌入式宏跟踪单元模块ETM,实现ARM处理器的在线调试和运行过程的跟踪功能;并且具有诸多ICE功能,例如实时寻址、断点、单步、对ARM CPU的完全控制、对ASIC系统其余部分的访问,以及对主机显示器外设访问、键盘输入和磁盘存储。6. ARM处理器的工作状态分为哪二种?ARM处理器又是怎么定义和标志的?答:ARM处理器的工作状态分为ARM状态和Thumb状态,这两种状态有程序状态字CPSR中T标志位确定,为0时处理器工作在ARM状态,为1时处理器工作在Thumb状态。7. ARM7TDMI支持哪几种指令集,各有什么特点?答:ARM7TDMI处理器内核包含2套指令系统,分别为ARM指令集和Thumb指令集,两种指令集的特点是:ARM指令集:处理器执行32位字对齐方式的ARM指令,每条ARM指令长度为32位,指令的功能强大。Thumb指令集:处理器执行16位字对齐方式的Thumb指令,每条Thumb指令长度为16位,是ARM指令功能的子集。8. ARM7处理器有哪些工作模式?如何实现不同模式之间的切换?举例说明。
答:ARM处理器供支持7种工作模式,分别为:用户模式(usr);快速中断模式(fiq);外部中断模式(irq);管理模式(svc);数据访问终止模式(abt);系统模式(sys);未定义指令中止模式(und)。在7中模式中,除用户模式外,其他的6种模式称为特权模式,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。特权模式下通过修改当前程序状态寄存器CPSR中控制位M[4:0]的值,来改变处理器的运行模式。例如MSR
CPSR_c,#(NoInt |SVC32Mode)//从系统模式切换到管理模式
CPSR_c,#(NoInt |SYS32Mode)//从管理模式切换到系统模式9. 描述ARM7处理器的内部寄存器结构,并分别说明快速中断FIQ有何特点?
答:ARM7微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。37个寄存器定义如下:⑴ 31个通用寄存器:R0~R15、R8_fiq、 R9_fiq、 R10_fiq、 R11_fiq、 R12_fiq、 R13_fiq、 R14_fiq、R13_svc、R14_svc、R13_abt、R14_abt、R13_und、R14_und、R13_irq、R14_irq。⑵ 6个状态寄存器:CPSR、SPSR_abt 、SPSR_svc 、SPSR_irq 、SPSR_fiq、 SPSR_und。快速中断FIQ,适用于对一个突发事件的快速响应,在ARM状态中,快中断有8个专用的寄存器,可以缩短状态切换时需要的时间。当CPSR中相应的F位清零,快速中断被使能。10. 什么是中断延时?在实时系统中如何计算中断延时时间?答:中断延时是系统响应一个中断所需要的时间,即从外部中断请求信号发出到执行对应的中断服务程序ISR的第1条指令所需要的时间。FIQ的中断延时计算,当FIQ使能时,最坏的延时包括:a) Tsyncmax:请求通过同步器的最长时间,为两个处理器周期。b) Tldm:最长执行时间,最长为20个周期。c) Texc:数据中止异常进入时间,为三个周期。d) Tfiq:FIQ进入时间,为两个周期总的延时可为27个周期。11. 在内存的数据存储过程中,什么是“字对齐”和“半字对齐”?答:在内存数据存储过程中,一般分为小端存储格式和大端存储格式。下面以小端存储格式为例来说明字对齐和半字对齐:在小端存储格式中,对于地址为A的字单元,其中字节的低位字节到高位字节地址顺序为A ,A+1 ,A+2,A+3;对于地址为A的半字单元,其中字节的低位字节到高位字节地址顺序为A ,A+1。12. 简述程序计数器(PC)在处理器工作中的作用。答:在ARM处理器中将PC程序计数器定义到R15寄存器,无论处理器处于何种状态,PC总是指向“正在取值”指令的地址。13. 简述ARM处理器中的返回链接寄存器(LR)在处理器工作中的作用。
答:链接寄存器LR用于保存子程序返回地址或者异常处理程序的返回地址,LR寄存器一共有6个,其中子程序的返回地址使用一个R14,每种异常模式各自有一个专用的LR寄存器用于保存异常处理程序的返回地址,它们分别为R14_fiq、R14_svc、R14_abt、R14_und、R14_irq。14. 分别简述ARM处理器中的CPSR、SPSR在处理器工作中的作用。
答:ARM内核包含1个CPSR和5个仅供异常处理模式使用的SPSR。由于所有模式全部共享一个程序状态寄存器CPSR,因此处理器所有的状态全部都保存在CPSR中,也就是ARM内核是通过CPSR来监视和控制内部操作的。每种异常模式都有一个对应的程序状态保存寄存器SPSR,用于保存任务在异常发生之前的CPSR状态的当前值。15. 结合CPSR的结构,说明程序状态字中各个bit位的作用。答:⑴条件代码标志(共计4bit)含义如下:N:运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z:指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;C:当进行加法运算,最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),最高位产生借位时C=0,否则C=1。V:当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V不变。⑵CPSR的最低8位为控制位,控制了处理器的工作方式。当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。它们分别是:中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映了处理器的当前状态:当位T=1时,处理器正在Thumb状态下运行;当位T=0时,处理器正在ARM状态下运行。模式位包括M[4:0]共计5bit,这些位决定处理器的操作模式16. 简述ARM7TDMI内部有哪些寄存器及特点。答:ARM7微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。37个寄存器定义如下:⑴ 31个通用寄存器:R0~R15、R8_fiq、 R9_fiq、 R10_fiq、 R11_fiq、 R12_fiq、 R13_fiq、R14_fiq、R13_svc、R14_svc、R13_abt、R14_abt、R13_und、R14_und、R13_irq、R14_irq。⑵ 6个状态寄存器:CPSR、SPSR_abt 、SPSR_svc 、SPSR_irq 、SPSR_fiq、 SPSR_und。特点:在ARM状态中,R0~R7是通用寄存器,是不分组寄存器;R8~R14,SPSR根据模式进行分组的寄存器;R15是程序计数器,不进行分组;CPSR是状态寄存器,不进行分组。17. 什么是ARM处理器的异常?ARM处理器中有哪几种异常?答:在ARM中,异常是一些事件,这些事件能导致正常的程序执行流程被暂时地停止,而进入到该事件对应的处理器异常模式并对该事件进行处理。ARM中定义了复位、未定义指令、SWI(软中断)、预取指终止、预取数终止、irq以及fiq等7种异常,与之对应地ARM7处理器有5种异常模式。18. 分别简述ARM7的IRQ、FIQ异常处理过程,说明其异常向量地址。
答:IRQ异常的处理流程如下:⑴ 进入IRQ异常模式。程序运行在用户模式下,当一个IRQ异常中断发生时,内核切换到“中断模式”,并自动的做如下处理。①将异常处理程序的返回地址保存到异常模式下的R14(R14_irq)中。②用户模式的CPSR将被保存到中断异常模式SPSR_irq中。③修改CPSR,将I置1,禁止新的IRQ中断产生,但不改变F值,不限制FIQ中断发生,清零T标志位,进入ARM状态,修改模式位,设置为IRQ模式。 ④将IRQ异常中断入口向量地址0x送入PC。⑤在IRQ模式下,用户模式的R13和R14将不能操作,而R13_irq和R14_irq可以操作,即R13_irq保存IRQ模式下的地址指针,R14_irq保存了“IRQ中断返回地址+4”。⑵
退出IRQ异常模式。中断服务程序执行完毕后,使用一条指令将返回地址送入PC,即可实现IRQ中断返回,在返回过程中处理器会自动将SPSR_irq中的内容复制到CPSR,恢复中断前的处理器状态。FIQ异常进入与退出的流程与IRQ类似,其异常入口地址是0x0000001C。19. ARM7处理器对哪些异常可以进行屏蔽?如何屏蔽或允许?答:FIQ和IRQ可以被屏蔽。将CPSR的标志位I和F分别置位对应着IRQ和FIQ中断被禁止,清零这些位又可以将其使能。20. 说明CPSR中T位的作用,ARM7处理器如何切换状态?答:CPSR中T标志位为0时处理器工作在ARM状态,为1时处理器工作在Thumb状态。由于ARM采用字对齐或者半字对齐的存储模式,这意味着地址的最低一个比特位就不会在寻址过程中使用到。故,使用地址的最低位进行区分,以何种模式取值和执行指令,当地址地位为1时,置CPSR的T位为1,反之,置位为0。21. 大端存储模式和小端存储模式的含义是什么?画出在0x2000单元中存储0x数据的大端存储模式和小端存储模式。答:大端存储模式:在大端存储格式中,对于地址为A的字单元,其中字节的低位字节到高位字节地址顺序为A+3,A+2,A+1,A;对于地址为A的半字单元,其中字节的低位字节到高位字节地址顺序为A+1,A。即数据的低字节存放在高地址中的顺序进行存储。小端存储模式:在小端存储格式中,对于地址为A的字单元,其中字节的低位字节到高位字节地址顺序为A ,A+1 ,A+2,A+3;对于地址为A的半字单元,其中字节的低位字节到高位字节地址顺序为A ,A+1。即数据的高字节存放在高地址中的顺序进行存储。0x20030x2000上图中,左侧为大端存储模式,右侧为小端存储模式。
嵌入式第二章课后习题相关文章
《》由(在点网)整理提供,版权归原作者、原出处所有。
Copyright &
All Rights Reserved.查看: 3737|回复: 3
新手必看,关于ARM的22个常用概念!
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间0 小时
1.ARM中一些常见英文缩写解释
MSB:最高有效位;
LSB:最低有效位;
AHB:先进的高性能总线;
VPB:连接片内外设功能的VLSI外设总线;
EMC:外部存储器控制器;
MAM:存储器加速模块;
VIC:向量中断控制器;
SPI:全双工串行接口;
CAN:控制器局域网,一种串行通讯协议;
PWM:脉宽调制器;
ETM:嵌入式跟踪宏;
CPSR:当前程序状态寄存器;
SPSR:程序保护状态寄存器;
2.MAM 使用注意事项:
答:当改变 MAM 定时值时,必须先通过向 MAMCR 写入 0 来关闭 MAM,然后将新值写入 MAMTIM。最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。
对于低于 20MHz 的系统时钟,MAMTIM 设定为 001。对于 20MHz 到 40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。郭老师qq
3.VIC 使用注意事项
答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。这样做是因为所有的异常向量都位于地址0x0及以上。通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。用户代码被连接以便使中断向量表装载到0x。
4. ARM启动代码设计
答:ARM启动代码直接面对处理器内核和硬件控制器进行编程,一般使用汇编语言。启动代码一般包括:
& & & & 中断向量表
& & & & 初始化存储器系统
& & & & 初始化堆栈初始化有特殊要求的端口、设备
& & & & 初始化用户程序执行环境
& & & & 改变处理器模式
& & & & 呼叫主应用程序
5.IRQ 和 FIQ 之间的区别
答:IRQ和FIQ是ARM处理器的两种编程模式。IRQ是指中断模式,FIR是指快速中断模式。对于 FIQ 你必须尽快处理你的事情并离开这个模式。IRQ 可以被 FIQ 所中断,但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以这种模式有更多的影子寄存器。FIQ 不能调用 SWI(软件中断)。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了,并应该是 IRQ 而不是 FIQ。
6.ARM处理器对异常中断的响应过程
答:ARM处理器对异常中断的响应过程如下所述:
& & & & 保存处理器当前状态、中断屏蔽位以及各条件标志位;
& & & & 设置当前程序状态寄存器CPSR中的相应位;
& & & & 将寄存器lr_mode设置成返回地址;
& & & & 将程序计数器值PC,设置成该异常中断的中断向量地址,跳转到相应异常中断处执行。
7.ARM指令与Thumb指令的区别
答:在ARM体系结构中,ARM指令集中的指令是32位的指令,其执行效率很高。对于存储系统数据总线为16位的应用系统,ARM体系提供了Thumb指令集。Thumb指令集是对ARM指令集的一个子集重新编码得到的,指令长度为16位。通常在处理器执行ARM程序时,称处理器处于ARM状态;当处理器执行Thumb程序时,称处理器处于Thumb状态。Thumb指令集并没有改变ARM体系地层的程序设计模型,只是在该模型上加上了一些限制条件。Thumb指令集中的数据处理指令的操作数仍然为32位,指令寻址地址也是32位的。
8.什么是ATPCS&
答:为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。这些规则包括寄存器使用规则,数据栈的使用规则,参数的传递规则等。
9.ARM程序和Thumb程序混合使用的场合
答:通常,Thumb程序比ARM程序更加紧凑,而且对于内存为8位或16位的系统,使用Thumb程序效率更高。但是,在下面一些场合下,程序必须运行在ARM状态,这时就需要混合使用ARM和Thumb程序。
强调速度的场合,应该使用ARM程序;
有些功能只能由ARM程序完成。如:使用或者禁止异常中断;
当处理器进入异常中断处理程序时,程序状态切换到ARM状态,即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断程序返回前,程序再切换到ARM状态。
ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,执行Thumb程序。
10.ARM处理器运行模式
答:ARM微处理器支持7种运行模式,分别为:
& & & & 用户模式(usr):ARM处理器正常的程序执行状态;
& & & & 快速中断模式(fiq):用于高速数据传输或通道管理;
& & & & 外部中断模式(irq):用于通用的中断处理;
& & & & 管理模式(svc):操作系统使用的保护模式;
& & & & 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;
& & & & 系统模式(sys):运行具有特权的操作系统任务;
& & & & 未定义指令中止模式(und):当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
11.ARM体系结构所支持的异常类型
答:ARM体系结构所支持的异常和具体含义如下(圈里面的数字表示优先级):
复位①:当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处执行(异常向量:0x);
未定义指令⑥:当ARM处理器或协处理器遇到不能处理的指令时,产生为定义异常。可使用该异常机制进行软件仿真(异常向量:0x);
软件中断⑥:有执行SWI指令产生,可用于用户模式下程序调用特权操作指令。可使用该异常机制实现系统功能调用(异常向量:0x);
指令预取中止⑤:若处理器的预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,当预取指令被执行时,才会产生指令预取中止异常(异常向量:0xC);
数据中止②:若处理器数据访问的指令的地址不存在,或该地址不允许当前指令访问,产生数据中止异常(异常向量:0x);
IRQ④(外部中断请求):当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可以该异常请求中断服务(异常向量:0x);
FIQ③(快速中断请求):当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常(异常向量:0xC)。
说明:其中异常向量0x为保留的异常向量。
12.ARM体系结构的存储器格式
答:ARM体系结构的存储器格式有如下两种:
& & 大端格式:字数据的高字节存储在低地址中,字数据的低字节存放在高地址中;
& & 小端格式:与大端存储格式相反,高地址存放数据的高字节,低地址存放数据的低字节。
13.ARM寄存器总结:
ARM有16个32位的寄存器(r0到r15)。
r15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址。
ARM有一个当前程序状态寄存器:CPSR。
一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq
ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。
14.存储器重新映射(Remap)的原因:
& & 使Flash存储器中的FIQ处理程序不必考虑因为重新映射所导致的存储器边界问题;
& & &用来处理代码空间中段边界仲裁的SRAM和Boot Block向量的使用大大减少;
& & &为超过单字转移指令范围的跳转提供空间来保存常量。
& & &ARM中的重映射是指在程序执行过程中通过写某个功能寄存器位操作达到重新分配其存储器地址空间的映射。一个典型的应用就是应用程序存储在Flash/ROM中,初始这些存储器地址是从0开始的,但这些存储器的读时间比SRAM/DRAM长,造成其内部执行频率不高,故一般在前面一段程序将代码搬移到SRAM/DRAM中去,然后重新映射存储器空间,将相应SRAM/DRAM映射到地址0,重新执行程序可达到高速运行的目的。
15.存储异常向量表中程序跳转使用LDR指令,而不使用B指令的原因:
& & LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳转;
& &芯片具有Remap功能。当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。
16.锁相环(PLL)注意要点:
& & PLL在芯片复位或进入掉电模式时被关闭并旁路,在掉电唤醒后不会自动恢复PLL的设定;
& & PLL只能通过软件使能;
& & PLL在激活后必须等待其锁定,然后才能连接;
& & PLL如果设置不当将会导致芯片的错误操作。
17.ARM7与ARM9的区别:
& & ARM7内核是0.9MIPS/MHz的三级流水线和冯&S226;诺伊曼结构;ARM9内核是五级流水线,提供1.1MIPS/MHz的哈佛结构。
& & ARM7没有MMU,ARM720T是MMU的;ARM9是有MMU的,ARM940T只有Memory protection unit.不是一个完整的MMU。
& & ARM7TDMI提供了非常好的性能——功耗比。它包含了Thumb指令集快速乘法指令和ICE调试技术的内核。ARM9的时钟频率比ARM7更高,采用哈佛结构区分了数据总线和指令总线。
18.VIC的基本操作如下:
答:设置IRQ/FIQ中断,若是IRQ中断则可以设置为向量中断并分配中断优先级,否则为非向量IRQ。然后可以设置中断允许,以及向量中断对应地址或非向量中断默认地址。当有中断后,若是IRQ中断,则可以读取向量地址寄存器,然后跳转到相应的代码。当要退出中断时,对向量地址寄存器写0,通知VIC中断结束。当发生中断时,处理器将会切换处理器模式,同时相关的寄存器也将会映射。
19.使用外部中断注意
& & 把某个引脚设置为外部中断功能后,该引脚为输入模式,由于没有内部上拉电阻,所以必须外接一个上拉电阻,确保引脚不被悬空;
& & 除了引脚连接模块的设置,还需要设置VIC模块,才能产生外部中断,否则外部中断只能反映在EXTINT寄存器中;
& & 要使器件进入掉电模式并通过外部中断唤醒,软件应该正确设置引脚的外部中断功能,再进入掉电模式。
20.UART0的基本操作方法
& & & & 设置I/O连接到UART0;
& & & & 设置串口波特率(U0DLM、U0DLL);
& & & & 设置串口工作模式(U0LCR、U0FCR);
& & & & 发送或接收数据(U0THR、U0RBR);
& & & & 检查串口状态字或等待串口中断(U0LSR)。
21.I2C的基本操作方法
答:I2C主机基本操作方法:
& & & & 设置I2C管脚连接;
& & & & 设置I2C时钟速率(I2SCLH、I2SCLL);
& & & & 设置为主机,并发送起始信号(I2CONSET的I2EN、STA位为1,AA位为0);
& & & & 发送从机地址(I2DAT),控制I2CONSET发送;
& & & & 判断总线状态(I2STAT),进行数据传输控制;
& & & & 发送结束信号(I2CONSET)。
& &I2C从机基本操作方法:
& & & & 设置I2C管脚连接;
& & & & 设置自身的从机地址(I2ADR);
& & & & 使能I2C(I2CONSET的I2EN、AA位为1);
& & & & 判断SI位或等待I2C中断,等待主机操作;
& & & & 判断总线状态I2STAT,进行数据传输控制。
& & &深圳专业嵌入式实训,包教会,免费试听体验Q&
22. & PWM基本操作方法:
& & & & 连接PWM功能管脚输出,即设置PINSEL0、PINSEL1;
& & & & 设置PWM定时器的时钟分频值(PWMPR),得到所要的定时器时钟;
& & & & 设置比较匹配控制(PWMMCR),并设置相应比较值(PWMMRx);
& & & & 设置PWM输出方式并允许PWM输出(PWMPCR)及锁存使能控制(PWMLER);
& & & & 设置PWMTCR,启动定时器,使能PWM;
& & & & 运行过程中要更改比较值时,更改之后要设置锁存使能。
& & & & 使用双边沿PWM输出时,建议使用PWM2、PWM4、PWM6;使用单边PWM输出时,在PWM周期开始时为高电平,匹配后为低电平,使用PWMMR0作为PWM周期控制,PWMMRx作为占空比控制。
在网上看到了这篇好文章,跟大家分享一下,希望对大家的学习有所帮助!
信盈达科技有限公司专业提供嵌入式、ARM、LINUX、Android、FPGA、PCB、单片机等高端软硬件技术方案设计和培训,公司具有雄厚的研发实力,多个分点,免费试听,包就业。欢迎咨询郭老师 QQ
主题帖子精华
中级会员, 积分 355, 距离下一级还需 145 积分
在线时间5 小时
多谢楼主
&留着慢慢看。。
拿什么让你自己信服 自己
主题帖子精华
中级会员, 积分 480, 距离下一级还需 20 积分
在线时间1 小时
楼主好贴!!!
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看)
ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
主题帖子精华
新手上路, 积分 46, 距离下一级还需 4 积分
在线时间2 小时
多谢楼主
mark
Powered by}

我要回帖

更多关于 arm的工作模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信