www.pudn.com > LPC2200_USB.rar > Startup.s, change:2005-05-07,size:11406b


;/****************************************Copyright (c)************************************************** 
;**                               Guangzou ZLG-MCU Development Co.,LTD. 
;**                                      graduate school 
;**                                 http://www.zlgmcu.com 
;** 
;**--------------File Info------------------------------------------------------------------------------- 
;** File name: 			Startup.s 
;** Last modified Date:  2004-09-17 
;** Last Version: 		1.0 
;** Descriptions: 		The start up codes for LPC2200, including the initializing codes for the entry point of exceptions and the stacks of user tasks. 
;**				Every project should have a independent copy of this file for related modifications 
;**------------------------------------------------------------------------------------------------------ 
;** Created by: 			Chenmingji 
;** Created date:   		2004-02-02 
;** Version:			1.0 
;** Descriptions: 		The original version 
;** 
;**------------------------------------------------------------------------------------------------------ 
;** Modified by: 		Chenmingji 
;** Modified date:		2004-09-17 
;** Version:			1.01 
;** Descriptions: 		Modified the bus setting to adapt for many common situations  
;** 
;**------------------------------------------------------------------------------------------------------ 
;** Modified by: 		Chenmingji 
;** Modified date:		2004-09-17 
;** Version:			1.02 
;** Descriptions: 		Added codes to support the enciphering of the chip 
;** 
;**------------------------------------------------------------------------------------------------------ 
;** Modified by: 		Chenmingji 
;** Modified date:		2004-09-17 
;** Version:			1.04 
;** Descriptions: 		Renewed the template, added codes to support more compilers  
;** 
;**------------------------------------------------------------------------------------------------------ 
;** Modified by: 		 
;** Modified date: 
;** Version:	 
;** Descriptions:  
;** 
;********************************************************************************************************/ 
 
;define the stack size 
;定义堆栈的大小 
FIQ_STACK_LEGTH         EQU         0 
IRQ_STACK_LEGTH         EQU         9*8             ;every layer need 9 bytes stack , permit 8 layer .每层嵌套需要9个字堆栈,允许8层嵌套 
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 
 
;The imported labels         
;引入的外部标号在这声明 
    IMPORT  FIQ_Exception                   ;Fast interrupt exceptions handler 快速中断异常处理程序 
    IMPORT  __main                          ;The entry point to the main function C语言主程序入口  
    IMPORT  TargetResetInit                 ;initialize the target board 目标板基本初始化 
    IMPORT  SoftwareInterrupt 
 
;The emported labels         
;给外部使用的标号在这声明 
	EXPORT  bottom_of_heap 
    EXPORT  bottom_of_Stacks 
    EXPORT  top_of_heap 
    EXPORT  StackUsr 
     
    EXPORT  Reset 
    EXPORT  __user_initial_stackheap 
 
    CODE32 
 
    AREA    vectors,CODE,READONLY 
        ENTRY 
;interrupt vectors 
;中断向量表 
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 
         
;取指令中止 
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 
 
;/********************************************************************************************************* 
;** unction name 	函数名称: 	InitStack 
;** Descriptions 	功能描述: 	Initialize the stacks  初始化堆栈 
;** input parameters 	输 入:   	None 无 
;** Returned value   	输 出 :  	None 无 
;** Used global variables 全局变量: 	None 无 
;** Calling modules 	调用模块: 	None 无 
;**  
;** Created by 		作 者: 	Chenmingji 陈明计 
;** Created Date 	日 期: 	2004/02/02 2004年2月2日 
;**------------------------------------------------------------------------------------------------------- 
;** Modified by 	修 改:  
;** Modified date 	日 期:  
;**------------------------------------------------------------------------------------------------------- 
;********************************************************************************************************/ 
InitStack     
        MOV     R0, LR 
;Build the SVC stack 
;设置中断模式堆栈 
        MSR     CPSR_c, #0xd2 
        LDR     SP, StackIrq 
;Build the FIQ stack	 
;设置快速中断模式堆栈 
        MSR     CPSR_c, #0xd1 
        LDR     SP, StackFiq 
;Build the DATAABORT stack 
;设置中止模式堆栈 
        MSR     CPSR_c, #0xd7 
        LDR     SP, StackAbt 
;Build the UDF stack 
;设置未定义模式堆栈 
        MSR     CPSR_c, #0xdb 
        LDR     SP, StackUnd 
;Build the SYS stack 
;设置系统模式堆栈 
        MSR     CPSR_c, #0xdf 
        LDR     SP, =StackUsr 
 
        MOV     PC, R0 
 
;/********************************************************************************************************* 
;** unction name 	函数名称: 	ResetInit 
;** Descriptions 	功能描述: 	RESET  复位入口 
;** input parameters 	输 入:   	None 无 
;** Returned value   	输 出 :  	None 无 
;** Used global variables 全局变量: 	None 无 
;** Calling modules 	调用模块: 	None 无 
;**  
;** Created by 		作 者: 	Chenmingji 陈明计 
;** Created Date 	日 期: 	2004/02/02 2004年2月2日 
;**------------------------------------------------------------------------------------------------------- 
;** Modified by 	修 改: Chenmingji 陈明计 
;** Modified date 	日 期: 2004/02/02 2004年3月3日 
;**------------------------------------------------------------------------------------------------------- 
;********************************************************************************************************/ 
ResetInit 
;Initial the extenal bus controller 
;初始化外部总线控制器,根据目标板决定配置 
 
        LDR     R0, =PINSEL2 
    IF :DEF: EN_CRP 
        LDR     R1, =0x0f814910 
    ELSE 
        LDR     R1, =0x0f814914 
    ENDIF 
        STR     R1, [R0] 
 
        LDR     R0, =BCFG0 
        LDR     R1, =0x10001460				;/* 配置外部RAM访问速度为最快 */  
        STR     R1, [R0] 
 
        LDR     R0, =BCFG1 
        LDR     R1, =0x1000ffef 
        STR     R1, [R0] 
 
        LDR     R0, =BCFG2 
        LDR     R1, =0x10000400				;/* 配置Bank2为16位总线模试,前速度为最快 */ 
        STR     R1, [R0] 
 
;        LDR     R0, =BCFG3 
;        LDR     R1, =0x2000ffef 
;        STR     R1, [R0] 
         
        BL      InitStack               ; Initialize the stack 初始化堆栈 
        BL      TargetResetInit         ; Initialize the target board 目标板基本初始化 
                                        ; Jump to the entry point of C program 跳转到c语言入口 
        B       __main 
 
 
;/********************************************************************************************************* 
;** unction name 	函数名称: 	__user_initial_stackheap 
;** Descriptions 	功能描述: 	Initial the function library stacks and heaps, can not deleted!   库函数初始化堆和栈,不能删除 
;** input parameters 	输 入:   	reference by function library 参考库函数手册 
;** Returned value   	输 出 :  	reference by function library 参考库函数手册 
;** Used global variables 全局变量: 	None 无 
;** Calling modules 	调用模块: 	None 无 
;**  
;** Created by 		作 者: 	Chenmingji 陈明计 
;** Created Date 	日 期: 	2004/02/02 2004年2月2日 
;**------------------------------------------------------------------------------------------------------- 
;** Modified by 	 
;** Modified date 	 
;**------------------------------------------------------------------------------------------------------- 
;********************************************************************************************************/ 
__user_initial_stackheap     
    LDR   r0,=bottom_of_heap		 
;    LDR   r1,=StackUsr			 
    LDR   r2,=top_of_heap		 
    LDR   r3,=bottom_of_Stacks		 
    MOV   pc,lr				 
         
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 
 
;/********************************************************************************************************* 
;** unction name 	函数名称: 	CrpData 
;** Descriptions 	功能描述: 	encrypt the chip 
;** input parameters 	输 入:   	None 无 
;** Returned value   	输 出 :  	None 无 
;** Used global variables 全局变量: 	None 无 
;** Calling modules 	调用模块: 	None 无 
;**  
;** Created by 		作 者: 	Chenmingji 陈明计 
;** Created Date 	日 期: 	2004/03/27 2004年3月27日 
;**------------------------------------------------------------------------------------------------------- 
;** Modified by 	修 改:  
;** Modified date 	日 期:  
;**------------------------------------------------------------------------------------------------------- 
;********************************************************************************************************/ 
    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          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */ 
    ENDIF 
 
;/* 分配堆栈空间 */ 
        AREA    MyStacks, DATA, NOINIT, ALIGN=2 
IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间 
FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间 
AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间 
UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈 
 
        AREA    Heap, DATA, NOINIT 
bottom_of_heap    SPACE   1 
 
        AREA    StackBottom, DATA, NOINIT 
bottom_of_Stacks    SPACE   1 
 
        AREA    HeapTop, DATA, NOINIT 
top_of_heap 
 
        AREA    Stacks, DATA, NOINIT 
StackUsr 
 
    END 
;/********************************************************************************************************* 
;**                            End Of File 
;********************************************************************************************************/