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

📄 init.s

📁 keil编译器下uocs在lpc2214上的移植
💻 S
字号:
;******************************************************************************
;
;                               启动代码
;                               LPC2214
;                             KEIL's uVision3 
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : init.s
;******************************************************************************

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

;******************************************************************************
;                                  外部函数起始地址
;******************************************************************************
                                
                IMPORT  __main	 ;主程序起始地址
                IMPORT  ||Image$$ARM_LIB_STACK$$ZI$$Limit||     ; 堆栈起始地址Import stack limit from scatter-loading file 执行区中ZI 输出节末尾地址后面的字节地址             ;

;******************************************************************************
;                                  内部函数起始地址
;******************************************************************************

                EXPORT  ResetHndlr	 ;系统引导与存储器映射设置程序

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

MODE_BITS	    EQU	    0x1F		; CPSR的位屏蔽方式(模式位被屏蔽)
USR_MODE	    EQU	    0x10		; 用户模式
FIQ_MODE	    EQU 	0x11		; 快中断模式
IRQ_MODE	    EQU	    0x12		; 中断模式
SVC_MODE	    EQU	    0x13		; 管理模式
ABT_MODE	    EQU	    0x17		; 中止模式
UND_MODE	    EQU	    0x1B		; 未定义模式
SYS_MODE        EQU 	0x1F		; 系统模式
	
I_BIT           EQU     0x80		;用来设置或查询IRQ位
F_BIT           EQU     0x40		;用来设置或查询FIQ位

;定义堆栈大小
IRQ_STK_SIZE    EQU     0x00000200	;中断模式堆栈大小512字节
FIQ_STK_SIZE    EQU     0x00000100	;快中断模式堆栈大小256字节
SVC_STK_SIZE    EQU     0x00000200	;管理模式堆栈大小512字节
ABT_STK_SIZE    EQU     0x00000200	;中止模式堆栈大小512字节
UND_STK_SIZE    EQU     0x00000200	;未定义模式堆栈大小512字节
SYS_STK_SIZE    EQU     0x00000200	;系统模式堆栈大小512字节

MEMMAP          EQU     0xE01FC040	;定义存储器映射控制寄存器地址

                                                         	; Define stack pointers                                     ;

;******************************************************************************
;                             PERFORM ROM/RAM REMAPPING
;								系统引导与存储器映射
;******************************************************************************                

                ENTRY
ResetHndlr      
                 ;判断采用了哪种系统引导与存储器映射方式
				IF      :DEF:REMAP
                LDR     R0, =MEMMAP
                IF      :DEF:EXTMEM_MODE ;用户外部存储器模式
                MOV     R1, #3
                ELIF    :DEF:RAM_MODE	;用户RAM模式
                MOV     R1, #2
                ELSE		  			;用户Flash模式
                MOV     R1, #1
                ENDIF
                STR     R1, [R0]
                ENDIF

;******************************************************************************
;                              SETUP STACK POINTERS	 初始化堆栈
;******************************************************************************
                
                ldr     r1, =||Image$$ARM_LIB_STACK$$ZI$$Limit||
                
                mrs     r0,cpsr                             ; 取CPSR原始值                                        ;
                bic     r0,r0,#MODE_BITS                    ; 清除模式位                                       ;
                orr     r0,r0,#IRQ_MODE                     ; 设置IRQ模式位                                         ;
                msr     cpsr_c,r0                           ; 模式改变                                           ;
                mov     sp, r1								; SP指到IRQ堆栈起始处
                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          ; 进入管理模式并使能快中断;

;******************************************************************************
;                                   MOVE TO MAIN
;                                   跳转到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 + -