關(guān)于啟動(dòng)代碼2440init.s(三)
; 哈哈,下面又有看頭了,這個(gè)初始化程序好像被名曰hzh的高手改過(guò)
; 能在NOR NAND 還有內(nèi)存中運(yùn)行,當(dāng)然了,在內(nèi)存中運(yùn)行最簡(jiǎn)單了.
; 在NOR NAND中運(yùn)行的話都要先把自己拷到內(nèi)存中.
; 此外,還記得上面提到的|Image$$RO$$Base|,|Image$$RO$$Limit|...嗎?
; 這就是拷貝的依據(jù)了!!!
;=========================================================================
;BWSCON的[2:1]反映了外部引腳OM[1:0]:若OM[1:0] != 00, 從NOR FLash啟動(dòng)或直接在內(nèi)存運(yùn)行;若OM[1:0]==00,則為Nand Flash Mode
; 注意adr得到的是 相對(duì) 地址,非絕對(duì)地址 == if use Multi-ice,
;nop
;==============這一段代碼完成從NAND Flash讀代碼到RAM=====================
nand_boot_beg
;set timing value
;enable control
1
2
3
4
; now
;===========================================================
copy_proc_beg
;=========================================================
;下面這個(gè)是針對(duì)代碼在NOR FLASH時(shí)的拷貝方法
;功能為把從ResetEntry起,TopOfROM-BaseOfROM大小的數(shù)據(jù)拷到BaseOfROM
;TopOfROM和BaseOfROM為|Image$$RO$$Limit|和|Image$$RO$$Base|
;|Image$$RO$$Limit|和|Image$$RO$$Base|由連接器生成
;為生成的代碼的代碼段運(yùn)行時(shí)的起啟和終止地址
;BaseOfBSS和BaseOfZero為|Image$$RW$$Base|和|Image$$ZI$$Base|
;|Image$$RW$$Base|和|Image$$ZI$$Base|也是由連接器生成
;兩者之間就是初始化數(shù)據(jù)的存放地
; --在加載階段,不存在ZI區(qū)域--
;=======================================================
0
InitRam
0
1
; bl MMU_SetAsyncBusMode
; |
; bl MMU_SetFastBusMode ; default value.
; ]
;bl Led_Test
;===========================================================
; 進(jìn)入C語(yǔ)言前的最后一步了,就是把我們用說(shuō)查二級(jí)向量表
; 的中斷例程安裝到一級(jí)向量表(異常向量表)里.
;//5.設(shè)置缺省中斷處理函數(shù)
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;注意,以下這段可能不需要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;//6.將數(shù)據(jù)段拷貝到ram中 將零初始化數(shù)據(jù)段清零跳入C語(yǔ)言的main函數(shù)執(zhí)行到這步結(jié)束bootloader初步引導(dǎo)結(jié)束
1
2
3
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;***************************************
1
;*****************************************
;*****************************************************************************
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; 媽呀,終說(shuō)見(jiàn)到艷陽(yáng)天了!!!!!!!!!!
;
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;*****************************************************************************
;//if thumbcod={ture}
;function initializing stacks
InitStacks
;//系統(tǒng)一開(kāi)始運(yùn)行就是SVCmode?
;===========================================================
ReadNandID
1
ReadNandStatus
WaitNandBusy
1
CheckBadBlk
; bl WaitNandBusy ;WaitNFBusy()
;do not use WaitNandBusy, after WaitNandBusy will read part A!
1
2
ReadNandPage
1
;--------------------LED test
Led_Test
0
1
2
;===========================================================
;=====================================================================
; Clock division test
; Assemble code, because VSYNC time is very short
;=====================================================================
CLKDIV124
; wait until clock is stable
CLKDIV144
; wait until clock is stable
;存儲(chǔ)器控制寄存器的定義區(qū)
SMRDATA DATA
; Memory configuration should be optimized for best performance
; The following parameter is not optimized.
; Memory access cycle parameter strategy
; 1) The memory settings is
; 2) SDRAM refresh period is for HCLK<=75Mhz.
BaseOfROM
TopOfROM
BaseOfBSS
BaseOfZero
EndOfBSS
HandleReset
HandleUndef
HandleSWI
HandlePabort
HandleDabort
HandleReserved
HandleIRQ
HandleFIQ
;Dont use the label IntVectorTable,
;The value of IntVectorTable is different with the address you think it may be.
;IntVectorTable
;@0x33FF_FF20
HandleEINT0
HandleEINT1
HandleEINT2
HandleEINT3
HandleEINT4_7 #
HandleEINT8_23 #
HandleCAM
HandleBATFLT #
HandleTICK
HandleWDT
HandleTIMER0
HandleTIMER1
HandleTIMER2
HandleTIMER3
HandleTIMER4
HandleUART2
;@0x33FF_FF60
HandleLCD
HandleDMA0
HandleDMA1
HandleDMA2
HandleDMA3
HandleMMC
HandleSPI0
HandleUART1
HandleNFCON
HandleUSBD
HandleUSBH
HandleIIC
HandleUART0
HandleSPI1
HandleRTC
HandleADC
;@0x33FF_FFA0
; HISTORY:
; 2002.02.25:kwtark: ver 0.0
; 2002.03.20:purnnamu: Add some functions for testing STOP,Sleep mode
; 2003.03.14:DonGo: Modified for 2440.
; 2009 06.24:Tinko Modified
評(píng)論