mini2440启动代码分析
astrotycoon
这个作者很懒,什么都没留下…
展开
-
mini2440启动代码分析之第二篇(着重理解$HandlerLabel HANDLER $HandleLabel宏)
接下来的代码如下(注黑色为源程序,蓝色为解说部分代码):MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;减少sp(用于存放转跳地址)实质上是在计算返回地址,用来存储PC地址 stmfd sp!,{r0} ;把将要使用的r0寄存器入栈转载 2012-06-14 20:53:09 · 2116 阅读 · 0 评论 -
mini2440启动代码分析之第五篇(中断向量表)
;中断向量表一般位于启动代码的开始部分,它是用户程序与启动代码之间以及启动代码的各部分之间联系的纽带。它由一个一个的跳转函数组成,它就象一个普通的散转函数,只不过散转的过程中有硬件机制参与,当系统发生异常时,ARM 处理器会通过硬件机制强制将PC 指针指向中断向量表中对应的异常跳转函数存储的地址,然后程序会跳转到相应的中断服务程序去执行。(别忘了前篇有个复位b ResetHandler )转载 2012-06-14 20:55:54 · 1188 阅读 · 0 评论 -
arm汇编中的literal pools .
literal pools是一个用于存储32bit数据的字池,由于机器码的操作数operand2只有12位,所以其能操作的立即数是及其有限的,因此不得不使用一个literal pools来配合指令执行操作。这样一个ldr指令就有可能需要两个32bit的存储空间来完成一个任务。 如果一段代码中需要访问字池时,编译器首先寻找现有的字池,看看里面是否有想要的数据,如果没有则自动在代码段结尾处创建一个字池转载 2012-06-23 10:12:31 · 2289 阅读 · 0 评论 -
[ARM]ldr 和 adr 伪指令的区别
一.首先熟悉几个arm地址相关的概念:首先arm地址有三个地址概念:编译地址、 期望运行物理地址、实际运行物理地址、相对地址、绝对地址、位置无关 编译地址 :编译阶段的生成地址,其是相对地址 ,有些地址还没确定,如调用其他.O文件中的函数或库函数期望运行物理地址 :链接阶段生成的地址(期望绝对地址 ),会确定编译阶段没有确定的地址,并会根据链接器假设期望的程序烧录运转载 2012-06-23 01:33:04 · 1165 阅读 · 0 评论 -
mini2440启动代码分析之第十篇
;堆栈初始化的顺序决定系统最后运行在哪种处理器模式,最后初始化哪种模式的堆栈,系统就运行在哪种模式。InitStacks mrs r0,cpsr bic r0,r0,#MODEMASK ;屏蔽低5位 orr r1,r0,#UNDEFMODE|NOINT ;屏蔽6、7位和选择未定义模式 msr cpsr_cxsf,r1 ;UndefMode转载 2012-06-14 21:05:52 · 868 阅读 · 0 评论 -
mini2440启动代码分析之第九篇
;========================================================================================== ;下面这段代码进行复制前的判断,因为从 NAND Flash 与从NOR Flash 启动的复制过程是大不相同的。这段程序能在nor nand flash 运行,也可以在内存中运行。在nor nand flash转载 2012-06-14 21:03:05 · 797 阅读 · 0 评论 -
mini2440启动代码分析之第四篇(入口程序分析)
从这里开始就是真正的代码入口了!接上篇代码:AREA Init,CODE,READONLY ;声明一个名为Init的代码段,只读 ENTRY ;程序的入口点,(调试用) ;ENTRY只是定义一个普通的入口点,且在程序中可以多处定义,如果要使用它作为整个映像文件的唯一转载 2012-06-14 20:54:54 · 875 阅读 · 0 评论 -
mini2440启动代码分析之第三篇(IMPORT)
接上篇,代码如下:IMPORT |Image$$RO$$Base| ; Base of ROM code; ROM code(也就是代码)的开始地址 IMPORT |Image$$RO$$Limit| ; ROM code的结束地址(=ROM data的开始地址) IMPORT |Image$$RW$$Base| ; Base of RAM to ini转载 2012-06-14 20:54:00 · 742 阅读 · 0 评论 -
mini2440启动代码(1)
http://blog.chinaunix.net/uid/26435987/frmd/151967.html启动代码主要是在主程序运行之前初始化系统硬件及软件的运行环境,它的主要功能包括以下的几个方面:1、建立中断向量表2、初始化系统堆栈3、应用程序执行环境初始化4、跳转至主函数第一部分 GET option.inc ;option.inc文件包含转载 2012-06-14 20:29:39 · 848 阅读 · 0 评论 -
|Image$$RO$$Base|解析
这篇文章是从网上摘录的,觉得蛮有用的,所以保存下来IMPORT |Image$$RO$$Base| ; Base of ROM codeIMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)IMPORT |Image$$RW$$Base| ; Base of RAM to initialiseIMPORT转载 2012-06-14 21:09:15 · 2909 阅读 · 0 评论 -
mini2440启动代码分析之第十一篇(完结)
ENTER_SLEEP ldr r0,=REFRESH ldr r1,[r0] ;r1=rREFRESH orr r1, r1, #BIT_SELFREFRESH str r1, [r0] ;Enable SDRAM self-refresh mov r1,#16转载 2012-06-14 21:06:49 · 864 阅读 · 0 评论 -
mini2440启动代码分析之第七篇(ResetHandler和存储控制寄存器初始化)
LTORG ;用于声明一个数据缓冲池,也叫文字池;=============================================================================上电和复位后,程序开始从位于0x0 执行b ResetHandler 程序跳转到这里执行,将看门狗,中断之类的程序关掉,以免打扰初始化程序的进行。; ENTR转载 2012-06-14 20:57:28 · 979 阅读 · 0 评论 -
mini2440启动代码分析之第六篇(DCD与二次查表判中断类型)
;通过设置CP15 的C1 的位7,设置存储格式为Bigendian,三种总线方式ChangeBigEndian ,下面是改变大小端的程序,这里采用直接定义机器码的方式 [ ENTRY_BUS_WIDTH=32 DCD 0xee110f10 ;0xee110f10 => mrc p15,0,r0,c1,c0,0 DCD 0xe3800080 ;0xe380转载 2012-06-14 20:56:54 · 1222 阅读 · 0 评论 -
mini2440启动代码分析之第八篇(清空SDRAM)
接上篇程序:;-------------------------------------------------------------------------------------- ;------ When EINT0 is pressed, Clear SDRAM ;--------------------------------------------转载 2012-06-14 21:02:28 · 818 阅读 · 0 评论 -
ARM的向量中断和非向量中断
转:http://www.awuit.com/arm-vector-non-vectored-interrupts/ 向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单。 向量者,矢量也,即指方向,门路。 向量中断——由硬件提供中断服务程序入口地址转载 2012-06-25 21:43:03 · 920 阅读 · 0 评论