資源描述:
《S3C2410啟動(dòng)程序設(shè)計(jì)——2410Inits詳細(xì)分.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、2410Init.s詳細(xì)注釋分析Crealse.ShengS3C2410啟動(dòng)程序設(shè)計(jì)——2410Init.s詳細(xì)分析工程里面的頭文件2410Init.s包括了板子上電后的初始化(與vivi很相似),具體有幾個(gè)步驟:1.屏蔽所有中斷,關(guān)看門(mén)狗。2.根據(jù)工作頻率設(shè)置PLL寄存器3.初始化存儲(chǔ)控制相關(guān)寄存器4.初始化各模式下的棧指針5.設(shè)置缺省中斷處理函數(shù)6.將數(shù)據(jù)段拷貝到RAM中,將零初始化數(shù)據(jù)段清零7.跳轉(zhuǎn)到C語(yǔ)言Main入口函數(shù)中在開(kāi)發(fā)板上跑了一遍,基本過(guò)程已經(jīng)清晰,還有些細(xì)節(jié)問(wèn)題有待進(jìn)一步深入研究!將這個(gè)程序
2、注釋了一下,可能有些地方不是很正確,只提供參考。;=========================================;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.
3、10:SJS:subinterruptdisable0x3ff->0x7ff;2002.11.29:Kong:DCDBANKSIZEResiger0x32->0xb2(ARMcoreburstenable);=========================================INCLUDEoption.incINCLUDEmemcfg.inc批注[Crealse1]:這些文件定INCLUDE2410addr.inc義了一些地址數(shù)據(jù)等BIT_SELFREFRESHEQU(1<<22);下面是對(duì)arm
4、處理器模式寄存器對(duì)應(yīng)值的常數(shù)定義,arm處理器中有一個(gè)CPSR程序狀態(tài)寄存器,它的后五位決定目前的處理器模式;Pre-definedconstants第1頁(yè)共28頁(yè)2410Init.s詳細(xì)注釋分析Crealse.ShengUSERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1fNOINTEQU0xc0;Thelocationofstacks批注[Crealse2
5、]:UserStackEQU(_STACK_BASEADDRESS-0x3800);0x33ff4800~_STACK_BASEADDRESSSVCStackEQU(_STACK_BASEADDRESS-0x2800);0x33ff5800~EQU0x33ff8000_MMUTT_STARTADDRESSUndefStackEQU(_STACK_BASEADDRESS-0x2400);0x33ff5c00~EQU0x33ff8000AbortStackEQU(_STACK_BASEADDRESS-0x2000)
6、;0x33ff6000~_ISR_STARTADDRESSEQU0x33ffff00IRQStackEQU(_STACK_BASEADDRESS-0x1000);0x33ff7000~FIQStackEQU(_STACK_BASEADDRESS-0x0);0x33ff8000~;checkiftasm.exeisused.;arm處理器有兩種工作狀態(tài):1.arm:32位這種工作狀態(tài)下執(zhí)行字對(duì)準(zhǔn)的arm指令批注[Crealse3]:各有優(yōu)缺2.Thumb:16位這種工作狀;態(tài)執(zhí)行半字對(duì)準(zhǔn)的Thumb指令點(diǎn):執(zhí)行效
7、率、占用空間;因?yàn)樘幚砥鞣譃?6位32位兩種工作狀態(tài),程序的編譯器也是分16位和32兩種編譯方式,所以下面的程序用于根據(jù)處理器工作狀態(tài)確定編譯器編譯方式;code16偽指令指示匯編編譯器后面的指令為16位的thumb指令;code32偽指令指示匯編編譯器后面的指令為32位的arm指令;這段是為了統(tǒng)一目前的處理器工作狀態(tài)和軟件編譯方式(16位編譯環(huán)境使用tasm.exe編譯;Checkiftasm.exe(armasm-16...@ADS1.0)isused.GBLLTHUMBCODE[{CONFIG}=16;i
8、fconfig==16這里表示你的目前處于領(lǐng)先地16位編譯方式THUMBCODESETL{TRUE};設(shè)置THUMBCODE為trueCODE32;轉(zhuǎn)入32位編譯模式
9、;else第2頁(yè)共28頁(yè)2410Init.s詳細(xì)注釋分析Crealse.ShengTHUMBCODESETL{FALSE};設(shè)置THUMBCODE為false]批注[Crealse4]:宏定義!MACROMOV_PC_L