资源描述:
《初学者看S3C2440启动代码.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、GEToption.inc;定义了一些全局变量GETmemcfg.inc ;BANK0~BANK7的初始化等GET2440addr.inc;寄存器地址以上部分相当于C语言的include,是在启动代码中学要用到的文件。接下来是第一几种工作模式,我就不复制了。。 ;ThelocationofstacksUserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800~SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800~UndefStack EQ
2、U (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00~AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000~IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000~FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000~Thelocationofstacks翻译下,不废话。 ;Checkiftasm.exe(armasm-16...@ADS1.0)isused
3、. GBLL THUMBCODE [{CONFIG}=16THUMBCODESETL {TRUE} CODE32
4、THUMBCODESETL {FALSE} ]这段的目的是统一处理器工作状态和软件编译方式 接下来定义了三个宏,什么是宏呢,准确的定义可以去百度,我感觉就是不占内存的函数,你可觉得我说的不对,可以指正。但目前我就是这么觉得的。前两个没什么好说的,第三个宏需要讲一下。MACRO$HandlerLabelHANDLER$HandleLabel$HandlerLabel sub sp,sp,#4 ;decrem
5、entsp(tostorejumpaddress) stmfd sp!,{r0} ;PUSHtheworkregistertostack(lrdoesnotpushbecauseitreturntooriginaladdress) ldr r0,=$HandleLabel;loadtheaddressofHandleXXXtor0 ldr r0,[r0] ;loadthecontents(serviceroutinestartaddress)ofHandleXXX str r0,[sp,#4] ;storeth
6、econtents(ISR)ofHandleXXXtostack ldmfd sp!,{r0,pc} ;POPtheworkregisterandpc(jumptoISR) MEND汇编的问题,堆栈了什么的我也不懂,你如果懂的话给我留言啊,大意是当遇到HandlerXXX就会去展开HandleXXX(前面的比后面的多个r有没有),有人就会问为什么啊,HandlerXXX是异常中断向量有没有是定义在bank0的0x0的有没有,HandleXXX地址可查(_ISR_STARTADDRESS=0x33FF_FF00中断基地址)这么做的
7、原因就是bank0只能用4K有没有。算了,不懂再慢慢研究去吧,问我也不是很明白。(有废话了) IMPORT
8、Image$$RO$$Base
9、 ;BaseofROMcodeIMPORT
10、Image$$RO$$Limit
11、 ;EndofROMcode(=startofROMdata)IMPORT
12、Image$$RW$$Base
13、 ;BaseofRAMtoinitialiseIMPORT
14、Image$$ZI$$Base
15、 ;BaseandlimitofareaIMPORT
16、Image$$ZI$$Limit
17、 ;tozeroini
18、tialise
19、Image$$RO$$Base
20、。。。这几个奇怪的变量是编译器产生的,在前期设置时就已经赋值,有人会问为什么没有
21、Image$$RW$$Limit
22、捏,是因为RW和ZI是必须挨着的,RW的尾巴就是ZI的头哦 IMPORT MMU_SetAsyncBusModeIMPORT MMU_SetFastBusMode ;IMPORT Main ;ThemainentryofmonprogramIMPORT RdNF2SDRAM ;CopyImagefromNandFlashtoSDRAM 导入了几个外部文件的函数可以goto去
23、看下,初学应该不怎么能看懂,反正我是没看懂 下面是好几个入口,意思就是从不同的地方跳到这里捏1.ENTRY2.__ENTRY3.ResetEntry;不多说 ENDIAN_CHANGE这个变量option.