欢迎来到天天文库
浏览记录
ID:15325293
大小:94.00 KB
页数:46页
时间:2018-08-02
《mini2440启动代码详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Mini2440启动代码详解;=====================================================================;;NAME:2440INIT.S;DESC:Cstartupcodes;Configurememory,ISR,stacks;InitializeC-variables;HISTORY:;2002.02.25:kwtark:ver0.0;2002.03.20:purnnamu:AddsomefunctionsfortestingSTOP,Sleepmode;2003.03.14:DonGo:Mod
2、ifiedfor2440.;;Mini2440启动代码详解,非本人注释,集大家之长!;;个人主页http://591881218.qzone.qq.com/;;=====================================================================;GET类似于C语言的include,option.inc文件内定义了一些全局变量,memcfg.inc文件内定义了关于内存bank的符号和数字常量,2440addr.inc文件内定义了用于汇编的s3c2440寄存器变量和地址GEToption.incGETmemcfg.
3、incGET2440addr.inc;SDRAM自刷新位,把寄存器REFRESH的第22位置1BIT_SELFREFRESHEQU(1<<22);CPSR中的低5位定义了处理器的七种工作模式,为以后切换模式时使用;Pre-definedconstantsUSERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1f;CPSR中的I位和F位置1,表示禁止任何中断NOINTEQU0xc0;定义了7种处理器模式下的栈的起始地址
4、,其中用户模式和系统模式共有一个栈空间;ThelocationofstacksUserStackEQU(_STACK_BASEADDRESS-0x3800);0x33ff4800~SVCStackEQU(_STACK_BASEADDRESS-0x2800);0x33ff5800~UndefStackEQU(_STACK_BASEADDRESS-0x2400);0x33ff5c00~AbortStackEQU(_STACK_BASEADDRESS-0x2000);0x33ff6000~IRQStackEQU(_STACK_BASEADDRESS-0x1000);0x
5、33ff7000~FIQStackEQU(_STACK_BASEADDRESS-0x0);0x33ff8000~;ARM处理器的两种工作状态:16位和32位;编译器有相对应的用16位和32位两种编译方式;这段的目的是统一目前的处理器工作状态和软件编译方式;Checkiftasm.exe(armasm-16...@ADS1.0)isused.GBLLTHUMBCODE;声明一个全局逻辑变量[{CONFIG}=16THUMBCODESETL{TRUE}CODE32;指示编译器为ARM指令
6、THUMBCODESETL{FALSE}];宏定义,在后面出现MOV_PC_LR
7、时,这个宏会被自动展开;该宏的作用是跳出子程序,返回被调用处;"["相当于if;"
8、"相当于else;"]"相当于endifMACROMOV_PC_LR[THUMBCODEbxlr
9、movpc,lr]MEND;该宏定义的作用是有条件地(当Z=1时)跳出子程序,返回被调用处MACROMOVEQ_PC_LR[THUMBCODEbxeqlr
10、moveqpc,lr]MEND;该宏定义是把中断服务程序的首地址装载到pc中;在后面当遇到HandlerXXXHANDLERHandleXXX时,该宏被展开;注意:HANDLER前的符号HandlerXXX比其后的符号HandleX
11、XX多了一个r;HandlerXXX为ARM体系中统一定义的几种异常中断;HandleXXX为每个ARM处理器各自定义的中断,见该文件最后部分的中断向量表MACRO$HandlerLabelHANDLER$HandleLabel$HandlerLabelsubsp,sp,#4;decrementsp(tostorejumpaddress);ATPCS规定数据栈为FD类型;即栈指针指向栈顶元素,数据栈向内存地址减小的方向增长;该语句是使栈地址减小4个字节,以留出空间装载中断服务函数首地址stmfdsp!,{r0};PUSHtheworkregistertostack
12、(lrdo
此文档下载收益归作者所有