資源描述:
《2410啟動(dòng)代碼startup.s分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、啟動(dòng)代碼start.s(相當(dāng)于bootloader的前端代碼),開(kāi)機(jī)就執(zhí)行的代碼,即0x0000處放置的代碼。給CPU一個(gè)合適的工作環(huán)境。面向CPU內(nèi)核和外圍硬件,所以一般用匯編編寫(xiě)。1、在起始地址分配中斷向量表即中斷處理函數(shù)(CPU要求的),以為向量空間只有4字節(jié),所以一般只是一個(gè)跳轉(zhuǎn)指令,去別處執(zhí)行。2、之后初始化存儲(chǔ)器系統(tǒng)3、初始多個(gè)模式下的堆棧(模式切換時(shí),硬件給SP置位)4、初始化有特殊要求的外圍設(shè)備,如LED燈、看門(mén)狗5、初始化用戶(hù)的執(zhí)行環(huán)境(在FLASH中運(yùn)行太慢了,把代碼整體搬遷到RAM中)6、切換處理器的工作模式7、調(diào)用主程序(沒(méi)見(jiàn)到有
2、存儲(chǔ)控制器的配置代碼,也沒(méi)見(jiàn)到有時(shí)鐘初始化代碼)下面分析,所給的2410的啟動(dòng)代碼實(shí)現(xiàn)了以上的那些功能,實(shí)現(xiàn)得顯然不全,或者不需要,或者在工程代碼的其它部分實(shí)現(xiàn)。讀程序時(shí)注意,所有程序都是逐行順序執(zhí)行的,要看清跳轉(zhuǎn)指令。GET2410addr.s//用到了2410addr.s中的寄存器地址宏定義;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SomeARM920CPSRbitdiscriptions;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3、;;;;;;;;;;;;;;;;;;;;;;;Pre-definedconstants//預(yù)定義的變量,一下后續(xù)代碼中使用方便,與CPSR相關(guān)USERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1fNOINTEQU0xc0I_Bit*0x80F_Bit*0x40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MMURegist
4、erdiscription;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;p15CP15;c0CN0;c1CN1;c2CN2;c3CN3CtrlMMU*1CtrlAlign*2CtrlCache*4CtrlWBuff*8CtrlBigEnd*128CtrlSystem*256CtrlROM*512;initializationL0isMMUFULL_ACCESS,DOMAIN,SECTIONTLB_L0_INIT*0x0C02;;;;;;;;;;;;;;;;;;;;;;;;;;;
5、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Starthere//執(zhí)行代碼從這里開(kāi)始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//IMPORT,定義表示這是一個(gè)外部變量的標(biāo)號(hào),不是在本程序定義的//EXPORT,表示本程序里面用到的變量提供給其他模塊調(diào)用的。//以上兩個(gè)在匯編和C語(yǔ)言混合編程的時(shí)候用到AREAInit,CODE,READONLYIMPORT__use_no_semihosting_swiIMPORTEnter_UNDEF//有點(diǎn)e
6、xtern的感覺(jué)IMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQENTRY//這是程序的入口//中斷/異常向量表(跳轉(zhuǎn)),上電第一條就執(zhí)行bColdReset,跳轉(zhuǎn)到ColdReset。bColdResetbEnter_UNDEF;UndefinedInstructionbEnter_SWI;syscall_handlerorSWIbEnter_PABORT;PrefetchAbortbEnter_DABORT;DataAbortb.;ReservedHandlerbIR
7、Q_Handler;IRQHandlerbEnter_FIQ;FIQHandler;dealwithIRQinterruptEXPORTIRQ_Handler//IRQ中斷處理子程序IRQ_HandlerIMPORTISR_IrqHandler//服務(wù)程序在外部定義STMFDsp!,{r0-r12,lr}BLISR_IrqHandler//跳轉(zhuǎn)至服務(wù)程序LDMFDsp!,{r0-r12,lr}SUBSpc,lr,#4;=======;ENTRY;=======EXPORTColdResetColdReset//上電執(zhí)行復(fù)位異常函數(shù),就跳轉(zhuǎn)到這里來(lái)ldrr
8、0,=WTCON;watchdogdisable//關(guān)閉看門(mén)狗,還沒(méi)初始化完系統(tǒng)