bootloader代碼分析報告_第1頁
bootloader代碼分析報告_第2頁
bootloader代碼分析報告_第3頁
bootloader代碼分析報告_第4頁
bootloader代碼分析報告_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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.定義系統(tǒng)異異常向量表 PAGEREF _Toc173943367 h 7 HYPER

3、LINK l _Toc173943368 1.1.7.程序跳轉(zhuǎn)宏宏定義 PAGEREF _Toc173943368 h 7 HYPERLINK l _Toc173943369 1.1.8.異常處理程程序定義 PAGEREF _Toc173943369 h 7 HYPERLINK l _Toc173943370 1.1.9.聲明C主函數(shù)程序序入口 PAGEREF _Toc173943370 h 10 HYPERLINK l _Toc173943371 1.1.10.定義vecttor.s中中需要用到的的連接器變量量 PAGEREF _Toc173943371 h 10 HYPERLINK l _

4、Toc173943372 1.1.11.定義從FLAASH啟動程程序的函數(shù) PAGEREF _Toc173943372 h 11 HYPERLINK l _Toc173943373 1.2.syysinitt.s代碼分分析 PAGEREF _Toc173943373 h 11 HYPERLINK l _Toc173943374 1.2.1.引入S3C45110相關(guān)系統(tǒng)統(tǒng)配置寄存器器的地址 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.定義用于初初始化內(nèi)存的的函數(shù)IniitMemoory PAGEREF _Toc173943377 h 18 HYPERLINK l _Toc173943378 1.2.5.定義用于初初始化內(nèi)存的的函數(shù)IniitMemoory PAGEREF _Toc173943378 h 20 HYPERLINK l _Toc173943379 1.2.6.定義內(nèi)存重重設置函數(shù)RResetMMem

6、Sett PAGEREF _Toc173943379 h 21 HYPERLINK l _Toc173943380 1.2.7.初始化21種中斷源源響應函數(shù)IInitInnterruupt PAGEREF _Toc173943380 h 21 HYPERLINK l _Toc173943381 1.2.8.初始化18個外部I/OO端口函數(shù)InnitPorrt PAGEREF _Toc173943381 h 21 HYPERLINK l _Toc173943382 1.2.9.初始化2個計時器的的函數(shù)IniitTimeer PAGEREF _Toc173943382 h 22 HYPERLINK

7、 l _Toc173943383 1.2.10.初始化2個串口函數(shù)數(shù)InitUUart PAGEREF _Toc173943383 h 22 HYPERLINK l _Toc173943384 1.2.11.初始化棧函函數(shù)InittStackk PAGEREF _Toc173943384 h 23 HYPERLINK l _Toc173943385 1.2.12.系統(tǒng)初始化化函數(shù)IniitSysttem PAGEREF _Toc173943385 h 24 PAGE 48啟動代碼分析vector.s代碼分析析由于連接器參數(shù)數(shù)中有-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偽偽指令,其分分配一個字的的內(nèi)存,并用用100初始始化該字的內(nèi)內(nèi)存,并使用用RomBaaseAdddr標志這段段內(nèi)存的實際際地址。宏定義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執(zhí)執(zhí)行了一個IIF ELSSE ENDDIF指令,CONFIG變量是 REF _Ref173902364 n h 1中第88頁說明的匯編器域定義變量,如果其為32則

21、說明本文件采用ARM匯編器,相應地把THUMBCODE設置為FALSE,若為16則是使用thumb匯編器,相應地把THUMBCODE設置為TRUE。行26-28,強制執(zhí)行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首先聲明明了程序的入入口根據(jù) REF _Ref173902364 n h 1中第第89頁的說說明,行411-45判斷斷程序是給AADS還是SSDT執(zhí)行的的,如果是如果果是SDT,則則導出_mmain符號號,并開始定定義_maain函數(shù)的的開始。定義系統(tǒng)異常向向量表46R

23、eseetEntrry47bSYYS_RSTT_HANDDLER48bUDDF_INSS_HANDDLER49bSWWI_SVCC_HANDDLER50bINNS_ABTT_HANDDLER51bDAAT_ABTT_HANDDLER52b.53bIRRQ_SVCC_HANDDLER54bFIIQ_SVCC_HANDDLER行46-54定定義了系統(tǒng)異異常處理向量量表,并在vvectorr.o首次執(zhí)執(zhí)行時首先執(zhí)執(zhí)行行47的的代碼。程序跳轉(zhuǎn)宏定義義57MACRRO58$LabbelHANDLLER$Vecttor59$Labbel60sublr, llr, #4461stmffdsp!, r0-rr

24、3, lrr62ldrr0, =$Vecttor63ldrpc, r064ldmffdsp!, r0-rr3, pcc65MENDD行57-65定定義了一個有有1個參數(shù)的的宏HANDDLER,該該宏實現(xiàn)程序序跳轉(zhuǎn),跳轉(zhuǎn)轉(zhuǎn)到$Vecctor所指指向內(nèi)存所保保存的內(nèi)存地地址的值,執(zhí)執(zhí)行完該函數(shù)數(shù)后,恢復現(xiàn)現(xiàn)場,并返回回原來的狀態(tài)態(tài)。異常處理程序定定義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種種模式異常的的處理函數(shù)具體地:UDF_INSS_HANDDLER 執(zhí)行UDF_INS_VVECTORR內(nèi)存所保存存的指令后,返返回到異常發(fā)發(fā)生之前的狀狀態(tài)。類似,SWI_SVCC_HANDDLER, INS_ABTT_HANDDLER, DAT_ABTT_HANDDLER, IRQ_SVCC_HA

31、NDDLER, FIQ_SVCC_HANDDLER也執(zhí)執(zhí)行類似的操操作,執(zhí)行XXX_XX_VECTOOR內(nèi)存所保保存的指令,然然后返回到異異常發(fā)生之前前的狀態(tài)。SYS_RSTT_HANDDLER異常常處理程序與與其它異常處處理程序有很很大不同,行110-1113使得處理理器進入SVVC模式,并并且禁止FIIQ與IRQQ。行115-1116使得程序序跳轉(zhuǎn)到syysinitt.s中定義義的InittSysteem函數(shù)中執(zhí)執(zhí)行,并在執(zhí)執(zhí)行結(jié)束后返返回。IniitSysttem函數(shù)的的作用是進行行內(nèi)存、堆棧棧、LED端端口、串口、定定時器以及中中斷的初始化化工作,具體體講解請參見見sysinnit.s

32、中中的分析( REF _Ref173943344 n h 1.2.112)。行118將異常常向量表ReesetEnntry的地地址保存入rr0。行119-1228將boootloadder的ROO段拷貝入內(nèi)內(nèi)存。行130-1440將boootloadder的RWW段拷貝入內(nèi)存存。行142-1448將內(nèi)存中中的ZI段初初始化為0。行150-1663將RemmapMemmory函數(shù)數(shù)拷貝入內(nèi)存存中。行165將返回回地址進行設設置。行166執(zhí)行RRemapMMemoryy函數(shù)(在syysinitt.s中定義義),RemappMemorry函數(shù)主要要是設置ROOMCON00、ROMCCON1和DRAM

33、CCON0、DRAMCCON1;并并將IRQ_SERVIICE函數(shù)的的地址存入一一個內(nèi)存中的的數(shù)組中。RemapMeemory函函數(shù)執(zhí)行完后后將跳入biios.c中中定義的maain函數(shù)。聲明C主函數(shù)程程序入口168GottoMainnDCD$MainnEntryy行168聲明了了GotoMMain標號號,其被定義義為變量$MaiinEntrry的值“main”定義vectoor.s中需需要用到的連連接器變量根據(jù)文獻 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啟動程序序的函數(shù)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啟動程序的的函數(shù),似乎乎是重新啟動動的程序。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相關(guān)系系統(tǒng)配置寄存存器的地址1INCLUUDEs3c45100.s引入s3c45510.s文文件后,syysinitt.s就包含含了很多與處處理器相關(guān)的的配置寄存器器的地址, 從而可以在在后續(xù)的配置置程序中方便便引用。定義用于配置RR

53、OM和RAAM的宏3RomBaaseAdddrEQU04RomEnndAddrrEQU&205RamBaaseAdddrEQU&1006RamEnndAddrrEQU&200行3-6定義的的這些宏將用于于初始化MeemCfgPPara內(nèi)存存表,用于初初始化ROMMCON0和和DRAMCCON0配置置寄存器。定義用于配置SSYSCFGG的宏8AREAtext, CODEE, REAADONLYY910SFR_BASEEQU0 x3fff;0 x3fff0000011SRAMM_BASEEEQU0 x3f8;0 x3f800000行8定義一段代代碼textt,該段將放放入RO段。行10-11定定義

54、了2個宏宏,用于對SSYSCFGG寄存器進行行初始化。定義用于初始化化內(nèi)存的函數(shù)數(shù)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寄寄存器的值,根據(jù) 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,結(jié)束束地址為0 xx2000000-1,DDRAMCOON0的起始始位置位置00 x10000000,結(jié)結(jié)束0 x200000000-1。行39返回子程程序In

59、ittMemorry的調(diào)用處地址。行41-52定定義了一段數(shù)數(shù)組。定義用于初始化化內(nèi)存的函數(shù)數(shù)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聲明全局局函數(shù)RemmapMemmory。行56-59設設置ROMCCON0RREFEXTTCON這111個寄存器器,特別地,設設置ROMCCON0的起起始地址為00 x10000000,結(jié)結(jié)束地址為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論