ARM7启动代码Word格式文档下载.docx
- 文档编号:19521072
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:14
- 大小:18.63KB
ARM7启动代码Word格式文档下载.docx
《ARM7启动代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ARM7启动代码Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
USERMODEEQU0x10
FIQMODEEQU0x11
IRQMODEEQU0x12
SVCMODEEQU0x13
ABORTMODEEQU0x17
UNDEFMODEEQU0x1b
MODEMASKEQU0x1f
NOINTEQU0xc0
checkiftasm.exeisused.
GBLLTHUMBCODE
[{CONFIG}=16
THUMBCODESETL{TRUE}
CODE32
|
THUMBCODESETL{FALSE}
]
[THUMBCODE
CODE32;
forstart-upcodeforThumbmode
MACRO
$HandlerLabelHANDLER$HandleLabel
$HandlerLabel
subsp,sp,#4;
decrementsp(tostorejumpaddress)
stmfdsp!
{r0};
PUSHtheworkregistertostack(lrdoestpushbecauseitreturntooriginaladdress)
ldrr0,=$HandleLabel;
loadtheaddressofHandleXXXtor0
ldrr0,[r0];
loadthecontents(serviceroutinestartaddress)ofHandleXXX
strr0,[sp,#4];
storethecontents(ISR)ofHandleXXXtostack
ldmfdsp!
{r0,pc};
POPtheworkregisterandpc(jumptoISR)
MEND
IMPORT|Image$$RO$$Limit|;
EndofROMcode(=startofROMdata)
IMPORT|Image$$RW$$Base|;
BaseofRAMtoinitialise
IMPORT|Image$$ZI$$Base|;
Baseandlimitofarea
IMPORT|Image$$ZI$$Limit|;
tozeroinitialise
IMPORTMain;
Themainentryofmonprogram
AREAInit,CODE,READONLY
ENTRY
bResetHandler;
fordebug
bHandlerUndef;
handlerUndef
bHandlerSWI;
SWIinterrupthandler
bHandlerPabort;
handlerPAbort
bHandlerDabort;
handlerDAbort
b.;
handlerReserved
bHandlerIRQ
bHandlerFIQ
***IMPORTANTNOTE***
IftheH/Wvectoredinterrutpmodeisenabled,Theabovetwoinstructionsshould
bechangedlikebelow,towork-aroundwithH/WbugofS3C44B0Xinterruptcontroller.
bHandlerIRQ->
subspc,lr,#4
VECTOR_BRANCH
ldrpc,=HandlerEINT0;
mGAH/Winterruptvectortable
ldrpc,=HandlerEINT1;
ldrpc,=HandlerEINT2;
ldrpc,=HandlerEINT3;
ldrpc,=HandlerEINT4567;
ldrpc,=HandlerTICK;
mGA
b.
ldrpc,=HandlerZDMA0;
mGB
ldrpc,=HandlerZDMA1;
ldrpc,=HandlerBDMA0;
ldrpc,=HandlerBDMA1;
ldrpc,=HandlerWDT;
ldrpc,=HandlerUERR01;
ldrpc,=HandlerTIMER0;
mGC
ldrpc,=HandlerTIMER1;
ldrpc,=HandlerTIMER2;
ldrpc,=HandlerTIMER3;
ldrpc,=HandlerTIMER4;
ldrpc,=HandlerTIMER5;
ldrpc,=HandlerURXD0;
mGD
ldrpc,=HandlerURXD1;
ldrpc,=HandlerIIC;
ldrpc,=HandlerSIO;
ldrpc,=HandlerUTXD0;
ldrpc,=HandlerUTXD1;
ldrpc,=HandlerRTC;
mGKA
ldrpc,=HandlerADC;
mGKB
ldrpc,=EnterPWDN
EXPORToutportw
outportwstrhr0,[r1]
movpc,lr
EXPORToutportl
outportlstrr0,[r1]
EXPORTinportw
inportwldrhr0,[r0]
EXPORTinportl
inportlldrr0,[r0]
LTORG
HandlerFIQHANDLERHandleFIQ
HandlerIRQHANDLERHandleIRQ
HandlerUndefHANDLERHandleUndef
HandlerSWIHANDLERHandleSWI
HandlerDabortHANDLERHandleDabort
HandlerPabortHANDLERHandlePabort
HandlerADCHANDLERHandleADC
HandlerRTCHANDLERHandleRTC
HandlerUTXD1HANDLERHandleUTXD1
HandlerUTXD0HANDLERHandleUTXD0
HandlerSIOHANDLERHandleSIO
HandlerIICHANDLERHandleIIC
HandlerURXD1HANDLERHandleURXD1
HandlerURXD0HANDLERHandleURXD0
HandlerTIMER5HANDLERHandleTIMER5
HandlerTIMER4HANDLERHandleTIMER4
HandlerTIMER3HANDLERHandleTIMER3
HandlerTIMER2HANDLERHandleTIMER2
HandlerTIMER1HANDLERHandleTIMER1
HandlerTIMER0HANDLERHandleTIMER0
HandlerUERR01HANDLERHandleUERR01
HandlerWDTHANDLERHandleWDT
HandlerBDMA1HANDLERHandleBDMA1
HandlerBDMA0HANDLERHandleBDMA0
HandlerZDMA1HANDLERHandleZDMA1
HandlerZDMA0HANDLERHandleZDMA0
HandlerTICKHANDLERHandleTICK
HandlerEINT4567HANDLERHandleEINT4567
HandlerEINT3HANDLERHandleEINT3
HandlerEINT2HANDLERHandleEINT2
HandlerEINT1HANDLERHandleEINT1
HandlerEINT0HANDLERHandleEINT0
Oneofthefollowingtworoutinescanbeusedfornon-vectoredinterrupt.
IsrIRQ;
usingI_ISPRregister.
reservedforPC
{r8-r9}
IMPORTANTCAUTION
ifI_ISPCisntusedproperly,I_ISPRcanbe0inthisroutine.
ldrr9,=I_ISPR
ldrr9,[r9]
movr8,#0x0
0
movsr9,r9,lsr#1
bcs%F1
addr8,r8,#4
b%B0
1
ldrr9,=HandleADC
addr9,r9,r8
strr9,[sp,#8]
{r8-r9,pc}
****************************************************
*START*
ResetHandler
ldrr0,=WTCON;
watchdogdisable
ldrr1,=0x0
strr1,[r0]
ldrr0,=INTMSK
ldrr1,=0x07ffffff;
allinterruptdisable
*Setclockcontrolregisters*
ldrr0,=LOCKTIME
ldrr1,=800;
count=t_lock*Fin(t_lock=200us,Fin=4MHz)=800
[PLLONSTART
ldrr0,=PLLCON;
temporarysettingofPLL
ldrr1,=((M_DIV<
<
12)+(P_DIV<
4)+S_DIV);
Fin=10MHz,Fout=40MHz
ldrr0,=CLKCON
ldrr1,=0x7ff8;
AllunitblockCLKenable
*Setmemorycontrolregisters*
ldrr0,=SMRDATA
ldmiar0,{r1-r13}
ldrr0,=0x01c80000;
BWSCONAddress
stmiar0,{r1-r13}
*Initializestacks*
ldrsp,=SVCStack;
Why?
blInitStacks
*SetupIRQhandler*
ldrr0,=HandleIRQ;
Thisroutineisneeded
ldrr1,=IsrIRQ;
ifthereisn'
t'
subspc,lr,#4at0x18,0x1c
********************************************************
*CopyandpasteRWdata/zeroinitializeddata*
ldrr0,=|Image$$RO$$Limit|;
GetpointertoROMdata
ldrr1,=|Image$$RW$$Base|;
andRAMcopy
ldrr3,=|Image$$ZI$$Base|
Zeroinitbase=>
topofinitialiseddata
cmpr0,r1;
Checkthattheyaredifferent
beq%F1
cmpr1,r3;
Copyinitdata
ldrccr2,[r0],#4;
-->
LDRCCr2,[r0]+ADDr0,r0,#4
strccr2,[r1],#4;
STRCCr2,[r1]+ADDr1,r1,#4
bcc%B0
ldrr1,=|Image$$ZI$$Limit|;
Topofzeroinitsegment
movr2,#0
2
cmpr3,r1;
Zeroinit
strccr2,[r3],#4
bcc%B2
[:
LNOT:
THUMBCODE
BLMain;
Dontusemain()
B.
[THUMBCODE;
orrlr,pc,#1
bxlr
CODE16
blMain;
*Thefunctionforinitializingstack*
InitStacks
DontuseDRAM,suchasstmfd,ldmfd......
SVCstackisinitializedbefore
Undertoolkitver2.50,'
msrcpsr,r1'
canbeusedinsteadof'
msrcpsr_cxsf,r1'
mrsr0,cpsr
bicr0,r0,#MODEMASK
orrr1,r0,#UNDEFMODE|NOINT
msrcpsr_cxsf,r1;
UndefMode
ldrsp,=UndefStack
orrr1,r0,#ABORTMODE|NOINT
AbortMode
ldrsp,=AbortStack
orrr1,r0,#IRQMODE|NOINT
IRQMode
ldrsp,=IRQStack
orrr1,r0,#FIQMODE|NOINT
FIQMode
ldrsp,=FIQStack
bicr0,r0,#MODEMASK|NOINT
orrr1,r0,#SVCMODE
SVCMode
ldrsp,=SVCStack
USERmodeisnotinitialized.
movpc,lr;
TheLRregistermaybenotvalidforthemodechanges.
*Thefunctionforenteringpowerdownmode*
voidEnterPWDN(intCLKCON);
EnterPWDN
movr2,r0;
r0=CLKCON
ldrr0,=REFRESH
ldrr3,[r0]
movr1,r3
orrr1,r1,#0x400000;
self-refreshenable
strr1,[r0]
nop;
Waituntilself-refreshisissued.Maynotbeneeded.
Iftheotherbusmasterholdsthebus,...
movr0,r0
nop
enterPOWERDNmode
strr2,[r0]
waituntilenterSL_IDLE,STOPmodeanduntilwake-up
movr0,#0xff
0subsr0,r0,#1
bne%B0
exitfromDRAM/SDRAMselfrefreshmode.
strr3,[r0]
movpc,lr
SMRDATADATA
*****************************************************************
*Memoryconfigurationhastobeoptimizedforbestperformance*
*Thefollowingparameterisnotoptimized.*
***memoryaccesscycleparameterstrategy***
1)EvenFP-DRAM,EDOsettinghasmorelatefetchpointbyhalf-clock
2)Thememorysettings,here,aremadethe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM7 启动 代码