下载此文档

启动代码详细解析.doc


文档分类:IT计算机 | 页数:约20页 举报非法文档有奖
1/20
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/20 下载此文档
文档列表 文档介绍
ARM的裸跑试验差不多了,准备上操作系统,可是上操作系统之前还要先搞定Bootloader,Bootloader的第一部分就是汇编代码,也就是启动代码,其实一开始搞裸跑实验的就已经看过启动代码,看着那一句句都是由汇编语句构成的代码,感觉很难,再加上我是在Bootloader启动好得基础上去跑裸跑代码的,所以当时就没深究,可是这块总是一个空白,而现在学Bootloader的时候再次接触了它,于是下定决心一定要把它完全解析透彻,我用的S3C6410,但是6410这方面的资料很少,再加上以前并没有接触过ARM的汇编,对ARM的汇编指令不怎么了解,所以就准备先将最简单的44b0的启动代码搞定,在44b0的基础上在去解析6410的启动代码,经过了一周的奋战终于将44b0的启动代码解析完毕,在解析代码的过程中,学到了很多知识,首先然我熟悉了ARM的指令,比如LDR、STR、CMP等等,以前看到就晕的汇编在现在看来,变得可爱多了,并且顺带也掌握了ARM的指令编码方式,其实解析完44b0的启动代码后,回想一下,其中最难理解的地方就是中断,次之是代码的搬运,它和加载与运行时地址有关,下面准备开始看6410的启动代码,今天先将44b0的启动代码注释笔记贴出,有兴趣的朋友可以看看,呵呵!!;*******************************************************;*NAME:*;*Version:*;*Description:*;*Cstartupcodes*;*Configurememory,InitializeISR,stacks*;*InitializeC-variables*;*Fillzerosintozero-initializedC-variables*;*******************************************************GET..\inc\..\inc\;InterruptControl中断寄存器地址《田凯文》INTPNDEQU0x01e00004INTMODEQU0x01e00008INTMSKEQU0x01e0000cI_ISPREQU0x01e00020I_CMSTEQU0x01e0001c;Watchdogtimer看门狗控制寄存器地址《田凯文》WTCONEQU0x01d30000;ClockController时钟控制寄存器地址《田凯文》PLLCONEQU0x01d80000CLKCONEQU0x01d80004LOCKTIMEEQU0x01d8000c;MemoryController存储器寄存器地址《田凯文》REFRESHEQU0x01c80024BWSCONEQU0x01c80000;Pre-definedconstants处理器预定义常量《田凯文》USERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1fNOINTEQU0xc0;IRQ、FIQ中断禁止《田凯文》;用来判断是用16位指令集还是32位指令集《田凯文》GBLLTHUMBCODE[{CONFIG}=16THUMBCODESETL{TRUE}CODE32|THUMBCODESETL{FALSE}][THUMBCODECODE32;forstart-upcodeforThumbmode]MACRO;宏定义开始,P128《田凯文》;这个宏的功能就是先将r0寄存器中的值存入栈中,接着又将中断函数的入口地址《田凯文》;以r0为中转,存入数据栈中,再通过栈还原r0的值,接着将存入栈中的中断函数的入口地址《田凯文》;取出,送给PC,以实现中断函数的跳转《田凯文》;如果是IRQ中断并且是非向量中断,就会跳转到标号IsrIRQ处,然后再跳转到中断二级向量表《田凯文》;如果是向量中断则通过这一步,直接跳转到中断二级向量表《田凯文》;非向量中断跳转流程:bHandlerIRQ->HandlerIRQHANDLERHandleIRQ->IsrIRQ->^_ISR_STARTADDRESS《田凯文》;向量中断跳转流程:VECTOR_BRANCH->$HandlerLabelHANDLER$HandleLabel->^_ISR_STARTADDRESS《田凯文》;向量中断比非向量中断少了一个IsrIRQ《田凯文》$HandlerLabelHANDLER$HandleLabel;宏名为HANDLER,参数为$HandleLabel《田凯文》$HandlerLabel;这里定义了一个标

启动代码详细解析 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数20
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mkjafow
  • 文件大小43 KB
  • 时间2020-06-19