Startup.s
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:8k
- ;/****************************************Copyright (c)**************************************************
- ;** 广州周立功单片机发展有限公司
- ;** 研 究 所
- ;** 产品一部
- ;**
- ;** http://www.zlgmcu.com
- ;**
- ;**--------------文件信息--------------------------------------------------------------------------------
- ;**文 件 名: Startup.s
- ;**创 建 人: 陈明计
- ;**最后修改日期: 2004年3月3日
- ;**描 述: lpc21xx的启动代码,包含异常向量入口、初始化堆栈的代码等
- ;** 每个工程应当有独立的这个文件的拷贝,并进行相应的修改
- ;**--------------历史版本信息----------------------------------------------------------------------------
- ;** 创建人: 陈明计
- ;** 版 本: v1.0
- ;** 日 期: 2004年2月2日
- ;** 描 述: 原始版本
- ;**
- ;**------------------------------------------------------------------------------------------------------
- ;** 修改人:
- ;** 版 本:
- ;** 日 期:
- ;** 描 述:
- ;**
- ;**--------------当前版本修订------------------------------------------------------------------------------
- ;** 修改人:
- ;** 日 期:
- ;** 描 述:
- ;**
- ;**------------------------------------------------------------------------------------------------------
- ;********************************************************************************************************/
- ;定义堆栈的大小
- SVC_STACK_LEGTH EQU 0
- FIQ_STACK_LEGTH EQU 0
- IRQ_STACK_LEGTH EQU 256
- ABT_STACK_LEGTH EQU 0
- UND_STACK_LEGTH EQU 0
- NoInt EQU 0x80
- USR32Mode EQU 0x10
- SVC32Mode EQU 0x13
- SYS32Mode EQU 0x1f
- IRQ32Mode EQU 0x12
- FIQ32Mode EQU 0x11
- PINSEL2 EQU 0xE002C014
- ;引入的外部标号在这声明
- IMPORT FIQ_Exception ;快速中断异常处理程序
- IMPORT __main ;C语言主程序入口
- IMPORT TargetResetInit ;目标板基本初始化
- IMPORT StackUsr
- IMPORT bottom_of_heap
- ;给外部使用的标号在这声明
- EXPORT Reset
- EXPORT __rt_div0
- EXPORT __user_initial_stackheap
- CODE32
- AREA vectors,CODE,READONLY
- ENTRY
- ;中断向量表
- Reset
- LDR PC, ResetAddr
- LDR PC, UndefinedAddr
- LDR PC, SWI_Addr
- LDR PC, PrefetchAddr
- LDR PC, DataAbortAddr
- DCD 0xb9205f80
- LDR PC, [PC, #-0xff0]
- LDR PC, FIQ_Addr
- ResetAddr DCD ResetInit
- UndefinedAddr DCD Undefined
- SWI_Addr DCD SoftwareInterrupt
- PrefetchAddr DCD PrefetchAbort
- DataAbortAddr DCD DataAbort
- Nouse DCD 0
- IRQ_Addr DCD 0
- FIQ_Addr DCD FIQ_Handler
- ;未定义指令
- Undefined
- B Undefined
- ;软中断
- SoftwareInterrupt
- B SoftwareInterrupt
- ;取指令中止
- PrefetchAbort
- B PrefetchAbort
- ;取数据中止
- DataAbort
- B DataAbort
- ;快速中断
- FIQ_Handler
- STMFD SP!, {R0-R3, LR}
- BL FIQ_Exception
- LDMFD SP!, {R0-R3, LR}
- SUBS PC, LR, #4
- ;/*********************************************************************************************************
- ;** 函数名称: InitStack
- ;** 功能描述: 初始化堆栈
- ;** 输 入: 无
- ;** 输 出 : 无
- ;** 全局变量: 无
- ;** 调用模块: 无
- ;**
- ;** 作 者: 陈明计
- ;** 日 期: 2004年2月2日
- ;**-------------------------------------------------------------------------------------------------------
- ;** 修 改:
- ;** 日 期:
- ;**-------------------------------------------------------------------------------------------------------
- ;********************************************************************************************************/
- InitStack
- MOV R0, LR
- ;设置管理模式堆栈
- MSR CPSR_c, #0xd3
- LDR SP, StackSvc
- ;设置中断模式堆栈
- MSR CPSR_c, #0xd2
- LDR SP, StackIrq
- ;设置快速中断模式堆栈
- MSR CPSR_c, #0xd1
- LDR SP, StackFiq
- ;设置中止模式堆栈
- MSR CPSR_c, #0xd7
- LDR SP, StackAbt
- ;设置未定义模式堆栈
- MSR CPSR_c, #0xdb
- LDR SP, StackUnd
- ;设置系统模式堆栈
- MSR CPSR_c, #0xdf
- LDR SP, =StackUsr
- MOV PC, R0
- ;/*********************************************************************************************************
- ;** 函数名称: ResetInit
- ;** 功能描述: 复位入口
- ;**
- ;** 输 入: 无
- ;**
- ;** 输 出: 无
- ;**
- ;** 全局变量: 无
- ;** 调用模块: 无
- ;**
- ;** 作 者: 陈明计
- ;** 日 期: 2004年2月2日
- ;**-------------------------------------------------------------------------------------------------------
- ;** 修改人: 陈明计
- ;** 日 期: 2004年3月3日
- ;**------------------------------------------------------------------------------------------------------
- ;********************************************************************************************************/
- ResetInit
- BL InitStack ;初始化堆栈
- BL TargetResetInit ;目标板基本初始化
-
- B __main ;跳转到c语言入口
- ;/*********************************************************************************************************
- ;** 函数名称: __user_initial_stackheap
- ;** 功能描述: 库函数初始化堆和栈,不能删除
- ;**
- ;** 输 入: 参考库函数手册
- ;**
- ;** 输 出: 参考库函数手册
- ;**
- ;** 全局变量: 无
- ;** 调用模块: 无
- ;**
- ;** 作 者: 陈明计
- ;** 日 期: 2004年2月2日
- ;**-------------------------------------------------------------------------------------------------------
- ;** 修改人:
- ;** 日 期:
- ;**------------------------------------------------------------------------------------------------------
- ;********************************************************************************************************/
- __user_initial_stackheap
- LDR r0,=bottom_of_heap
- MOV pc,lr
- ;/*********************************************************************************************************
- ;** 函数名称: __rt_div0
- ;** 功能描述: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小
- ;**
- ;** 输 入: 参考库函数手册
- ;**
- ;** 输 出: 无
- ;**
- ;** 全局变量: 无
- ;** 调用模块: 无
- ;**
- ;** 作 者: 陈明计
- ;** 日 期: 2004年2月2日
- ;**-------------------------------------------------------------------------------------------------------
- ;** 修改人:
- ;** 日 期:
- ;**------------------------------------------------------------------------------------------------------
- ;********************************************************************************************************/
- __rt_div0
- B __rt_div0
- StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
- StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
- StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
- StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
- StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
- ;/* 分配堆栈空间 */
- AREA MyStacks, DATA, NOINIT, ALIGN=2
- SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间
- IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中断模式堆栈空间
- FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中断模式堆栈空间
- AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间
- UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈
- END
- ;/*********************************************************************************************************
- ;** End Of File
- ;********************************************************************************************************/