- ;界说仓库的巨细
- SVC_STACK_LEGTHEQU0
- FIQ_STACK_LEGTHEQU0
- IRQ_STACK_LEGTHEQU256
- ABT_STACK_LEGTHEQU0
- UND_STACK_LEGTHEQU0
- NoIntEQU0x80;制止IRQ间断
- NoFIQEQU0x40;制止FIQ间断
- USR32ModeEQU0x10;ARM的各种作业形式
- SVC32ModeEQU0x13
- SYS32ModeEQU0x1f
- IRQ32ModeEQU0x12
- FIQ32ModeEQU0x11
- IMPORT__use_no_semihosting_swi
- ;引进的外部标号在这声明
- IMPORTFIQ_Exception;Fastinterruptexceptionshandler快速间断反常处理程序
- IMPORT__main;TheentrypointtothemainfunctionC言语主程序进口
- IMPORTTargetResetInit;initializethetargetboard方针板根本初始化
- ;给外部运用的标号在这声明
- EXPORTbottom_of_heap
- EXPORTStackUsr
- EXPORTReset
- EXPORT__user_initial_stackheap
- CODE32
- AREAvectors,CODE,READONLY
- ENTRY
- ;间断向量表
- Reset
- LDRPC,ResetAddr;//留意,这儿应该赋值给PC不是ResetAr这个地址,而是ResetAr这个地址里的值,是ResetInit
- LDRPC,UndefinedAddr;//别的,LDR寻觅空间4K,用DCD完成全规模寻址
- LDRPC,SWI_Addr
- LDRPC,PrefetchAddr
- LDRPC,DataAbortAddr
- DCD0xb9205f80
- LDRPC,[PC,#-0xff0]
- LDRPC,FIQ_Addr
- ResetAddrDCDResetInit
- UndefinedAddrDCDUndefined
- SWI_AddrDCDSoftwareInterrupt
- PrefetchAddrDCDPrefetchAbort
- DataAbortAddrDCDDataAbort
- NouseDCD0
- IRQ_AddrDCD0
- FIQ_AddrDCDFIQ_Handler
- Undefined
- BUndefined
- ;软间断
- SoftwareInterrupt
- ;BSoftwareInterrupt
- ;//增加开/关间断处理Chenxibing-2004-02-09
- CMPR0,#4
- LDRLOPC,[PC,R0,LSL#2]
- MOVSPC,LR
- SwiFunction
- DCDIRQDisable;0
- DCDIRQEnable;1
- DCDFIQDisable;2
- DCDFIQEnable;3
- IRQDisable
- ;关IRQ间断
- MRSR0,SPSR
- ORRR0,R0,#NoInt
- MSRSPSR_c,R0
- MOVSPC,LR
- IRQEnable
- ;开IRQ间断
- MRSR0,SPSR
- BICR0,R0,#NoInt
- MSRSPSR_c,R0
- MOVSPC,LR
- FIQDisable
- ;关FIQ间断
- MRSR0,SPSR
- ORRR0,R0,#NoFIQ
- MSRSPSR_c,R0
- MOVSPC,LR
- FIQEnable
- ;开FIQ间断
- MRSR0,SPSR
- BICR0,R0,#NoFIQ
- MSRSPSR_c,R0
- MOVSPC,LR
- ;//Changed2004-12-09
- ;取指令间断
- PrefetchAbort
- BPrefetchAbort
- ;取数据间断
- DataAbort
- BDataAbort
- ;快速间断
- FIQ_Handler
- STMFDSP!,{R0-R3,LR}
- BLFIQ_Exception
- LDMFDSP!,{R0-R3,LR}
- SUBSPC,LR,#4
- ;/*********************************************************************************************************
- ;**unctionname函数称号:InitStack
- ;**Descriptions功用描绘:Initializethestacks初始化仓库
- ;**inputparameters输 入:None无
- ;**Returnedvalue输 出:None无
- ;******************************************************************************************************/
- InitStack
- MOVR0,LR
- ;BuildtheSVCstack
- ;设置管理形式仓库
- MSRCPSR_c,#0xd3
- LDRSP,StackSvc
- ;BuildtheIRQstack
- ;设置间断形式仓库
- MSRCPSR_c,#0xd2
- LDRSP,StackIrq
- ;BuildtheFIQstack
- ;设置快速间断形式仓库
- MSRCPSR_c,#0xd1
- LDRSP,StackFiq
- ;BuildtheDATAABORTstack
- ;设置间断形式仓库
- MSRCPSR_c,#0xd7
- LDRSP,StackAbt
- ;BuildtheUDFstack
- ;设置未界说形式仓库
- MSRCPSR_c,#0xdb
- LDRSP,StackUnd
- ;BuildtheSYSstack
- ;设置体系形式仓库
- MSRCPSR_c,#0xdf
- LDRSP,=StackUsr
- MOVPC,R0
- ;/*********************************************************************************************************
- ;**unctionname函数称号:ResetInit
- ;**Descriptions功用描绘:RESET复位进口
- ;**inputparameters输 入:None无
- ;**Returnedvalue输 出:None无
- ;********************************************************************************************************/
- ResetInit
- BLInitStack;初始化仓库Initializethestack
- BLTargetResetInit;方针板根本初始化Initializethetargetboard
- ;跳转到c言语进口JumptotheentrypointofCprogram
- B__main
- ;/*****************************************************************************************************************************************************
- ;**unctionname函数称号:__user_initial_stackheap
- ;**Descriptions功用描绘:Initialthefunctionlibrarystacksandheaps,cannotdeleted!库函数初始化堆和栈,不能删去
- ;**inputparameters输 入:referencebyfunctionlibrary参阅库函数手册
- ;**Returnedvalue输 出:referencebyfunctionlibrary参阅库函数手册
- ;************************************************************************************************************************************************************/
- __user_initial_stackheap
- LDRr0,=bottom_of_heap
- ;LDRr1,=StackUsr
- MOVpc,lr
- StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
- StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
- StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
- StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
- StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4
- ;/*********************************************************************************************************
- ;**unctionname函数称号:CrpData
- ;**Descriptions功用描绘:encryptthechip
- ;**inputparameters输 入:None无
- ;**Returnedvalue输 出:None无
- ;********************************************************************************************************/
- IF:DEF:EN_CRP
- IF.>=0x1fc
- INFO1,”/nThedataat0x000001fcmustbe0x87654321./nPleasedeletesomesourcebeforethisline.”
- ENDIF
- CrpData
- WHILE.<0x1fc
- NOP
- WEND
- CrpData1
- DCD0x87654321;/*WhentheDatais为0x87654321,usercodebeprotected.当此数为0x87654321时,用户程序被维护*/
- ENDIF
- ;/*分配仓库空间*/
- AREAMyStacks,DATA,NOINIT,ALIGN=2
- SvcStackSpaceSPACESVC_STACK_LEGTH*4;StackspacesforAdministrationMode管理形式仓库空间
- IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;StackspacesforInterruptReQuestMode间断形式仓库空间
- FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;StackspacesforFastInterruptreQuestMode快速间断形式仓库空间
- AbtStackSpaceSPACEABT_STACK_LEGTH*4;StackspacesforSuspendMode间断义形式仓库空间
- UndtStackSpaceSPACEUND_STACK_LEGTH*4;StackspacesforUndefinedMode未界说形式仓库
- AREAHeap,DATA,NOINIT
- bottom_of_heapSPACE1
- AREAStacks,DATA,NOINIT
- StackUsr
- END
- ;/*********************************************************************************************************
- ;**EndOfFile
- ;********************************************************************************************************/
LPC2000系列ARM发动代码(startup部分)
;定义堆栈的大小SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU0IRQ_STACK_LEGTHEQU256ABT_STACK_LEGTHEQU0UND_STACK_LEGT
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/264418.html