tq2440测试代码.docx

上传人:b****5 文档编号:6912488 上传时间:2023-01-12 格式:DOCX 页数:41 大小:25.87KB
下载 相关 举报
tq2440测试代码.docx_第1页
第1页 / 共41页
tq2440测试代码.docx_第2页
第2页 / 共41页
tq2440测试代码.docx_第3页
第3页 / 共41页
tq2440测试代码.docx_第4页
第4页 / 共41页
tq2440测试代码.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

tq2440测试代码.docx

《tq2440测试代码.docx》由会员分享,可在线阅读,更多相关《tq2440测试代码.docx(41页珍藏版)》请在冰豆网上搜索。

tq2440测试代码.docx

tq2440测试代码

2440INIT.S

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

;NAME:

2440INIT.S

;DESC:

Cstartupcodes

;Configurememory,ISR,stacks

;InitializeC-variables

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

GEToption.inc

GETmemcfg.inc

GET2440addr.inc

BIT_SELFREFRESHEQU(1<<22)

;Pre-definedconstants

USERMODEEQU0x10

FIQMODEEQU0x11

IRQMODEEQU0x12

SVCMODEEQU0x13

ABORTMODEEQU0x17

UNDEFMODEEQU0x1b

MODEMASKEQU0x1f

NOINTEQU0xc0

;Thelocationofstacks

UserStackEQU(_STACK_BASEADDRESS-0x3800);0x33ff4800~

SVCStackEQU(_STACK_BASEADDRESS-0x2800);0x33ff5800~

UndefStackEQU(_STACK_BASEADDRESS-0x2400);0x33ff5c00~

AbortStackEQU(_STACK_BASEADDRESS-0x2000);0x33ff6000~

IRQStackEQU(_STACK_BASEADDRESS-0x1000);0x33ff7000~

FIQStackEQU(_STACK_BASEADDRESS-0x0);0x33ff8000~

;Checkiftasm.exe(armasm-16...@ADS1.0)isused.

GBLLTHUMBCODE

[{CONFIG}=16

THUMBCODESETL{TRUE}

CODE32

|

THUMBCODESETL{FALSE}

]

MACRO

MOV_PC_LR

[THUMBCODE

bxlr

|

movpc,lr

]

MEND

MACRO

MOVEQ_PC_LR

[THUMBCODE

bxeqlr

|

moveqpc,lr

]

MEND

MACRO

$HandlerLabelHANDLER$HandleLabel

$HandlerLabel

subsp,sp,#4;decrementsp(tostorejumpaddress)

stmfdsp!

{r0};PUSHtheworkregistertostack(lrdoesnotpushbecauseitreturntooriginaladdress)

ldrr0,=$HandleLabel;loadtheaddressofHandleXXXtor0

ldrr0,[r0];loadthecontents(serviceroutinestartaddress)ofHandleXXX

strr0,[sp,#4];storethecontents(ISR)ofHandleXXXtostack

ldmfdsp!

{r0,pc};POPtheworkregisterandpc(jumptoISR)

MEND

IMPORT|Image$$RO$$Base|;BaseofROMcode

IMPORT|Image$$RO$$Limit|;EndofROMcode(=startofROMdata)

IMPORT|Image$$RW$$Base|;BaseofRAMtoinitialise

IMPORT|Image$$ZI$$Base|;Baseandlimitofarea

IMPORT|Image$$ZI$$Limit|;tozeroinitialise

IMPORTMMU_SetAsyncBusMode

IMPORTMMU_SetFastBusMode;

IMPORTMain;Themainentryofmonprogram

IMPORTRdNF2SDRAM;CopyImagefromNandFlashtoSDRAM

AREAInit,CODE,READONLY

ENTRY

EXPORT__ENTRY

__ENTRY

ResetEntry

;1)Thecode,whichconvertstoBig-endian,shouldbeinlittleendiancode.

;2)ThefollowinglittleendiancodewillbecompiledinBig-Endianmode.

;Thecodebyteordershouldbechangedasthememorybuswidth.

;3)Thepseudoinstruction,DCDcannotbeusedherebecausethelinkergenerateserror.

ASSERT:

DEF:

ENDIAN_CHANGE

[ENDIAN_CHANGE

ASSERT:

DEF:

ENTRY_BUS_WIDTH

[ENTRY_BUS_WIDTH=32

bChangeBigEndian;DCD0xea000007

]

[ENTRY_BUS_WIDTH=16

andeqr14,r7,r0,lsl#20;DCD0x0007ea00

]

[ENTRY_BUS_WIDTH=8

streqr0,[r0,-r10,ror#1];DCD0x070000ea

]

|

bResetHandler

]

bHandlerUndef;handlerforUndefinedmode

bHandlerSWI;handlerforSWIinterrupt

bHandlerPabort;handlerforPAbort

bHandlerDabort;handlerforDAbort

b.;reserved

bHandlerIRQ;handlerforIRQinterrupt

bHandlerFIQ;handlerforFIQinterrupt

;@0x20

bEnterPWDN;Mustbe@0x20.

ChangeBigEndian

;@0x24

[ENTRY_BUS_WIDTH=32

DCD0xee110f10;0xee110f10=>mrcp15,0,r0,c1,c0,0

DCD0xe3800080;0xe3800080=>orrr0,r0,#0x80;//Big-endian

DCD0xee010f10;0xee010f10=>mcrp15,0,r0,c1,c0,0

]

[ENTRY_BUS_WIDTH=16

DCD0x0f10ee11

DCD0x0080e380

DCD0x0f10ee01

]

[ENTRY_BUS_WIDTH=8

DCD0x100f11ee

DCD0x800080e3

DCD0x100f01ee

]

DCD0xffffffff;swinv0xffffffissimilarwithNOPandrunwellinbothendianmode.

DCD0xffffffff

DCD0xffffffff

DCD0xffffffff

DCD0xffffffff

bResetHandler

HandlerFIQHANDLERHandleFIQ

HandlerIRQHANDLERHandleIRQ

HandlerUndefHANDLERHandleUndef

HandlerSWIHANDLERHandleSWI

HandlerDabortHANDLERHandleDabort

HandlerPabortHANDLERHandlePabort

IsrIRQ

subsp,sp,#4;reservedforPC

stmfdsp!

{r8-r9}

ldrr9,=INTOFFSET

ldrr9,[r9]

ldrr8,=HandleEINT0

addr8,r8,r9,lsl#2

ldrr8,[r8]

strr8,[sp,#8]

ldmfdsp!

{r8-r9,pc}

LTORG

;=======

;ENTRY

;=======

ResetHandler

ldrr0,=WTCON;watchdogdisable

ldrr1,=0x0

strr1,[r0]

ldrr0,=INTMSK

ldrr1,=0xffffffff;allinterruptdisable

strr1,[r0]

ldrr0,=INTSUBMSK

ldrr1,=0x7fff;allsubinterruptdisable

strr1,[r0]

[{FALSE}

;GPBDAT=(rGPFDAT&~(0xf<<4))|((~data&0xf)<<4);

;Led_Display

ldrr0,=GPBCON

ldrr1,=0x00555555

strr1,[r0]

ldrr0,=GPBDAT

ldrr1,=0x07fe

strr1,[r0]

]

;ToreducePLLlocktime,adjusttheLOCKTIMEregister.

ldrr0,=LOCKTIME

ldrr1,=0xffffff

strr1,[r0]

[PLL_ON_START

;Addedforconfirmclockdivide.for2440.

;SettingvalueFclk:

Hclk:

Pclk

ldrr0,=CLKDIVN

ldrr1,=CLKDIV_VAL;0=1:

1:

1,1=1:

1:

2,2=1:

2:

2,3=1:

2:

4,4=1:

4:

4,5=1:

4:

8,6=1:

3:

3,7=1:

3:

6.

strr1,[r0]

;programhasnotbeencopied,sousethesedirectly

[CLKDIV_VAL>1;meansFclk:

Hclkisnot1:

1.

mrcp15,0,r0,c1,c0,0

orrr0,r0,#0xc0000000;R1_nF:

OR:

R1_iA

mcrp15,0,r0,c1,c0,0

|

mrcp15,0,r0,c1,c0,0

bicr0,r0,#0xc0000000;R1_iA:

OR:

R1_nF

mcrp15,0,r0,c1,c0,0

]

;ConfigureUPLL

ldrr0,=UPLLCON

ldrr1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV);Fin=12.0MHz,UCLK=48MHz

strr1,[r0]

nop;Caution:

AfterUPLLsetting,atleast7-clocksdelaymustbeinsertedforsettinghardwarebecompleted.

nop

nop

nop

nop

nop

nop

;ConfigureMPLL

ldrr0,=MPLLCON

ldrr1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV);Fin=12.0MHz,FCLK=400MHz

strr1,[r0]

]

;Checkifthebootiscausedbythewake-upfromSLEEPmode.

ldrr1,=GSTATUS2

ldrr0,[r1]

tstr0,#0x2

;Incaseofthewake-upfromSLEEPmode,gotoSLEEP_WAKEUPhandler.

bneWAKEUP_SLEEP

EXPORTStartPointAfterSleepWakeUp

StartPointAfterSleepWakeUp

;Setmemorycontrolregisters

adrlr0,SMRDATA

ldrr1,=BWSCON;BWSCONAddress

addr2,r0,#52;EndaddressofSMRDATA

0

ldrr3,[r0],#4

strr3,[r1],#4

cmpr2,r0

bne%B0

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

;;;;;;;;;;;;;WhenEINT0ispressed,ClearSDRAM

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

;checkifEIN0buttonispressed

ldrr0,=GPFCON

ldrr1,=0x0

strr1,[r0]

ldrr0,=GPFUP

ldrr1,=0xff

strr1,[r0]

ldrr1,=GPFDAT

ldrr0,[r1]

bicr0,r0,#(0x1e<<1);bitclear

tstr0,#0x1

bne%F1

;ClearSDRAMStart

ldrr0,=GPFCON

ldrr1,=0x55aa

strr1,[r0]

ldrr0,=GPFDAT

ldrr1,=0x0

strr1,[r0];LED=****

movr1,#0

movr2,#0

movr3,#0

movr4,#0

movr5,#0

movr6,#0

movr7,#0

movr8,#0

ldrr9,=0x4000000;64MB

ldrr0,=0x30000000

0

stmiar0!

{r1-r8}

subsr9,r9,#32

bne%B0

;ClearSDRAMEnd

1

;Initializestacks

blInitStacks

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

ldrr0,=BWSCON

ldrr0,[r0]

andsr0,r0,#6;OM[1:

0]!

=0,NORFLashboot

bnecopy_proc_beg;donotreadnandflash

adrr0,ResetEntry;OM[1:

0]==0,NANDFLashboot

cmpr0,#0;ifuseMulti-ice,

bnecopy_proc_beg;donotreadnandflashforboot

;nop

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

nand_boot_beg

[{TRUE}

blRdNF2SDRAM

]

ldrpc,=copy_proc_beg

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

copy_proc_beg

adrr0,ResetEntry

ldrr2,BaseOfROM

cmpr0,r2

ldreqr0,TopOfROM

beqInitRam

ldrr3,TopOfROM

0

ldmiar0!

{r4-r7}

stmiar2!

{r4-r7}

cmpr2,r3

bcc%B0

subr2,r2,r3

subr0,r0,r2

InitRam

ldrr2,BaseOfBSS

ldrr3,BaseOfZero

0

cmpr2,r3

ldrccr1,[r0],#4

strccr1,[r2],#4

bcc%B0

movr0,#0

ldrr3,EndOfBSS

1

cmpr2,r3

strccr0,[r2],#4

bcc%B1

ldrpc,=%F2;gotocompileraddress

2

;[CLKDIV_VAL>1;meansFclk:

Hclkisnot1:

1.

;blMMU_SetAsyncBusMode

;|

;blMMU_SetFastBusMode;defaultvalue.

;]

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

;SetupIRQhandler

ldrr0,=HandleIRQ;Thisroutineisneeded

ldrr1,=IsrIRQ;ifthereisnot'subspc,lr,#4'at0x18,0x1c

strr1,[r0]

[:

LNOT:

THUMBCODE

blMain;Donotusemain()because......

b.

]

[THUMBCODE;forstart-upcodeforThumbmode

orrlr,pc,#1

bxlr

CODE16

blMain;Donotusemain()because......

b.

CODE32

]

;functioninitializingstacks

InitStacks

;DonotuseDRAM,suchasstmfd,ldmfd......

;SVCstackisinitializedbefore

;Undertoolkitver2.5,'msrcpsr,r1'canbeusedinsteadof'msrcpsr_cxsf,r1'

mrsr0,cpsr

bicr0,r0,#MODEMASK

orrr1,r0,#UNDEFMODE|NOINT

msrcpsr_cxsf,r1;UndefMode

ldrsp,=UndefStack;UndefStack=0x33FF_5C00

orrr1,r0,#ABORTMODE|NOINT

msrcpsr_cxsf,r1;AbortMode

ldrsp,=AbortStack;AbortStack=0x33FF_6000

orrr1,r0,#IRQMODE|NOINT

msrcpsr_cxsf,r1;IRQMode

ldrsp,=IRQStack;IRQStack=0x33FF_7000

orrr1,r0,#FIQMODE|NOINT

msrcpsr_cxsf,r1;FIQMode

ldrsp,=FIQStack;FIQStack=0x33FF_8000

bicr0,r0,#MODEMASK|NOINT

orrr1,r0,#SVCMODE

msrcpsr_cxsf,r1;SVCMode

ldrsp,=SVCStack;SVCStack=0x33FF_5800

;USERmodehasnotbeinitialized.

movpc,lr

;TheLRregisterwillnotbevalidifthecurrentmodeisnotSVCmode.

LTORG

SMRDATADATA

;Memoryconfigurationshouldbeoptimizedforbestperformance

;Thefollowingparameterisnotoptimized.

;Memoryaccesscycleparameterstrategy

;1)ThememorysettingsissafeparametersevenatHCLK=75Mhz.

;2)SDRAMrefreshperiodisforHCLK<=75Mhz.

DCD(0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))

DCD((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC));GCS0

DCD((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC));GCS1

DCD((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_T

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1