資源描述:
《2410init.s的分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、;=========================================;NAME:2410INIT.S;DESC:Cstartupcodes;Configurememory,ISR,stacks;InitializeC-variables;HISTORY:;2002.02.25:kwtark:ver0.0;2002.03.20:purnnamu:AddsomefunctionsfortestingSTOP,POWER_OFFmode;2002.04.10:SJS:subinterruptdisable0x3f
2、f->0x7ff;2002.11.29:Kong:DCDBANKSIZEResiger0x32->0xb2(ARMcoreburstenable);=========================================;/************************************此頭文件的功能***********************************/;1.屏蔽所有中斷,關(guān)看門狗。;2.根據(jù)工作頻率設(shè)置PLL寄存器;3.初始化存儲(chǔ)控制相關(guān)寄存器;4.初始化各模式下的棧指針;5.設(shè)置缺省
3、中斷處理函數(shù);6.將數(shù)據(jù)段拷貝到RAM中,將零初始化數(shù)據(jù)段清零;7.跳轉(zhuǎn)到C語言Main入口函數(shù)中;由于注者水平有限,注解中難免有不正確或不恰當(dāng)?shù)牡胤?,歡迎指正。mail:walw_very@126.com;*****************************************************************************/本匯編語言程序包含option.inc,memcfg.inc,2410addr.inc,通常啟動(dòng)代碼是在2410init.s匯編文件;特殊功能寄存器定義在2410a
4、ddr.s;MemoryBank配置在mencfg.s;還有系統(tǒng)的選項(xiàng)等在option.s文件GEToption.inc;GETmemcfg.inc;此處GET相當(dāng)于C語言中的includeGET2410addr.inc;BIT_SELFREFRESHEQU(1<<22);ram的自刷新設(shè)置位,相當(dāng)于c里面#defineBIT_SELFREFRESH??(1<<22),就是第22位置1/*********************************************************************
5、*******CPSR中決定當(dāng)前CPU工作模式的末5位代碼ARM有7種模式,用戶模式,快速中斷模式,中斷模式,管理模式,中止模式,未定義模式和系統(tǒng)模式。系統(tǒng)堆棧的初始化主要是給各個(gè)處理器模式分配堆??臻g。堆棧是為中斷或程序跳轉(zhuǎn)服務(wù)的,當(dāng)發(fā)生中斷或程序跳轉(zhuǎn)時(shí),需要將當(dāng)前處理器的狀態(tài)及一些參數(shù)保持在堆棧中,當(dāng)中斷處理完畢以后或程序執(zhí)行完后返回時(shí),再將堆棧保存的現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行恢復(fù),以保證原來的程序正確運(yùn)行****************************************************************
6、**************/USERMODEEQU0x10;//用戶模式FIQMODEEQU0x11;//快速中斷模式IRQMODEEQU0x12;//外部中斷模式SVCMODEEQU0x13;//管理模式ABORTMODEEQU0x17;//中止模式UNDEFMODEEQU0x1b;//未定義的模式MODEMASKEQU0x1f;//中斷屏蔽?NOINTEQU0xc0;//沒有中斷?;ThelocationofstacksCPU在不同工作模式下對(duì)應(yīng)的堆棧區(qū)。;_STACK_BASEADDRESS是棧區(qū)基地址;_STAC
7、K_BASEADDRESS已經(jīng)在Option.s/Option.inc中定義,在這里的值為0x33ff8000UserStackEQU(_STACK_BASEADDRESS-0x3800);0x33ff4800~SVCStackEQU(_STACK_BASEADDRESS-0x2800);0x33ff5800~UndefStackEQU(_STACK_BASEADDRESS-0x2400);0x33ff5c00~AbortStackEQU(_STACK_BASEADDRESS-0x2000);0x33ff6000~IRQS
8、tackEQU(_STACK_BASEADDRESS-0x1000);0x33ff7000~FIQStackEQU(_STACK_BASEADDRESS-0x0);0x33ff8000~;/*********************************************************