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

📄 startup.s

📁 在lpc2114 上的ADS例子
💻 S
字号:
;******************************************************************************
;
;                               STARTUP CODE
;                                  LPC2138
;                             KEIL's uVision3 
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : Startup.s
;******************************************************************************

                PRESERVE8
                AREA   INIT, CODE, READONLY                     ; Name this block of code                                   ;
                ARM

;******************************************************************************
;                                  IMPORTS
;******************************************************************************
                                
                IMPORT  __main
                IMPORT  ||Image$$ARM_LIB_STACK$$ZI$$Limit||     ; Import stack limit from scatter-loading file              ;

;******************************************************************************
;                                  EXPORTS
;******************************************************************************



;******************************************************************************
;                                DEFINITIONS
;******************************************************************************

MODE_BITS	    EQU	    0x1F		; Bit mask for mode bits in CPSR
USR_MODE	    EQU	    0x10		; User mode
FIQ_MODE	    EQU 	0x11		; Fast Interrupt Request mode
IRQ_MODE	    EQU	    0x12		; Interrupt Request mode
SVC_MODE	    EQU	    0x13		; Supervisor mode
ABT_MODE	    EQU	    0x17		; Abort mode
UND_MODE	    EQU	    0x1B		; Undefined Instruction mode
SYS_MODE        EQU 	0x1F		; System mode
	
I_BIT           EQU     0x80
F_BIT           EQU     0x40

                                                      	    ; Define stack sizes                                        ;
IRQ_STK_SIZE    EQU     0x00000200
FIQ_STK_SIZE    EQU     0x00000100
SVC_STK_SIZE    EQU     0x00000200
ABT_STK_SIZE    EQU     0x00000200
UND_STK_SIZE    EQU     0x00000200
SYS_STK_SIZE    EQU     0x00000200



;******************************************************************************
;                             PERFORM ROM/RAM REMAPPING
;******************************************************************************                

                ENTRY
Vectors
                LDR     PC, Reset_Addr
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, Prefetch_Addr
                LDR     PC, Abort_Addr
                NOP
		        LDR	    PC, IRQ_Addr
		        LDR	    PC, FIQ_Addr

Reset_Addr      DCD     ResetHndlr
Undef_Addr      DCD     OS_CPU_ARM_ExceptUndefInstrHndlr
SWI_Addr        DCD     OS_CPU_ARM_ExceptSwiHndlr
Prefetch_Addr   DCD     OS_CPU_ARM_ExceptPrefetchAbortHndlr
Abort_Addr      DCD     OS_CPU_ARM_ExceptDataAbortHndlr
                NOP
IRQ_Addr        DCD     OS_CPU_ARM_ExceptIrqHndlr
FIQ_Addr        DCD     OS_CPU_ARM_ExceptFiqHndlr

OS_CPU_ARM_ExceptUndefInstrHndlr      B   OS_CPU_ARM_ExceptUndefInstrHndlr
OS_CPU_ARM_ExceptSwiHndlr             B   OS_CPU_ARM_ExceptSwiHndlr
OS_CPU_ARM_ExceptPrefetchAbortHndlr   B   OS_CPU_ARM_ExceptPrefetchAbortHndlr
OS_CPU_ARM_ExceptDataAbortHndlr       B   OS_CPU_ARM_ExceptDataAbortHndlr
OS_CPU_ARM_ExceptIrqHndlr             B   OS_CPU_ARM_ExceptIrqHndlr
OS_CPU_ARM_ExceptFiqHndlr             B   OS_CPU_ARM_ExceptFiqHndlr


                

;******************************************************************************
;                              SETUP STACK POINTERS
;******************************************************************************
ResetHndlr
                LDR     r1, =||Image$$ARM_LIB_STACK$$ZI$$Limit||
                
                MRS     r0,cpsr                             ; Original PSR value                                        ;
                BIC     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                ORR     r0,r0,#IRQ_MODE                     ; Set IRQ mode bits                                         ;
                MSR     cpsr_c,r0                           ; Change the mode                                           ;
                MOV     sp, r1
                SUB     r1, r1, #IRQ_STK_SIZE
                
                MRS     r0,cpsr                             ; Original PSR value                                        ;
                BIC     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                ORR     r0,r0,#ABT_MODE                     ; Set IRQ mode bits                                         ;
                MSR     cpsr_c,r0                           ; Change the mode                                           ;
                MOV     sp, r1
                SUB     r1, r1, #ABT_STK_SIZE
                
                MRS     r0,cpsr                             ; Original PSR value                                        ;
                BIC     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                ORR     r0,r0,#UND_MODE                     ; Set IRQ mode bits                                         ;
                MSR     cpsr_c,r0                           ; Change the mode                                           ;
                MOV     sp, r1
                SUB     r1, r1, #UND_STK_SIZE

                MRS     r0,cpsr                             ; Original PSR value                                        ;
                BIC     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                ORR     r0,r0,#FIQ_MODE                     ; Set IRQ mode bits                                         ;
                MSR     cpsr_c,r0                           ; Change the mode                                           ;
                MOV     sp, r1
                SUB     r1, r1, #FIQ_STK_SIZE
                
                MRS     r0,cpsr                             ; Original PSR value                                        ;
                BIC     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                ORR     r0,r0,#SVC_MODE                     ; Set IRQ mode bits                                         ;
                MSR     cpsr_c,r0                           ; Change the mode                                           ;
                MOV     sp, r1
        
                MSR     cpsr_c, #SVC_MODE:OR:F_BIT          ; Enable interrupts, if required                            ;

;******************************************************************************
;                                   MOVE TO MAIN
;******************************************************************************
                LDR     r0, =__main
                bx      r0                             	    ; Save this in register for possible long jump              ;

                LTORG

                END 
        

⌨️ 快捷键说明

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