⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 实现LPC2220的UART的中断接受
💻 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 + -