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