📄 startup.s
字号:
;/****************************************Copyright (c)**************************************************
;** 沈阳昊通科技服务有限公司
;** http://www.inhow.com
;**
;**-------------------------------------------文件信息---------------------------------------------------
;** 文件名: Startup.s
;** 最后修改日期: 2008-01-20
;** 最后版本: 1.0
;** 相关描述: LPC2220的启动代码
;**
;**------------------------------------------------------------------------------------------------------
;** 作者: 陈伟斌
;** 创建时间: 2008-01-20
;** 最后版本: 1.0
;** 相关描述: 试用版本
;**
;**------------------------------------------------------------------------------------------------------
;** 修改者:
;** 修改时间:
;** 版本:
;** 相关描述:
;**
;********************************************************************************************************/
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
BCFG0 EQU 0xFFE00000
BCFG1 EQU 0xFFE00004
BCFG2 EQU 0xFFE00008
BCFG3 EQU 0xFFE0000C
;// IMPORT __use_no_semihosting_swi
IMPORT __use_two_region_memory
IMPORT FIQ_Exception ;//快速中断异常处理程序
IMPORT __main ;//C语言主程序入口
IMPORT TargetResetInit ;//目标板基本初始化
EXPORT bottom_of_heap
EXPORT bottom_of_Stacks
EXPORT top_of_heap
EXPORT StackUsr
EXPORT Reset
EXPORT __user_initial_stackheap
CODE32
;//*******************************************************************************************************
;//vectors段开始
;//*******************************************************************************************************
AREA vectors,CODE,READONLY
ENTRY
Reset ;//中断向量表,开头16条语句,总共16*4=64个字节
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
** 描述: 各模式下的栈初始化
** 参数: None
** 返回值: None
** 调用的全局变量: None
** 调用的函数: None
** 创建者: 陈伟斌
** 创建时间: 2008/01/20
**-------------------------------------------------------------------------------------------------------
** 修改者:
** 修改时间:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
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, #0x5f ;//设置系统模式堆栈
LDR SP, =StackUsr
MOV PC, R0
;/*********************************************************************************************************
** 函数名: ResetInit
** 描述: 芯片复位配置
** 参数: None
** 返回值: None
** 调用的全局变量: None
** 调用的函数: None
** 创建者: 陈伟斌
** 创建时间: 2008/01/20
**-------------------------------------------------------------------------------------------------------
** 修改者:
** 修改时间:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
ResetInit
;//初始化外部总线控制器,根据目标板决定配置
LDR R0, =PINSEL2
IF :DEF: EN_CRP
LDR R1, =0x0f814910
ELSE
LDR R1, =0x0f814914
ENDIF
STR R1, [R0]
LDR R0, =BCFG0
LDR R1, =0x1000ffef
STR R1, [R0]
LDR R0, =BCFG1
LDR R1, =0x1000ffef
STR R1, [R0]
;// LDR R0, =BCFG2
;// LDR R1, =0x2000ffef
;// STR R1, [R0]
;// LDR R0, =BCFG3
;// LDR R1, =0x2000ffef
;// STR R1, [R0]
BL InitStack ;//初始化堆栈
BL TargetResetInit ;//目标板基本初始化
;//跳转到c语言入口
B __main
;/*********************************************************************************************************
;**函数名称: __user_initial_stackheap
;**功能描述: 库函数初始化堆和栈,不能删除
;**输 入: 参考库函数手册
;**输 出 : 参考库函数手册
;**全局变量: 无
;**调用模块: 无
;**作 者: 陈伟斌
;**日 期: 2008/01/20
;**-------------------------------------------------------------------------------------------------------
;**修改者:
;**修改日期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap
LDR r0,=bottom_of_heap
;// LDR r1,=StackUsr
LDR r2,=top_of_heap
LDR r3,=bottom_of_Stacks
MOV pc,lr
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
;/*********************************************************************************************************
;**函数名称: CrpData
;**功能描述: 加密芯片
;**输 入: None 无
;**输 出 : None 无
;**全局变量: None 无
;**调用模块: None 无
;**作 者: 陈伟斌
;**日 期: 2008年1月20日
;**-------------------------------------------------------------------------------------------------------
;**修 改:
;**日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
IF :DEF: EN_CRP
IF . >= 0x1fc
INFO 1,"\nThe data at 0x000001fc must be 0x87654321.\nPlease delete some source before this line."
ENDIF
CrpData
WHILE . < 0x1fc
NOP
WEND
CrpData1
DCD 0x87654321 ;//当此数为0x87654321时,用户程序被保护 */
ENDIF
;//*******************************************************************************************************
;//MyStacks段开始 分配堆栈空间
;//*******************************************************************************************************
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 ;//未定义模式堆栈
;//*******************************************************************************************************
;//Heap段开始
;//*******************************************************************************************************
AREA Heap, DATA, NOINIT
bottom_of_heap SPACE 1
;//*******************************************************************************************************
;//StackBottom段开始
;//*******************************************************************************************************
AREA StackBottom, DATA, NOINIT
bottom_of_Stacks SPACE 1
;//*******************************************************************************************************
;//HeapTop段开始
;//*******************************************************************************************************
AREA HeapTop, DATA, NOINIT
top_of_heap
;//*******************************************************************************************************
;//Stacks段开始
;//*******************************************************************************************************
AREA Stacks, DATA, NOINIT
StackUsr
END
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -