7343|9

241

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

Helper2416-15——裸机第七弹——ARM工作模式 & PSR简介 & 堆栈初始化 [复制链接]

裸机第七弹——ARM工作模式 & PSR简介 & 堆栈初始化

参与Helper2416开发板助学计划心得


简述ARM9的七种工作模式



1:用户模式(usr):ARM处理器正常的程序执行状态。
2:系统模式(sys):运行具有特权的操作系统任务。
3:管理模式(svc):操作系统使用的保护模式。
4:数据访问终止模式(sbt):当数据或指令预取终止时进入该模式,可用于与你存储及储存保护。
5:未定义指令终止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
6:中断模式(irq):用于通用的中断处理。
7:快速中断模式(fiq):用于高速数据传输或通道处理。

不同的模式可以通过软件来相互切换,或者发生各类中断和异常时处理器自动进入相应的模式

如上图所示:除usr模式以外的六种模式都属于特权模式,进入特权模式是为了处理中断、异常,或者访问被系统保护的资源,其实在操作系统下大部分程序是运行在usr模式下的。而对于特权模式中除sys模式以外的五种模式又被称为一场模式,顾名思义,就是处理各种异常的,一旦异常发生,处理器便会自动进入相应的异常模式。
需要说明的是:中断本身也就是一种异常

另外,ARM9同时还有两种工作状态。


1: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的值。

PSR简介



1:工作模式位:
指明CPU当前处于什么模式。可以编写这些位,使CPU进入指定的工作模式。



2:T标志位:
指明当前是处于ARM模式还是Thumb模式



3:中断禁止位:
A、I、F中断禁止位



4:条件标志位与ARM条件码的关系:



堆栈初始化
在实际使用中,我们都会用C开发,这就需要我们初始化好堆栈,由于各种工作模式中都有自己的SP寄存器,我们需要为每种工作模式(暂且将usr和sys模式看作一个模式)都设置好堆栈,


实现:
由于各种模式下的SP寄存器只能其对应的模式下才能被访问,所以我们需要先通过修改CPSR的值进入相应的模式,再设置他的堆栈,需要注意的是,CPSR中的工作模式位只能在特权模式下才能被修改。示例如下:


  1. @
  2. @ Set up the Stack for Undefined mode
  3. @
  4.          LDR   r0, =_stack                     @ Read the stack address
  5.          MSR   cpsr_c, #MODE_UND|I_F_BIT       @ switch to undef  mode
  6.          MOV   sp,r0                           @ write the stack pointer
  7.          SUB   r0, r0, #UND_STACK_SIZE         @ give stack space
  8. @
  9. @ Set up the Stack for abort mode
  10. @        
  11.          MSR   cpsr_c, #MODE_ABT|I_F_BIT       @ Change to abort mode
  12.          MOV   sp, r0                          @ write the stack pointer
  13.          SUB   r0,r0, #ABT_STACK_SIZE          @ give stack space
  14. @
  15. @ Set up the Stack for FIQ mode
  16. @      
  17.          MSR   cpsr_c, #MODE_FIQ|I_F_BIT       @ change to FIQ mode
  18.          MOV   sp,r0                           @ write the stack pointer
  19.          SUB   r0,r0, #FIQ_STACK_SIZE          @ give stack space
  20. @
  21. @ Set up the Stack for IRQ mode
  22. @      
  23.          MSR   cpsr_c, #MODE_IRQ|I_F_BIT       @ change to IRQ mode
  24.          MOV   sp,r0                           @ write the stack pointer
  25.          SUB   r0,r0, #IRQ_STACK_SIZE          @ give stack space
  26. @
  27. @ Set up the Stack for SVC mode
  28. @        
  29.          MSR   cpsr_c, #MODE_SVC|I_F_BIT       @ change to SVC mode
  30.          MOV   sp,r0                           @ write the stack pointer
  31.          SUB   r0,r0, #SVC_STACK_SIZE          @ give stack space
  32. @
  33. @ Set up the Stack for USer/System mode
  34. @      
  35.          MSR   cpsr_c, #MODE_SYS|I_F_BIT       @ change to system mode
  36.          MOV   sp,r0                           @ write the stack pointer
复制代码


论坛ID:yuanlai2010

发表时间:2014-07-22



最新回复

应该的呀 :)   详情 回复 发表于 2014-9-19 10:21
点赞 关注(1)

回复
举报

241

帖子

4

TA的资源

纯净的硅(初级)

沙发
 
本帖最后由 yuanlai2010 于 2014-7-22 16:29 编辑

论坛的编辑器不怎么会用,最后那两张图不知道怎么删除了。在编辑界面是看不到的,发表出来就有了!

点评

点击 编辑 然后 点击图片 就可以看到你多的那个图片了 去掉相应的就可以了。  详情 回复 发表于 2014-9-19 09:00
 
 

回复

554

帖子

0

TA的资源

版主

板凳
 
我也不会用!呵呵,试一下在编辑的时候图片里边去掉那两张图片看看?
 
个人签名My dreams will go on...
http://www.jyxtec.com
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

4
 
楼主第一个图是哪个文档里的?能分享一下吗?

点评

看了下是这篇文档 ,那张图出现的位置是在第43页。  详情 回复 发表于 2014-9-19 09:45
 
 
 

回复

2万

帖子

74

TA的资源

管理员

5
 
yuanlai2010 发表于 2014-7-22 16:27
论坛的编辑器不怎么会用,最后那两张图不知道怎么删除了。在编辑界面是看不到的,发表出来就有了!

点击  编辑  然后 点击图片  就可以看到你多的那个图片了 去掉相应的就可以了。

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!  详情 回复 发表于 2014-9-19 09:47
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

241

帖子

4

TA的资源

纯净的硅(初级)

6
 
sdwuyawen 发表于 2014-9-18 21:08
楼主第一个图是哪个文档里的?能分享一下吗?

看了下是这篇文档 ARMv5 Architecture Reference Manual.pdf (4.92 MB, 下载次数: 9) ,那张图出现的位置是在第43页。
 
 
 

回复

241

帖子

4

TA的资源

纯净的硅(初级)

7
 
soso 发表于 2014-9-19 09:00
点击  编辑  然后 点击图片  就可以看到你多的那个图片了 去掉相应的就可以了。

多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!

点评

刚刚帮你编辑了 :)  详情 回复 发表于 2014-9-19 09:55
 
 
 

回复

2万

帖子

74

TA的资源

管理员

8
 
yuanlai2010 发表于 2014-9-19 09:47
多谢SOSO姐支招,不过可惜的是现在这帖子已经不能编辑了!

刚刚帮你编辑了 :)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

SOSO姐人实在是太好了  详情 回复 发表于 2014-9-19 10:05
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

241

帖子

4

TA的资源

纯净的硅(初级)

9
 
soso 发表于 2014-9-19 09:55
刚刚帮你编辑了 :)

SOSO姐人实在是太好了

点评

应该的呀 :)  详情 回复 发表于 2014-9-19 10:21
 
 
 

回复

2万

帖子

74

TA的资源

管理员

10
 
yuanlai2010 发表于 2014-9-19 10:05
SOSO姐人实在是太好了

应该的呀 :)

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表