ARM7启动代码.docx

上传人:b****6 文档编号:6507303 上传时间:2023-01-07 格式:DOCX 页数:14 大小:18.63KB
下载 相关 举报
ARM7启动代码.docx_第1页
第1页 / 共14页
ARM7启动代码.docx_第2页
第2页 / 共14页
ARM7启动代码.docx_第3页
第3页 / 共14页
ARM7启动代码.docx_第4页
第4页 / 共14页
ARM7启动代码.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

ARM7启动代码.docx

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

ARM7启动代码.docx

ARM7启动代码

SAMSUNG公司推出的16、32位RISC处理器S3C44BOX为手持设备和一般类型应用提供了高性价比和高性能的微控制器解决方案。

为了降低成本,S3C44BOX提供了丰富的内置部件,包括8KBCache和内部SRAM,LCD控制器,带自动握手的2通道UART,4通道DMA,系统管理器(片选逻辑,FP/EDO/SDRAM控制器)。

带PWM功能的5通道定时器和一个内部定时器,I/O端口,RTC,8通道10位ADC,IIC_BUS接口,IIS_BUS接口,同步SIO接口和PLL倍频器。

  这里是一般的44BINIT.S,即其启动代码如下:

  ;*******************************************************

  ;*NAME:

44BINIT.S*

  ;*Version:

10.JAn.2003*

  ;*Description:

*

  ;*Cstartupcodes*

  ;*Configurememory,InitializeISR,stacks*

  ;*InitializeC-variables*

  ;*Fillzerosintozero-initializedC-variables*

  ;*******************************************************

  GET..\inc\option.s

  GET..\inc\memcfg.s

  ;InterruptControl

  INTPNDEQU0x01e00004

  INTMODEQU0x01e00008

  INTMSKEQU0x01e0000c

  I_ISPREQU0x01e00020

  I_CMSTEQU0x01e0001c

  ;Watchdogtimer

  WTCONEQU0x01d30000

  ;ClockController

  PLLCONEQU0x01d80000

  CLKCONEQU0x01d80004

  LOCKTIMEEQU0x01d8000c

  ;MemoryController

  REFRESHEQU0x01c80024

  ;Pre-definedconstants

  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

  ;bHandlerIRQ->subspc,lr,#4

  VECTOR_BRANCH

  ldrpc,=HandlerEINT0;mGAH/Winterruptvectortable

  ldrpc,=HandlerEINT1;

  ldrpc,=HandlerEINT2;

  ldrpc,=HandlerEINT3;

  ldrpc,=HandlerEINT4567;

  ldrpc,=HandlerTICK;mGA

  b.

  b.

  ldrpc,=HandlerZDMA0;mGB

  ldrpc,=HandlerZDMA1;

  ldrpc,=HandlerBDMA0;

  ldrpc,=HandlerBDMA1;

  ldrpc,=HandlerWDT;

  ldrpc,=HandlerUERR01;mGB

  b.

  b.

  ldrpc,=HandlerTIMER0;mGC

  ldrpc,=HandlerTIMER1;

  ldrpc,=HandlerTIMER2;

  ldrpc,=HandlerTIMER3;

  ldrpc,=HandlerTIMER4;

  ldrpc,=HandlerTIMER5;mGC

  b.

  b.

  ldrpc,=HandlerURXD0;mGD

  ldrpc,=HandlerURXD1;

  ldrpc,=HandlerIIC;

  ldrpc,=HandlerSIO;

  ldrpc,=HandlerUTXD0;

  ldrpc,=HandlerUTXD1;mGD

  b.

  b.

  ldrpc,=HandlerRTC;mGKA

  b.;

  b.;

  b.;

  b.;

  b.;mGKA

  b.

  b.

  ldrpc,=HandlerADC;mGKB

  b.;

  b.;

  b.;

  b.;

  b.;mGKB

  b.

  b.

  ldrpc,=EnterPWDN

  EXPORToutportw

  outportwstrhr0,[r1]

  movpc,lr

  EXPORToutportl

  outportlstrr0,[r1]

  movpc,lr

  EXPORTinportw

  inportwldrhr0,[r0]

  movpc,lr

  EXPORTinportl

  inportlldrr0,[r0]

  movpc,lr

  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.

  subsp,sp,#4;reservedforPC

  stmfdsp!

{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

  ldrr9,[r9]

  strr9,[sp,#8]

  ldmfdsp!

{r8-r9,pc}

  ;****************************************************

  ;*START*

  ;****************************************************

  ResetHandler

  ldrr0,=WTCON;watchdogdisable

  ldrr1,=0x0

  strr1,[r0]

  ldrr0,=INTMSK

  ldrr1,=0x07ffffff;allinterruptdisable

  strr1,[r0]

  ;****************************************************

  ;*Setclockcontrolregisters*

  ;****************************************************

  ldrr0,=LOCKTIME

  ldrr1,=800;count=t_lock*Fin(t_lock=200us,Fin=4MHz)=800

  strr1,[r0]

  [PLLONSTART

  ldrr0,=PLLCON;temporarysettingofPLL

  ldrr1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV);Fin=10MHz,Fout=40MHz

  strr1,[r0]

  ]

  ldrr0,=CLKCON

  ldrr1,=0x7ff8;AllunitblockCLKenable

  strr1,[r0]

  ;****************************************************

  ;*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

  strr1,[r0]

  ;********************************************************

  ;*CopyandpasteRWdata/zeroinitializeddata*

  ;********************************************************

  ldrr0,=|Image$$RO$$Limit|;GetpointertoROMdata

  ldrr1,=|Image$$RW$$Base|;andRAMcopy

  ldrr3,=|Image$$ZI$$Base|

  ;Zeroinitbase=>topofinitialiseddata

  cmpr0,r1;Checkthattheyaredifferent

  beq%F1

  0

  cmpr1,r3;Copyinitdata

  ldrccr2,[r0],#4;-->LDRCCr2,[r0]+ADDr0,r0,#4

  strccr2,[r1],#4;-->STRCCr2,[r1]+ADDr1,r1,#4

  bcc%B0

  1

  ldrr1,=|Image$$ZI$$Limit|;Topofzeroinitsegment

  movr2,#0

  2

  cmpr3,r1;Zeroinit

  strccr2,[r3],#4

  bcc%B2

  [:

LNOT:

THUMBCODE

  BLMain;Dontusemain()

  B.

  ]

  [THUMBCODE;forstart-upcodeforThumbmode

  orrlr,pc,#1

  bxlr

  CODE16

  blMain;Dontusemain()

  b.

  CODE32

  ]

  ;****************************************************

  ;*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

  msrcpsr_cxsf,r1;AbortMode

  ldrsp,=AbortStack

  orrr1,r0,#IRQMODE|NOINT

  msrcpsr_cxsf,r1;IRQMode

  ldrsp,=IRQStack

  orrr1,r0,#FIQMODE|NOINT

  msrcpsr_cxsf,r1;FIQMode

  ldrsp,=FIQStack

  bicr0,r0,#MODEMASK|NOINT

  orrr1,r0,#SVCMODE

  msrcpsr_cxsf,r1;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.

  nop;Iftheotherbusmasterholdsthebus,...

  nop;movr0,r0

  nop

  nop

  nop

  nop

  ;enterPOWERDNmode

  ldrr0,=CLKCON

  strr2,[r0]

  ;waituntilenterSL_IDLE,STOPmodeanduntilwake-up

  movr0,#0xff

  0subsr0,r0,#1

  bne%B0

  ;exitfromDRAM/SDRAMselfrefreshmode.

  ldrr0,=REFRESH

  strr3,[r0]

  movpc,lr

  LTORG

  SMRDATADATA

  ;*****************************************************************

  ;*Memoryconfigurationhastobeoptimizedforbestperformance*

  ;*Thefollowingparameterisnotoptimized.*

  ;*****************************************************************

  ;***memoryaccesscycleparameterstrategy***

  ;1)EvenFP-DRAM,EDOsettinghasmorelatefetchpointbyhalf-clock

  ;2)Thememorysettings,here,aremadethe

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

当前位置:首页 > 求职职场 > 笔试

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

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