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

📄 startup.s

📁 nxp的ARM9处理器LPC3180代码,提供了几乎所有的外设示例程序.
💻 S
字号:
;/*****************************************************************************
;*   startup.s:  Startup file for Philips LPC318x Family Microprocessors
;*
;*   Copyright(C) 2006, Philips Semiconductor
;*   All rights reserved.
;*
;*   History
;*   2005.10.01  ver 1.00    Prelimnary version, first Release
;*
;*****************************************************************************/

	PRESERVE8
	
;define the stack size
SVC_STACK_LEGTH		EQU	256
FIQ_STACK_LEGTH		EQU	256
IRQ_STACK_LEGTH		EQU	256
ABT_STACK_LEGTH		EQU	64
UND_STACK_LEGTH		EQU	64

I_Bit			EQU	0x80
F_Bit			EQU	0x40

USR32Mode		EQU	0x10
SVC32Mode		EQU	0x13
SYS32Mode		EQU	0x1F
IRQ32Mode		EQU	0x12
FIQ32Mode		EQU	0x11
ABT32Mode		EQU	0x17
UDF32Mode		EQU	0x1B

SCB_ADDR		EQU	0x40000000
BOOT_MAP		EQU	SCB_ADDR + 0x4014

;The imported labels
    IMPORT  IRQ_Exception		; IRQ interrupt handler
    IMPORT  FIQ_Exception		; Fast interrupt exceptions handler 
    IMPORT  __main			; The entry point to the main function 
    IMPORT  TargetResetInit		; initialize the target board
    IMPORT  SWI_Handler			; SWI handler from swi_handler.s
       
;The exported labels
    EXPORT  bottom_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
        LDR     PC, ReservedAddr
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr

ResetAddr		DCD     ResetInit
UndefinedAddr	DCD     Undefined_Handler
SWI_Addr		DCD     SWI_Handler
PrefetchAddr	DCD     Prefetch_Handler
DataAbortAddr	DCD     DataAbort_Handler
ReservedAddr	DCD     Reserved_Handler
IRQ_Addr		DCD	IRQ_Exception
FIQ_Addr		DCD     FIQ_Exception

Undefined_Handler
	B	Undefined_Handler

Reserved_Handler
	B	Reserved_Handler

Prefetch_Handler
	B       Prefetch_Handler

DataAbort_Handler
	B       DataAbort_Handler

;*****************************************************************************
;*  Initialize the stacks                                                    *
;*  Function : void InitStack(void)                                          *
;*      Parameters                                                           *
;*          input  : None                                                    * 
;*          output : None                                                    *
;*****************************************************************************
InitStack    
	MOV     R0, LR
;Build the SVC stack
	MSR     CPSR_c, #SVC32Mode		
	LDR     SP, StackSvc	
;Build the IRQ stack
	MSR     CPSR_c, #IRQ32Mode
	LDR     SP, StackIrq
;Build the FIQ stack
	MSR     CPSR_c, #FIQ32Mode
	LDR     SP, StackFiq
;Build the DATAABORT stack
	MSR     CPSR_c, #ABT32Mode
	LDR     SP, StackAbt
;Build the UDF stack
	MSR     CPSR_c, #UDF32Mode
	LDR     SP, StackUnd
;Build the SYS stack
	MSR     CPSR_c, #SYS32Mode
	LDR     SP, =StackUsr

	MOV     PC, R0

;******************************************************************************
;*  Reset Entry                                                               *
;*  Function : void ResetInit(void)                                           *
;*      Parameters                                                            *
;*          input  : None                                                     * 
;*          output : None                                                     *
;******************************************************************************
ResetInit
	ldr	r0, =BOOT_MAP
	mov	r1, #0x01	
	str	r1, [r0]
					; cp15
        MOV     r0, #0			; clear control register, 
        MCR     p15, 0, r0, c1, c0, 0	; this basically disables the lot
        MCR     p15, 0, r0, c7, c7, 0	; invalidate caches
        MCR     p15, 0, r0, c8, c7, 0	; invalidate TLBs

	BL      InitStack               ;Initialize the stack
	BL      TargetResetInit         ;Initialize the target board
                                        ;Jump to the entry point of C program
	B       __main

;******************************************************************************
;*  Initialize the function library stacks and heaps, can't be                * 
;*  deleted                                                                   *
;*  Function : void __user_initial_stackheap(void)                            *
;*      Parameters                                                            *
;*          input  : None                                                     * 
;*          output : None                                                     *
;******************************************************************************
__user_initial_stackheap    
	LDR	r0,=bottom_of_heap
	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     UndStackSpace + (UND_STACK_LEGTH - 1)* 4
    
        AREA    MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace	SPACE   SVC_STACK_LEGTH * 4  ;Stack spaces for ADMIN Mode
IrqStackSpace	SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for IRQ Mode
FiqStackSpace	SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for FIQ Mode
AbtStackSpace	SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for ABORT Mode
UndStackSpace	SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for UNDEF Mode

        AREA    Heap, DATA, NOINIT
bottom_of_heap	SPACE   1

	AREA    Stacks, DATA, NOINIT
StackUsr    	SPACE   1

           END

;/*****************************************************************************
;**                            End Of File
;*****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -