




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Bootloader代码分析报告徐 凯2007-8-3TOC o 1-3 h z u HYPERLINK l _Toc173943360 Bootloaader代码码分析报告 PAGEREF _Toc173943360 h 1 HYPERLINK l _Toc173943361 1.启动代码码分析 PAGEREF _Toc173943361 h 1 HYPERLINK l _Toc173943362 1.1.veector.s代码分析析 PAGEREF _Toc173943362 h 1 HYPERLINK l _Toc173943363 1.1.1.宏定义 PAGEREF _Toc17394
2、3363 h 5 HYPERLINK l _Toc173943364 1.1.3.判断是否是是thumbb指令 PAGEREF _Toc173943364 h 6 HYPERLINK l _Toc173943365 1.1.4.定义新程序序、引入新符符号 PAGEREF _Toc173943365 h 6 HYPERLINK l _Toc173943366 1.1.5.定义新程序序、引入新符符号 PAGEREF _Toc173943366 h 7 HYPERLINK l _Toc173943367 1.1.6.定义系统异异常向量表 PAGEREF _Toc173943367 h 7 HYPER
3、LINK l _Toc173943368 1.1.7.程序跳转宏宏定义 PAGEREF _Toc173943368 h 7 HYPERLINK l _Toc173943369 1.1.8.异常处理程程序定义 PAGEREF _Toc173943369 h 7 HYPERLINK l _Toc173943370 1.1.9.声明C主函数程序序入口 PAGEREF _Toc173943370 h 10 HYPERLINK l _Toc173943371 1.1.10.定义vecttor.s中中需要用到的的连接器变量量 PAGEREF _Toc173943371 h 10 HYPERLINK l _
4、Toc173943372 1.1.11.定义从FLAASH启动程程序的函数 PAGEREF _Toc173943372 h 11 HYPERLINK l _Toc173943373 1.2.syysinitt.s代码分分析 PAGEREF _Toc173943373 h 11 HYPERLINK l _Toc173943374 1.2.1.引入S3C45110相关系统统配置寄存器器的地址 PAGEREF _Toc173943374 h 18 HYPERLINK l _Toc173943375 1.2.2.定义用于配配置ROM和RAM的宏 PAGEREF _Toc173943375 h 18 H
5、YPERLINK l _Toc173943376 1.2.3.定义用于配配置SYSCCFG的宏 PAGEREF _Toc173943376 h 18 HYPERLINK l _Toc173943377 11.2.4.定义用于初初始化内存的的函数IniitMemoory PAGEREF _Toc173943377 h 18 HYPERLINK l _Toc173943378 1.2.5.定义用于初初始化内存的的函数IniitMemoory PAGEREF _Toc173943378 h 20 HYPERLINK l _Toc173943379 1.2.6.定义内存重重设置函数RResetMMem
6、Sett PAGEREF _Toc173943379 h 21 HYPERLINK l _Toc173943380 1.2.7.初始化21种中断源源响应函数IInitInnterruupt PAGEREF _Toc173943380 h 21 HYPERLINK l _Toc173943381 1.2.8.初始化18个外部I/OO端口函数InnitPorrt PAGEREF _Toc173943381 h 21 HYPERLINK l _Toc173943382 1.2.9.初始化2个计时器的的函数IniitTimeer PAGEREF _Toc173943382 h 22 HYPERLINK
7、 l _Toc173943383 1.2.10.初始化2个串口函数数InitUUart PAGEREF _Toc173943383 h 22 HYPERLINK l _Toc173943384 1.2.11.初始化栈函函数InittStackk PAGEREF _Toc173943384 h 23 HYPERLINK l _Toc173943385 1.2.12.系统初始化化函数IniitSysttem PAGEREF _Toc173943385 h 24 PAGE 48启动代码分析vector.s代码分析析由于连接器参数数中有-fiirst vvectorr.o,所以以先从这个文文件开始分析
8、析。首先,列列出源代码:ModeMassk EQU0 x1FSVC32MoodeEQU0 x13IRQ32MoodeEQU0 x12FIQ32MoodeEQU0 x11User32MModeEQU0 x10Abort322ModeEQU0 x17Undef322ModeEQU0 x1BIRQ_BITTEQU0 x80FIQ_BITTEQU0 x40;RomBasseAddrrEQU0RamBaseeAddrEQU&100;RamEnddAddr EQQU&200GBLSMaainEnttryMainEnttrySETSmainnIMPORT$MainnEntryy;*;鯡tassm.exee默
9、GBLL THUMMBCODEE CONFFIG = 16THUMBCOODE SEETLTRUEECODE32| THUMBCOODE SEETLFALSSE THUMBBCODECODE32 ;foor staart-upp codee for Thumbb modee ;*AREASeelfBooot,CODE,READOONLYIMPORTUDF_IINS_VEECTORIMPORTSWI_SSVC_VEECTORIMPORTINS_AABT_VEECTORIMPORTDAT_AABT_VEECTORIMPORTIRQ_SSVC_VEECTORIMPORTFIQ_SSVC_VEECTO
10、RENTRYIF :DEFF: |adds$verrsion|ELSEEXPORT_maiin_mainENDIFResetEnntrybSYS_RRST_HAANDLERRbUDF_IINS_HAANDLERRbSWI_SSVC_HAANDLERRbINS_AABT_HAANDLERRbDAT_AABT_HAANDLERRb.bIRQ_SSVC_HAANDLERRbFIQ_SSVC_HAANDLERR;*MACRO$LabelHANDLLER$Vecttor$Labelsublr, lr, #4stmfdssp!, r0-r33, lrldrr0, =$Veectorldrpc, r0ldm
11、fdssp!, r0-r33, pcMENDUDF_INSS_HANDDLERstmfdssp!, r0-r33, lrldrr0, =UDFF_INS_VECTOORmovlr, pcldrpc, r0ldmfdssp!, r0-r33, pcSWI_SVCC_HANDDLERstmfdssp!, r0-r33, lrldrr0, =SWII_SVC_VECTOORmovlr, pcldrpc, r0ldmfdssp!, r0-r33, pcINS_ABTT_HANDDLERsublr, lr, #4stmfdssp!, r0-r33, lrldrr0, =INSS_ABT_VECTOORm
12、ovlr, pcldrpc, r0ldmfdssp!, r0-r33, pcDAT_ABTT_HANDDLERsublr, lr, #4stmfdssp!, r0-r33, lrldrr0, =DATT_ABT_VECTOORmovlr, pcldrpc, r0ldmfdssp!, r0-r33, pcIRQ_SVCC_HANDDLERsublr, lr, #4stmfdssp!, r0-r112, lrrmrsr0, spsrrstmfdssp!, r0ldrr0, =IRQQ_SVC_VECTOORldrpc, r0FIQ_SVCC_HANDDLERsublr, lr, #4stmfdss
13、p!, r0-r112, lrrmrsr0, spsrrstmfdssp!, r0ldrr0, =IRQQ_SVC_VECTOORldrpc, r0;*SYS_RSTT_HANDDLERmrsr0, cpsrr;enteer svcc modee and disabble irrq,fiqqbicr0, r0, #ModeeMaskorrr0, r0, #(SVCC32Modde :ORR: IRQQ_BIT :OR: FIQ_BBIT)msrcpssr_c, r0IMPORTInitSSystemmblInittSysteemadrr0, ReseetEntrrymovr3, #(RaamB
14、aseeAddr16)ldrr1, BaseeOfROMMldrr2, TopOOfROMaddr1, r1, r3addr2, r2, r30ldmiarr0!, r4-r111stmiarr1!, r4-r111cmpr1, r2bcc%B00subr1, r1, r2subr0, r0, r1ldrr1, BaseeOfBSSSldrr2, BaseeOfZerroaddr1, r1, r3addr2, r2, r31cmpr1,r2ldrccrr4, rr0, #4strccrr4, rr1, #4bcc%B11movr0,#0ldrr2,EndOffBSSaddr2, r2, r33
15、cmpr1,r2strccrr0, rr1, #4bcc%B33IMPORTRemappMemorryadrr0, ReseetEntrryldrr1, =RemmapMemmoryldrr2, BaseeOfROMMsubr2, r1, r2addr0, r0, r2addr1, r2, r3movr2,#320ldrr3, r0, #4strr3, r1, #4subsr22, r2,#1bne%B00ldrlr,GotoMMain bRemappMemorry GotoMaiinDCD$MainnEntryy;*IMPORT|Imagge$ROO$Basse|; ROMM codee s
16、tarrtIMPORT|Imagge$ROO$Limmit|; RAMM dataa starrts affter RROM prrogrammIMPORT|Imagge$RWW$Basse|; Pree-inittialissed vaariabllesIMPORT|Imagge$ZII$Basse|; uniinitiaalisedd variiablessIMPORT|Imagge$ZII$Limmit|; Endd of vvariabble RAAM spaaceBaseOfRROMDCD|Imagge$ROO$Basse|TopOfROOMDCD|Imagge$ROO$Limmit
17、|BaseOfBBSSDCD|Imagge$RWW$Basse|BaseOfZZeroDCD|Imagge$ZII$Basse|EndOfBSSSDCD|Imagge$ZII$Limmit|;*TIP_SIZZEEQU256IMPORTResettMemSeetEXPORTtranss_to_bboottrans_tto_boootmovlr, r1; a2 = r1ldrr1, =RessetMemmSetldrr2, BaseeOfROMMsubr2, r1, r2addr0, r0, r2; a1 = r0movr2,#TIP_SIZE0ldrr3, r1, #4strr3, r0, #
18、4subsr22, r2,#1bne%B00subr0, r0, #TIP_SIZE*4movpc,r0;*END宏定义1ModeMMask EQU0 x1F2SVC322ModeEQU0 x133IRQ322ModeEQU0 x124FIQ322ModeEQU0 x115User332ModeeEQU0 x106Abortt32ModdeEQU0 x177Undeff32ModdeEQU0 x1B8IRQ_BBITEQU0 x809FIQ_BBITEQU0 x4010;RommBaseAAddrEQU011RamBBaseAdddrEQU&10012;RammEndAdddr EEQU&20
19、0行1定义了CPPSR中表示示模式位的55位。行2-7定义了了6种处理器器模式(除ssystemm模式)对应应的CPSRR位。行8-7定义了了CPSR中中FIQ与IIRQ置位。行10、12为为注释,行111定义了一一个宏,&的意义等等于DCD伪伪指令,其分分配一个字的的内存,并用用100初始始化该字的内内存,并使用用RomBaaseAdddr标志这段段内存的实际际地址。宏定义13GBLSSMainEEntry14MainnEntryySETSmainn15IMPOORT$MainnEntryy行13-15声声明了一个字字符串变量MMainEnntry,并并将其设置为为”main”,并引入外外部
20、符号”main”。判断是否是thhumb指令令18GBLLL TTHUMBCCODE19 CCONFIGG = 11620THUMMBCODEE SETLLTRUEE21CODEE3222| 23THUMMBCODEE SETLLFALSSE242526 THHUMBCOODE27CODEE32 ;for startt-up ccode ffor Thhumb mmode28 行18声明了逻逻辑变量THHUMBCOODE行19-24执执行了一个IIF ELSSE ENDDIF指令,CONFIG变量是 REF _Ref173902364 n h 1中第88页说明的汇编器域定义变量,如果其为32则
21、说明本文件采用ARM汇编器,相应地把THUMBCODE设置为FALSE,若为16则是使用thumb汇编器,相应地把THUMBCODE设置为TRUE。行26-28,强制执行32位的ARM指令,感觉很奇怪,应该是用CODE16命令才对。定义新程序、引引入新符号31AREAASelfBBoot,CODE,READOONLY3233IMPOORTUDF_IINS_VEECTOR34IMPOORTSWI_SSVC_VEECTOR35IMPOORTINS_AABT_VEECTOR36IMPOORTDAT_AABT_VEECTOR37IMPOORTIRQ_SSVC_VEECTOR38IMPOORTFIQ_S
22、SVC_VEECTOR行31定义了一一个新的程序序段SelffBoot。行33-38引引入了一系列列的符号,这这些符号在sysinnit.s中中定义并导出出。定义新程序、引引入新符号40ENTRRY41IF :DEF: |ads$versiion|42ELSEE43EXPOORT_maiin44_maain45ENDIIF行40首先声明明了程序的入入口根据 REF _Ref173902364 n h 1中第第89页的说说明,行411-45判断断程序是给AADS还是SSDT执行的的,如果是如果果是SDT,则则导出_mmain符号号,并开始定定义_maain函数的的开始。定义系统异常向向量表46R
23、eseetEntrry47bSYYS_RSTT_HANDDLER48bUDDF_INSS_HANDDLER49bSWWI_SVCC_HANDDLER50bINNS_ABTT_HANDDLER51bDAAT_ABTT_HANDDLER52b.53bIRRQ_SVCC_HANDDLER54bFIIQ_SVCC_HANDDLER行46-54定定义了系统异异常处理向量量表,并在vvectorr.o首次执执行时首先执执行行47的的代码。程序跳转宏定义义57MACRRO58$LabbelHANDLLER$Vecttor59$Labbel60sublr, llr, #4461stmffdsp!, r0-rr
24、3, lrr62ldrr0, =$Vecttor63ldrpc, r064ldmffdsp!, r0-rr3, pcc65MENDD行57-65定定义了一个有有1个参数的的宏HANDDLER,该该宏实现程序序跳转,跳转转到$Vecctor所指指向内存所保保存的内存地地址的值,执执行完该函数数后,恢复现现场,并返回回原来的状态态。异常处理程序定定义67UDF_INS_HHANDLEER68stmffdsp!, r0-rr3, lrr69ldrr0, =UDF_IINS_VEECTOR70movlr, ppc71ldrpc, r072ldmffdsp!, r0-rr3, pcc73SWI_SVC_
25、HHANDLEER74stmffdsp!, r0-rr3, lrr75ldrr0, =SWI_SSVC_VEECTOR76movlr, ppc77ldrpc, r078ldmffdsp!, r0-rr3, pcc79INS_ABT_HHANDLEER80sublr, llr, #4481stmffdsp!, r0-rr3, lrr82ldrr0, =INS_AABT_VEECTOR83movlr, ppc84ldrpc, r085ldmffdsp!, r0-rr3, pcc86DAT_ABT_HHANDLEER87sublr, llr, #4488stmffdsp!, r0-rr3, lrr8
26、9ldrr0, =DAT_AABT_VEECTOR90movlr, ppc91ldrpc, r092ldmffdsp!, r0-rr3, pcc93IRQ_SVC_HHANDLEER94sublr, llr, #4495stmffdsp!, r0-rr12, llr96mrsr0, sspsr97stmffdsp!, r098ldrr0, =IRQ_SSVC_VEECTOR99ldrpc, r0100FIQQ_SVC_HANDLLER101subblr, llr, #44102stmmfdsp!, r0-rr12, llr103mrssr0, sspsr104stmmfdsp!, r0105l
27、drrr0, =IRQ_SSVC_VEECTOR106ldrrpc, r0107108;*109SYSS_RST_HANDLLER110mrssr0, ccpsr;enteer svcc modee and disabble irrq,fiqq111biccr0, rr0, #MModeMaask112orrrr0, rr0, #(SVC322Mode :OR: IRQ_BBIT :OOR: FIIQ_BITT)113msrrcpsr_c, r00114115IMPPORTInitSSystemm116blInitSSystemm117118adrrr0, RResetEEntry119mov
28、vr3, #(RamBBaseAdddr116)120ldrrr1, BBaseOffROM121ldrrr2, TTopOfRROM122adddr1, rr1, r33123adddr2, rr2, r331240125ldmmiar0!, r4-rr11126stmmiar1!, r4-rr11127cmppr1, rr2128bccc%B0129130subbr1, rr1, r22131subbr0, rr0, r11132ldrrr1, BBaseOffBSS133ldrrr2, BBaseOffZero134adddr1, rr1, r33135adddr2, rr2, r331
29、361137cmppr1,r2138ldrrccr4, r0, #4139strrccr4, r1, #4140bccc%B1141142movvr0,#0143ldrrr2,EndOffBSS144adddr2, rr2, r331453146cmppr1,r2147strrccr0, r1, #4148bccc%B3149150IMPPORTRemappMemorry151152adrrr0, RResetEEntry153ldrrr1, =RemappMemorry154ldrrr2, BBaseOffROM155subbr2, rr1, r22156adddr0, rr0, r2215
30、7adddr1, rr2, r33158movvr2,#321590160ldrrr3, r0, #4161strrr3, r1, #4162subbsr2, rr2,#1163bnee%B0164165ldrrlr,GotoMMain 166bRRemapMMemoryy 行67-1666定义了7种种模式异常的的处理函数具体地:UDF_INSS_HANDDLER 执行UDF_INS_VVECTORR内存所保存存的指令后,返返回到异常发发生之前的状状态。类似,SWI_SVCC_HANDDLER, INS_ABTT_HANDDLER, DAT_ABTT_HANDDLER, IRQ_SVCC_HA
31、NDDLER, FIQ_SVCC_HANDDLER也执执行类似的操操作,执行XXX_XX_VECTOOR内存所保保存的指令,然然后返回到异异常发生之前前的状态。SYS_RSTT_HANDDLER异常常处理程序与与其它异常处处理程序有很很大不同,行110-1113使得处理理器进入SVVC模式,并并且禁止FIIQ与IRQQ。行115-1116使得程序序跳转到syysinitt.s中定义义的InittSysteem函数中执执行,并在执执行结束后返返回。IniitSysttem函数的的作用是进行行内存、堆栈栈、LED端端口、串口、定定时器以及中中断的初始化化工作,具体体讲解请参见见sysinnit.s
32、中中的分析( REF _Ref173943344 n h 1.2.112)。行118将异常常向量表ReesetEnntry的地地址保存入rr0。行119-1228将boootloadder的ROO段拷贝入内内存。行130-1440将boootloadder的RWW段拷贝入内存存。行142-1448将内存中中的ZI段初初始化为0。行150-1663将RemmapMemmory函数数拷贝入内存存中。行165将返回回地址进行设设置。行166执行RRemapMMemoryy函数(在syysinitt.s中定义义),RemappMemorry函数主要要是设置ROOMCON00、ROMCCON1和DRAM
33、CCON0、DRAMCCON1;并并将IRQ_SERVIICE函数的的地址存入一一个内存中的的数组中。RemapMeemory函函数执行完后后将跳入biios.c中中定义的maain函数。声明C主函数程程序入口168GottoMainnDCD$MainnEntryy行168声明了了GotoMMain标号号,其被定义义为变量$MaiinEntrry的值“main”定义vectoor.s中需需要用到的连连接器变量根据文献 REF _Ref173919864 n h 2第56-557页中的说说明,行1770-1811引入了由连连接器预定义义的变量值。170;*171IMPPORT|Imagge$RO
34、O$Basse|; ROMM codee starrt172IMPPORT|Imagge$ROO$Limmit|; RAMM dataa starrts affter RROM prrogramm173IMPPORT|Imagge$RWW$Basse|; Pree-inittialissed vaariablles174IMPPORT|Imagge$ZII$Basse|; uniinitiaalisedd variiabless175IMPPORT|Imagge$ZII$Limmit|; Endd of vvariabble RAAM spaace176177BasseOfROOMDCD|Im
35、agge$ROO$Basse|178ToppOfROMMDCD|Imagge$ROO$Limmit|179BasseOfBSSSDCD|Imagge$RWW$Basse|180BasseOfZeeroDCD|Imagge$ZII$Basse|181EnddOfBSSSDCD|Imagge$ZII$Limmit|定义从FLASSH启动程序序的函数184TIPP_SIZEEEQU256185186IMPPORTResettMemSeet187EXPPORTtranss_to_bboot188traans_too_boott189movvlr, rr1; a2 = r1190ldrrr1, =Res
36、ettMemSeet191ldrrr2, BBaseOffROM192subbr2, rr1, r22193adddr0, rr0, r22; a1 = r0194movvr2,#TIP_SIZE1950196ldrrr3, r1, #4197strrr3, r0, #4198subbsr2, rr2,#1199bnee%B0200201subbr0, rr0, #TTIP_SIIZE*4202movvpc,r0行184-2002定义了从从FLASHH固定地址BBIOS_LLOAD00 x10000启动程序的的函数,似乎乎是重新启动动的程序。sysinitt.s代码分分析首先列出syssini
37、t.s的源代码码INCLUDEEs3c45100.sRomBaseeAddrEQU0RomEndAAddrEQU&20RamBaseeAddrEQU&100RamEndAAddrEQU&200AREAteext, CCODE, READOONLYSFR_BASSEEQU0 x3fff;0 x3fff00000SRAM_BAASEEQU0 x3f8;0 x3f800000;EXPORTTInitMMemoryyInitMemmoryldrr0, =SYSSCFGldrr1, =SDRRAM_ITTF :ORR: SFRR_BASEE16 :OR: SRAM_BASE6 :OOR: CAACHE_
38、AALL :OOR: CAACHE_EENstrr1, r0ldrr0, =CLKKCONldrr1, =0strr1, r0ldrr0, =EXTTACON00ldrr1, =0 x00fff0ffffstrr1, r0ldrr0, =EXTTACON11ldrr1, =0 x00fff0ffffstrr1, r0ldrr0, =EXTTDBWTHHldrr1, =0 xfffff5556str r1, r0adrr0, MemCCfgParraldmiarr0, rr1-r111ldrr0, =ROMMCON0stmiarr0, rr1-r111movpc, r14MemCfgPParaD
39、CDRommBaseAAddr10 :OOR RommEndAdddr220 :ORR: &600;&1088400600DCD&1008420660DCD&1008420660DCD&1008420660DCD&1008420660DCD&1008420660DCDRammBaseAAddr10 :OOR: RaamEndAAddr20 :OOR: &3398;&1000003988DCD&1000403998DCD&1000403998DCD&1000403998DCD&cee2983ffd EXPORTRemappMemorryRemapMeemoryadrr0, RemaapMemPP
40、araldmiarr0, rr1-r111ldrr0, =ROMMCON0stmiarr0, rr1-r111nopnopldrr0, =IRQQ_SVC_VECTOORldrr1, =IRQQ_SERVVICE;IRQ_SVC_VVECTORR in rram, sso sett it aafter remappstr r1, r0movpc, r14RemapMeemParaaDCD&1220400660DCD&1008420660DCD&1008420660DCD&1008420660DCD&1008420660DCD&1008420660DCD&1000003998DCD&100040
41、3998DCD&1000403998DCD&1000403998DCD&cee2983ffdEXPORTResettMemSeetResetMeemSetadrr0, ReseetMemPParaldmiarr0, rr1-r111ldr r0, =ROMMCON0stmiarr0, rr1-r111nopnopmovpc, r14ResetMeemParaaDCD&2000000660DCD&0000000660DCD&0000000660DCD&0000000660DCD&0000000660DCD&0000000660DCD&0000000000DCD&0000000000DCD&000
42、0000000DCD&0000000000DCD&0000083ffd;*InitIntterrupptldrr0, =INTTMSKldrr1, =0 x33ffffffstrr1, r0;disaable aall innterruuptmovpc,r14;*InitPorrtldrr0, =IOPPMODldrr1, =1strr1, r0;all inputt but p0 ouutputldrr0, =IOPPCONldrr1, =0strr1, r0;disaable XXIRQ 00-3, ddma reeq,ackk, timmer 0,1 outtputldrr0, =IOP
43、PDATAldr r1, r0;readd inpuut dattamovpc, r14;*InitTimmerldrr0, =TMOODldrr1, =0strr1, r0;disaable ttimer 0,1movpc, r14;*UART_DIIV_CNTT0EQU26UART_DIIV_CNTT1EQU0InitUarrtldrr0, =ULCCON0ldrr1, =DATTA8b :OR: SSTOPb11 :OR PARITTY_NOstrr1, r0ldrr00, =UCCON0ldrr11, =RXX_STATT_INT|9strr11, r00ldrr00, =UBBRDI
44、V00ldrr11, =UAART_DIIV_CNTT04|UART_DIV_CCNT1strr11, r00;if UUART_DDIV_CNNT1=xxxx0 bbaud rrate = MCLKK/(UARRT_DIVV_CNT00+1)/116;if UAART_DIIV_CNTT1=xxxx1 baaud raate = MCLK/(UARTT_DIV_CNT0+1)/166/16ldrr00, =URRXBUF00ldrr11, r00;readd rx ddataldrr00, =ULLCON1ldrr11, =DAATA8b :OR: STOPbb1 :ORR PARIITY_
45、NOOstrr11, r00ldrr00, =UCCON1ldrr11, =RXX_STATT_INT|9strr11, r00ldrr00, =UBBRDIV11ldrr11, =UAART_DIIV_CNTT04|UART_DIV_CCNT1strr11, r00;if UUART_DDIV_CNNT1=xxxx0 bbaud rrate = MCLKK/(UARRT_DIVV_CNT00+1)/116;if UAART_DIIV_CNTT1=xxxx1 baaud raate = MCLK/(UARTT_DIV_CNT0+1)/166/16ldrr00, =URRXBUF11ldrr11
46、, r00;readd rx ddatamovpcc, r144;*InitStaackmrsr00, cpssrbicr00, r0, #PSRR_MODEE_MASKKorrr11, r0, #PSRR_UNDEEF_MODDE|NO_INTmsrcppsr_cxxsf, rr1;UndeefModeeldrspp,=UnddefStaackorrr11, r0, #PSRR_ABORRT_MODDE|NO_INTmsrcppsr_cxxsf, rr1;AborrtModeeldrspp, =AbbortSttackorrr11, r0, #PSRR_IRQ_MODE|NO_INNTmsr
47、cppsr_cxxsf, rr1;IRQMModeldrspp, =IRRQStacckorrr11, r0, #PSRR_FIQ_MODE|NO_INNTmsrcppsr_cxxsf, rr1;FIQMModeldrspp, =FIIQStacckorrr11, r0, #PSRR_SVC_MODE|NO_INNTmsrcppsr_cxxsf, rr1;SVCMModeldrspp, =SVVCStacckmovpcc, r144;*EXPORTTInitSSystemmInitSysstemmovr112, r114blIniitMemooryblIniitStacckblIniitPor
48、ttblIniitUarttblIniitTimeerblIniitInteerruptt;ldrrr0, =00 x110000000 ;CCache Flushh ;movrr1, #00;movrr2, #2256 ;1;strrr1, rr0, #4;subsr2, rr2, #11;bne%B1movpcc, r122;*IRQ_SERRVICE;usinng I_IISPR rregistter. IMPORTTpIrqSStartIMPORTTpIrqFFinishhIMPORTTpIrqHHandleer;nopp;ldrrr0, =TMOD;ldrrr1,r0;anddr1,
49、r1, #&37;strrr1, r0ldrr44, =INNTOFFSSET ldrrr4, r4 movvr1, rr4, lssr #2 movvr0, #1 movvr0, rr0, lssl r1 ldrrr1, =INTPNND strrr0, r1;cleaar intterruppt pennding bit ldrrr1, =pIrqSStart ldrrr1, r1 cmppr1, #0 movvnelr, ppc; .+88 movvnepc, rr1 ldrrr1, =pIrqHHandleer ldrrr1, r1 cmppr1, #0 movvnelr, ppc m
50、ovvnepc, rr1 ldrr11, =pIIrqFinnishldrr11, r11cmpr11, #0movnelr, ppc; .+88movnepc, rr1cmpr00, #0movnelr, ppcmovnepc, rr0 ldmfdsp!, r0;IRQmsrsppsr_cxxsf, rr0ldmfdsp!, r0-rr12, ppc;*AREA HHiVecttor, DDATA, READWWRITE_RAM_ENND_ADDDREQU0 x0100000000(_RAAM_ENDD_ADDRR-0 x6000)UserStaack#256;xxxxxxa00SVCSta
51、cck#256;xxxxxxb00UndefSttack#256;xxxxxxc00AbortSttack#256;xxxxxxd00IRQStacck#256;xxxxxxe00FIQStacck#0;xxxxxxf00MAP(_RAM_EEND_ADDDR-0 xx100)SYS_RSTT_VECTTOR#4UDF_INSS_VECTTOR#4SWI_SVCC_VECTTOR#4INS_ABTT_VECTTOR#4DAT_ABTT_VECTTOR#4RESERVEED_VECCTOR#4IRQ_SVCC_VECTTOR#4FIQ_SVCC_VECTTOR#4EXPORTTSYS_RRST_
52、VEECTOREXPORTTUDF_IINS_VEECTOREXPORTTSWI_SSVC_VEECTOREXPORTTINS_AABT_VEECTOREXPORTTDAT_AABT_VEECTOREXPORTTRESERRVED_VVECTORREXPORTTIRQ_SVVC_VECCTOREXPORTTFIQ_SSVC_VEECTOREND引入S3C45510相关系系统配置寄存存器的地址1INCLUUDEs3c45100.s引入s3c45510.s文文件后,syysinitt.s就包含含了很多与处处理器相关的的配置寄存器器的地址, 从而可以在在后续的配置置程序中方便便引用。定义用于配置RR
53、OM和RAAM的宏3RomBaaseAdddrEQU04RomEnndAddrrEQU&205RamBaaseAdddrEQU&1006RamEnndAddrrEQU&200行3-6定义的的这些宏将用于于初始化MeemCfgPPara内存存表,用于初初始化ROMMCON0和和DRAMCCON0配置置寄存器。定义用于配置SSYSCFGG的宏8AREAtext, CODEE, REAADONLYY910SFR_BASEEQU0 x3fff;0 x3fff0000011SRAMM_BASEEEQU0 x3f8;0 x3f800000行8定义一段代代码textt,该段将放放入RO段。行10-11定定义
54、了2个宏宏,用于对SSYSCFGG寄存器进行行初始化。定义用于初始化化内存的函数数InitMMemoryy14InittMemorry15ldrr0, =SYSCFFG16ldrr1, =SDRAMM_ITF :OR: SFR_BBASE16 :OOR: SRRAM_BAASE66 :OR: CACHHE_ALLL :OR: CACHHE_EN17strr1, r01819ldrr0, =CLKCOON20ldrr1, =021strr1, r02223ldrr0, =EXTACCON024ldrr1, =0 x0ffff0ffff25strr1, r026ldrr0, =EXTACCON12
55、7ldrr1, =0 x0ffff0ffff28strr1, r02930ldrr0, =EXTDBBWTH31ldrr1, =0 xfffff55632str r1, r03334adrr0, MMemCfggPara35ldmiiar0, r1-r11136ldrr0, =ROMCOON037stmiiar0, r1-r1113839movpc, rr144041MemCCfgParra42DCDRomBaaseAdddr100 :OR RomEnndAddrr20 :OR: &60;&108840060043DCD&10844206044DCD&10844206045DCD&108442
56、06046DCD&10844206047DCD&10844206048DCDRamBaaseAdddr100 :OR: RamEEndAdddr200 :OR: &3988;&100000398849DCD&10044039850DCD&10044039851DCD&10044039852DCD&ce29983fd 行16定义了要要设置给SYYSCFG寄寄存器的值,根据 REF _Ref173923182 n h 3,设置的值有以下含义:SDRAM_IITF 0 x8000000000 表明使用的的是SDRAAMSFR_BASSE 0 x3fff 表明speccial rregistter b
57、aand baase poointerr的地址是00 x3ff00000SRAM_BAASE 0 x3f8 表明iinternnal SRRAM baase poointerr的地址是00 x3f800000行19-21设设置芯片的时时钟,将CLKCOON寄存器设设置为全0,采用non-divided clock行23-25将将EXTACCON0寄存存器设置为00 x0ffff0fff,即将exteernal I/O bband 00、1的TCCOS, TTACS, TCOH, TACCC都设置为77个主时钟周周期。行26-28将将EXTACCON1寄存器设置置为0 x0ffff0ffff,即
58、将eexternnal I/O bannd 2、3的TCOSS, TACCS, TCCOH, TTACC都设设置为7个主主时钟周期。行30-32将将EXTDBBWTH寄存存器设置为00 xfffff556,即ROM BANK00的dataa bus为为16位,SSDRAM的的data bus宽度度为32位。行34-37设设置ROMCCON0RREFEXTTCON这111个寄存器器,特别地,设设置ROMCCON0的起起始地址为00 x0,结束束地址为0 xx2000000-1,DDRAMCOON0的起始始位置位置00 x10000000,结结束0 x200000000-1。行39返回子程程序In
59、ittMemorry的调用处地址。行41-52定定义了一段数数组。定义用于初始化化内存的函数数InitMMemoryy54EXPOORTRemappMemorry55RemaapMemoory56adrr0, RRemapMMemParra57ldmiiar0, r1-r11158ldrr0, =ROMCOON059stmiiar0, r1-r11160nop61nop62ldrr0, =IRQ_SSVC_VEECTOR63ldrr1, =IRQ_SSERVICCE;IRQ_SVC_VVECTORR in rram, sso sett it aafter remapp64str r1, r06
60、566movpc, rr146768RemaapMemPPara69DCD&12044006070DCD&10844206071DCD&10844206072DCD&10844206073DCD&10844206074DCD&10844206075DCD&10000039876DCD&10044039877DCD&10044039878DCD&10044039879DCD&ce29983fd行54声明全局局函数RemmapMemmory。行56-59设设置ROMCCON0RREFEXTTCON这111个寄存器器,特别地,设设置ROMCCON0的起起始地址为00 x10000000,结结束地址为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年塑料半成品、辅料合作协议书
- 2025年工业自动调节仪表与控制系统项目合作计划书
- 2025年铝包钢导线合作协议书
- 高端购物中心收银员服务期限协议
- 生态保护科研项目经费管理及审计合同
- 理财产品投资者适当性补充协议
- 生物医药产业基地女员工职业健康与安全保障协议
- 城市更新改造项目工程总承包及配套设施拆迁补偿协议
- 电子设备进出口代理与知识产权保护合同
- 知识产权交易平台资金存管安全保密补充协议
- 耳石症的诊断与治疗
- 2024年度合作框架协议:国际能源公司与当地政府新能源项目合作
- 信息系统安全审计合同模板
- 企业形象设计(CIS)战略策划及实施计划书
- 个人保证无纠纷承诺保证书
- 银行保洁服务合同样本
- 19G522-1钢筋桁架混凝土楼板图集
- 2023年上半年中级信息系统监理师下午真题
- 农学专业深度解析模板
- 储罐内喷铝施工方案
- 2024年江西省高考地理真题(解析版)
评论
0/150
提交评论