LPC2000系列ARM启动代码(startup部分)
时间:11-20
来源:互联网
点击:
- ;定义堆栈的大小
- 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_
LPC2000系列ARM启动代码startup部 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)