新闻中心

EEPW首页>嵌入式系统>设计应用> TQ2440启动代码分析(二)

TQ2440启动代码分析(二)

作者: 时间:2016-11-26 来源:网络 收藏
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;; When EINT0 is pressed, Clear SDRAM

本文引用地址://m.amcfsurvey.com/article/201611/321667.htm

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; check if EIN0 button is pressed

;这一段检测EINT0是否被按下,假如EINT0被按下,则清空SDRAM

ldr r0,=GPFCON

ldr r1,=0x0

str r1,[r0]

ldr r0,=GPFUP

ldr r1,=0xff

str r1,[r0]

;配置GPF

ldr r1,=GPFDAT

ldr r0,[r1]

bic r0,r0,#(0x1e<<1) ; bit clear

tst r0,#0x1

bne %F1

; Clear SDRAM Start

ldr r0,=GPFCON

ldr r1,=0x55aa

str r1,[r0]

; ldr r0,=GPFUP

; ldr r1,=0xff

; str r1,[r0]

ldr r0,=GPFDAT

ldr r1,=0x0

str r1,[r0] ;LED=****

mov r1,#0

mov r2,#0

mov r3,#0

mov r4,#0

mov r5,#0

mov r6,#0

mov r7,#0

mov r8,#0

ldr r9,=0x4000000 ;64MB

ldr r0,=0x30000000

0

stmia r0!,{r1-r8}

subs r9,r9,#32

bne %B0

;以上这段清空SDRAM

;Clear SDRAM End

1

;Initialize stacks

bl InitStacks

;检测引脚OM[1:0],如果OM[1:0]!=0,选择从NOR Flash启动,如果OM[1:0]==0,则表示从nand flash启动

;===========================================================

ldr r0, =BWSCON

ldr r0, [r0]

ands r0, r0, #6 ;OM[1:0] != 0, NOR FLash boot

bne copy_proc_beg ;do not read nand flash

adr r0, ResetEntry ;OM[1:0] == 0, NAND FLash boot

cmp r0, #0 ;if use Multi-ice,

bne copy_proc_beg ;do not read nand flash for boot

;nop

;===========================================================

nand_boot_beg

[ {TRUE}

bl RdNF2SDRAM

]

;nand flash启动,拷贝程序到steppingstone区域

ldr pc, =copy_proc_beg

;===========================================================

copy_proc_beg;

adr r0, ResetEntry

ldr r2, BaseOfROM

cmp r0, r2

ldreq r0, TopOfROM

beq InitRam

ldr r3, TopOfROM

0

ldmia r0!, {r4-r7}

stmia r2!, {r4-r7}

cmp r2, r3

bcc %B0

sub r2, r2, r3

sub r0, r0, r2

InitRam

ldr r2, BaseOfBSS

ldr r3, BaseOfZero

0

cmp r2, r3

ldrcc r1, [r0], #4

strcc r1, [r2], #4

bcc %B0

mov r0, #0

ldr r3, EndOfBSS

1

cmp r2, r3

strcc r0, [r2], #4

bcc %B1

ldr pc, =%F2 ;goto compiler address

2

; [ CLKDIV_VAL>1 ; means Fclk:Hclk is not 1:1.

; bl MMU_SetAsyncBusMode

; |

; bl MMU_SetFastBusMode ; default value.

; ]

;===========================================================

; Setup IRQ handler

ldr r0,=HandleIRQ ;This routine is needed

ldr r1,=IsrIRQ ;if there is not subs pc,lr,#4 at 0x18, 0x1c

str r1,[r0]

[ :LNOT:THUMBCODE

bl Main ;Do not use main() because ......

b .

]

[ THUMBCODE ;for start-up code for Thumb mode

orr lr,pc,#1

bx lr

CODE16

bl Main ;Do not use main() because ......

b .

CODE32

]

;堆栈初始化的顺序决定系统最后运行在哪种处理器模式,最后初始化哪种模式的堆栈,系

;统就运行在哪种模式。

;function initializing stacks

InitStacks

;Do not use DRAM,such as stmfd,ldmfd......

;SVCstack is initialized before

;Under toolkit ver 2.5, msr cpsr,r1 can be used instead of msr cpsr_cxsf,r1

mrs r0,cpsr

bic r0,r0,#MODEMASK

orr r1,r0,#UNDEFMODE|NOINT

msr cpsr_cxsf,r1 ;UndefMode

ldr sp,=UndefStack ; UndefStack=0x33FF_5C00


上一页 1 2 3 下一页

关键词:TQ2440启动代

评论


技术专区

关闭