- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一起学mini2440裸机开发(二)--MDK自带的S3C2440.s分析
上一节,咱们在建立工程的时候,默认的是使用MDK自带的启动代码,这些启动代码到底做了什么工作呢?在这里我想探究一下,探究不全没什么事,能看懂个大概就行了。
?? 我先申明一下,其实我并不是头一次学ARM裸机,我先前已经按照韦东山的使用arm-linux-gcc在linux下编译裸机程序的方法走了一遍了,用那个方法的话对以后的uboot移植非常有帮助,但是有一个不方便的就是,使用Linux系统下编译裸机程序,很多自带的库函数不能用,比如print()函数我都不能用,主要是我的水平不行,不会用,其实可以用的。所以现在想认真的再用编译器学一下ARM裸机,裸机学好了,对驱动开发很有帮助的。
? 所以,很可能我讲的可能细节上照顾不到没接触过ARM裸机的,在此深感抱歉。我也只是想把自己的学习弄成笔记而已。
? 言归正传,下面进行S3C2440.s的分析,初学者这一节可以略过。
1、首先,了解一下这个文件都要完成那些功能。
???? ①看门狗初始化(可以选择是否初始化)
???? ②时钟初始化(可以选择是否初始化)
???? ③存储控制器初始化(可以选择是否初始化)
???? ④GPIO口初始化(可以选择是否初始化)
???? ⑤堆栈初始化(没有选择性,必须初始化)
???? ⑥跳转到C文件的main函数执行
2、其实知道上面文件做了哪些工作就行了,下面具体分析一下
????
;/*****************************************************************************/;/* S3C2440.S: Startup file for Samsung S3C2440??????????????????????????????? */;/*****************************************************************************/;/*
;*启动代码S3C2440.S是在CPU复位后执行的。这个文件会根据以下的
;*SET标志来进行翻译执行。
;*NO_CLOCK_SETUP:启动代码不初始化时钟(这种情况大多出现在时钟已经在script.ini文件中初始化时)
;*NO_MC_SETUP:启动代码不初始化寄存器控制器。
;*NO_GP_SETUP:启动代码不初始化GPIO口
;* RAM_INTVEC:启动代码将异常向量表从执行地址处复制到RAM中去
?
CPSR中的低8位。I:IRQ中断禁止位,置位禁止。F:FIQ中断禁止位,置位禁止。 T:CPU状态位(ARM或者THUMB)。M4-M0:工作模式选择位
7 6 5 4 3 2 1 0 I F T M4 M3 M2 M1 M0 ?
程序状态寄存器的格式 M[4:0] 工作模式 10000 用户模式 10001 快中断模式 10010 中断模式 10011 管理模式 10111 数据访问中止模式 11011 未定义指令中止模式 11111 系统模式 ;状态寄存器CPSR中的标准的模式位和中断位的宏定义
Mode_USR??????? EQU???? 0x10???;用户模式Mode_FIQ??????? EQU???? 0x11?????;快中断模式Mode_IRQ??????? EQU???? 0x12????;中断模式Mode_SVC??????? EQU???? 0x13???;管理模式Mode_ABT??????? EQU???? 0x17???;数据访问中止模式Mode_UND??????? EQU???? 0x1B??;未定义指令中止模式Mode_SYS??????? EQU???? 0x1F???;系统模式
I_Bit?????????? EQU???? 0x80????????????; when I bit is set, IRQ is disabledF_Bit?????????? EQU???? 0x40????????????; when F bit is set, FIQ is disabled
;栈(Stack)设置。不同工作模式的堆栈寄存器sp不一样。
;设置栈空间
UND_Stack_Size? EQU???? 0?;未定义模式SVC_Stack_Size? EQU???? 0?;管理模式栈长度ABT_Stack_Size? EQU???? 0?;数据访问中止模式栈长度FIQ_Stack_Size? EQU???? 0??;快中断模式
文档评论(0)