欢迎来到天天文库
浏览记录
ID:44290674
大小:188.17 KB
页数:16页
时间:2019-10-20
《Bootloader注解及深入剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、完全讲解,深入剖析。;NAME:2440INIT.S;完全注释;HISTORY:;2002.02.25:kwtark:ver0.0;2002.03.20:purnnamu:AddsomefunctionsfortestingSTOP,Sleepmode;2003.03.14:DonGo:Modifiedfor2440.;200906.24:TinkoModified;汇编不能使用include包含头文件,所有用Get;汇编也不认识貧h文件,所有只能用*.incGEToption.inc;定义芯片相关的配
2、置GETmemcfg.inc淀义存储器配置GET2440addr.inc;定义了寄存器符号;REFRESH寄存器[22]bit:0-autorefresh;1・selfrefreshBIT_SELFREFRESHEQU(1«22);用于节电模式中,SDRAM自动刷新;处理器模式常量:CPSR寄存器的后5位决定目前处理器模式M[4:0]EQU0x10EQU0x11EQUOx12EQUOx13EQU0x17EQUOxlbEQUOx1fUSERMODEFIQMODEIRQMODESVCMODEABORTMOD
3、EUNDEFMODEMODEMASKNOINTEQUOxcO;定义处理器各模式下堆栈地址常量UserStackEQU(_STACK_BASEADDRESS-0x3800);0x33ff4800~_STACK_BASEADDRESS定义在option.inc中SVCStackEQU(_STACK_BASEADDRESS-0x2800);0x33ff5800〜UndefStackEQU(_STACK_BASEADDRESS-0x2400);Ox33ff5cO()〜AbortStackEQU(_STACK_B
4、ASEADDRESS-0x2000);0x33ff6000〜IRQStackEQU(_STACK_BASEADDRESS-0xl000);0x33ff7000~FIQStackEQU(_STACK_BASEADDRESS-0x0);0x33ff8000~处理器有两种工作状态l.arm:32位这种工作状态下执行字对准的arm指令2.Thumb:16位这种工作状;态执行半字对准的Thumb指令;因为处理器分为16位32位两种工作状态程序的编译器也是分16位和32两种编译方式所以下面的程序用;于根据处理器工作
5、状态确定编译器编译方式;codel6伪指令指示汇编编译器后面的指令为16位的thumb指令;code32伪指令指示汇编编译器后面的指令为32位的arm指令;Arm上电时处于ARM状态,故无论指令为ARM集或Thumb集,都先强制成ARM集,待init.s初始化完成后;再根据用户的编译配置转换成相应的指令模式。为此,定义变量THUMBCODE作为指示,跳转到main之前;根据其值切换指令模式■;这段是为了统一目前的处理器工作状态和软件编译方式(16位编译环境使用tasm.exe编译;Checkiftasm
6、.exe(armasm-16...@ADS1.0)isused.GBLLTHUMBCODE淀义THUMBCODE全局变量注意EQU所定义的宏与变量的区别[{CONFIG}=16;如果发现是在用16位代码的话(编译选项中指定使用thumb指令)THUMBCODESETL{TRUE};一方面把THUMBCODE设置为TURECODE32;另一方面暂且把处理器设置成为ARM模式,以方便初始化I;(
7、表示else)如果编译选项本来就指定为ARM模式THUMBCODESETL{FALSE);把THUMBCODE设
8、置为FALSE就行了;结束MACRO;一个根据THUMBCODE把PC寄存的值保存到LR的宏MOV_PC_LR;宏名称ITHUMBCODE;如果定义了THUMBCODE,贝I」bxlr;在ARM模式中要使用BX指令转跳到THUMB指令,并转换模式.bx指令会根据PC最后1位来确定是否进入thumb状态I;否则,movpc,lr;如果目标地址也是ARM指令的话就采用这种方式]MEND;宏定义结束标志MACRO;和上面的宏一样,只是多了一个相等的条件MOVEQ_PC_LR[THUMBCODEbxeqlrIm
9、oveqpejr]MEND;下面这个宏是用于第一次查表过程的实现中断向量的重定向,如果你比较细心的话就是发现;®_ISR_STARTADDRESS=Ox33FF_FFOO里定义的第一级中断向量表是采用型如Handle***的方式的.;而在程序的ENTRY处(程序开始处)采用的是bHandle严*的方式.;在这里Handler***就是通过HANDLER这个宏和Handle*枠建立联系的.;这种方式的优点就是正真定义的向量数据在内存空间里,而
此文档下载收益归作者所有