关于启动代码2440init.s(三)
; 哈哈,下面又有看头了,这个初始化程序好像被名曰hzh的高手改过
; 能在NOR NAND 还有内存中运行,当然了,在内存中运行最简单了.
; 在NOR NAND中运行的话都要先把自己拷到内存中.
; 此外,还记得上面提到的|Image$$RO$$Base|,|Image$$RO$$Limit|...吗?
; 这就是拷贝的依据了!!!
;=========================================================================
;BWSCON的[2:1]反映了外部引脚OM[1:0]:若OM[1:0] != 00, 从NOR FLash启动或直接在内存运行;若OM[1:0]==00,则为Nand Flash Mode
; 注意adr得到的是 相对 地址,非绝对地址 == if use Multi-ice,
;nop
;==============这一段代码完成从NAND Flash读代码到RAM=====================
nand_boot_beg
;set timing value
;enable control
1
2
3
4
; now
;===========================================================
copy_proc_beg
;=========================================================
;下面这个是针对代码在NOR FLASH时的拷贝方法
;功能为把从ResetEntry起,TopOfROM-BaseOfROM大小的数据拷到BaseOfROM
;TopOfROM和BaseOfROM为|Image$$RO$$Limit|和|Image$$RO$$Base|
;|Image$$RO$$Limit|和|Image$$RO$$Base|由连接器生成
;为生成的代码的代码段运行时的起启和终止地址
;BaseOfBSS和BaseOfZero为|Image$$RW$$Base|和|Image$$ZI$$Base|
;|Image$$RW$$Base|和|Image$$ZI$$Base|也是由连接器生成
;两者之间就是初始化数据的存放地
; --在加载阶段,不存在ZI区域--
;=======================================================
0
InitRam
0
1
; bl MMU_SetAsyncBusMode
; |
; bl MMU_SetFastBusMode ; default value.
; ]
;bl Led_Test
;===========================================================
; 进入C语言前的最后一步了,就是把我们用说查二级向量表
; 的中断例程安装到一级向量表(异常向量表)里.
;//5.设置缺省中断处理函数
;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;注意,以下这段可能不需要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;//6.将数据段拷贝到ram中 将零初始化数据段清零跳入C语言的main函数执行到这步结束bootloader初步引导结束
1
2
3
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;***************************************
1
;*****************************************
;*****************************************************************************
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; 妈呀,终说见到艳阳天了!!!!!!!!!!
;
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;*****************************************************************************
;//if thumbcod={ture}
;function initializing stacks
InitStacks
;//系统一开始运行就是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
;存储器控制寄存器的定义区
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
评论