ARM专辑-152M-pdf.zip

源代码在线查看: startup.s

软件大小: 74715 K
上传用户: QQ
关键词: M-pdf ARM 152 zip
下载地址: 免注册下载 普通下载 VIP

相关代码

				;/****************************************Copyright (c)**************************************************
				;**                               广州周立功单片机发展有限公司
				;**                                     研    究    所
				;**                                        产品一部 
				;**
				;**                                 http://www.zlgmcu.com
				;**
				;**--------------文件信息--------------------------------------------------------------------------------
				;**文   件   名: Startup.s
				;**创   建   人: 陈明计
				;**最后修改日期: 2004年3月3日
				;**描        述: lpc22xx的启动代码,包含异常向量入口、初始化堆栈的代码等
				;**              每个工程应当有独立的这个文件的拷贝,并进行相应的修改   
				;**--------------历史版本信息----------------------------------------------------------------------------
				;** 创建人: 陈明计
				;** 版  本: v1.0
				;** 日 期: 2004年2月2日
				;** 描 述: 原始版本
				;**
				;**------------------------------------------------------------------------------------------------------
				;** 修改人: 陈明计
				;** 版  本: v1.01
				;** 日 期: 2004年3月3日
				;** 描 述: 修改总线配置以适应多数情况 
				;**
				;**------------------------------------------------------------------------------------------------------
				;** 修改人: 陈明计
				;** 版  本: v1.02
				;** 日 期: 2004年3月27日
				;** 描 述: 增加代码以支持芯片的加密功能
				;**
				;**--------------当前版本修订------------------------------------------------------------------------------
				;** 修改人: 
				;** 日 期:
				;** 描 述:
				;**
				;**------------------------------------------------------------------------------------------------------
				;********************************************************************************************************/
				
				;定义堆栈的大小
				USR_STACK_LEGTH         EQU         256
				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  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
				;初始化外部总线控制器,根据目标板决定配置
				
				        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 
				;** 功能描述: 库函数初始化堆和栈,不能删除
				;** 
				;** 输 入: 参考库函数手册
				;**
				;** 输 出: 参考库函数手册
				;**         
				;** 全局变量: 无
				;** 调用模块: 无
				;**
				;** 作 者: 陈明计
				;** 日 期: 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
				
				;/*********************************************************************************************************
				;** 函数名称: CrpData
				;** 功能描述: 支持芯片加密功能
				;** 
				;** 输 入: 无
				;**
				;** 输 出: 无
				;**         
				;** 全局变量: 无
				;** 调用模块: 无
				;**
				;** 作 者: 陈明计
				;** 日 期: 2004年3月27日
				;**-------------------------------------------------------------------------------------------------------
				;** 修改人:
				;** 日 期:
				;**------------------------------------------------------------------------------------------------------
				;********************************************************************************************************/
				    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
				;/* 分配堆栈空间 */
				        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
				;********************************************************************************************************/
							

相关资源