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

📄 startup.s

📁 AT91SAM9261的USB设备驱动程序
💻 S
字号:


;------------------------------------------------------------------------------
;       Includes
;------------------------------------------------------------------------------

    

        
;////myDef
SVC_STACK   EQU     (0x20a00000)
SYS_STACK   EQU     (SVC_STACK-0x100000)
IRQ_STACK   EQU     (SYS_STACK-0x100000)
NOINT       EQU 	0xc0
IRQMODE     EQU 	0x12
;////
;-------------------------------------------------------------------------------
;       Constants
;-------------------------------------------------------------------------------

;-- ARM processor modes
ARM_MODE_USER           EQU     0x10
ARM_MODE_FIQ            EQU     0x11
ARM_MODE_IRQ            EQU     0x12
ARM_MODE_SVC            EQU     0x13
ARM_MODE_ABORT          EQU     0x17
ARM_MODE_UNDEF          EQU     0x1B
ARM_MODE_SYS            EQU     0x1F

;-- Status register bits
I_BIT                   EQU     0x80
F_BIT                   EQU     0x40

;-- Stack sizes
IRQ_STACK_SIZE          EQU     (3*8*4)        ;( 3 stacks 8 vectors 4 bytes)
FIQ_STACK_SIZE          EQU     0x004
ABT_STACK_SIZE          EQU     0x004
UND_STACK_SIZE          EQU     0x004
SVC_STACK_SIZE          EQU     0x800
SYS_STACK_SIZE          EQU     0x400

;-------------------------------------------------------------------------------
;       Entry point
;-------------------------------------------------------------------------------
    AREA        reset, CODE, READONLY

    EXPORT    __ENTRY
__ENTRY

;-------------------------------------------------------------------------------
;- Exception vectors ( before Remap )
;-------------------------------------------------------------------------------
;- These vectors are read at address 0.
;- They absolutely requires to be in relative addresssing mode in order to
;- guarantee a valid jump. For the moment, all are just looping (what may be
;- dangerous in a final system). If an exception occurs before remap, this
;- would result in an infinite loop.
;-------------------------------------------------------------------------------

                B           Reset               ; 0x00 Reset handler
undefvec
                B           undefvec            ; 0x04 Undefined Instruction
swivec
                B           swivec              ; 0x08 Software Interrupt
pabtvec
                B           pabtvec             ; 0x0C Prefetch Abort
dabtvec
                B           dabtvec             ; 0x10 Data Abort
rsvdvec
                B           rsvdvec             ; 0x14 reserved
irqvec
               LDR PC,[PC,# -&F20]         ; 0x18 IRQ : read the AIC
fiqvec
                B           fiqvec              ; 0x1C FIQ

;-------------------------------------------------------------------------------
;       Reset routine
;-------------------------------------------------------------------------------
Reset

;---- Stack setup
;---- End of RAM (start of stack) address in r1



		ldr r0,=0x1
		mov r1,r0

;enter IRQ mode and set IRQ stack
	ldr r1,=(IRQMODE|NOINT)
	msr	cpsr_cxsf,r1		        
	ldr	sp,=IRQ_STACK        ;中断模式堆栈
	
   mov   r3, #ARM_MODE_SVC |I_BIT| F_BIT  
   msr   CPSR_c, r3                ; Copy to CPSR           
	ldr r13,=SVC_STACK       ;特权模式堆栈
		

   mov   r3, #ARM_MODE_SYS | F_BIT  
   msr   CPSR_c, r3              ; Copy to CPSR           
	ldr r13,=SYS_STACK       ;系统模式堆栈
	
	ldr r1,=(0xffffff00)
	mov r0,#1
	str r0,[r1]  ;内存重映射,使得0x0开始的内存可写




    
;---- Initialize ZI data
ZI_loop
    cmp     r1, r2
    strcc   r0, [r1], #4
    bcc     ZI_loop
    b       ZI_end

ZI_addresses
    IMPORT  |Image$$ZI$$Base|       ; Base and limit of area
    IMPORT  |Image$$ZI$$Limit|      ; Top of zero init segment

    DCD     |Image$$ZI$$Base|
    DCD     |Image$$ZI$$Limit|
ZI_end

;-------------------------------------------------------------------------------
;       Branch on C code Main function (with interworking)
;-------------------------------------------------------------------------------
; Branch must be performed by an interworking call as either an ARM or Thumb
; main C function must be supported. This makes the code not position-
; independant. A Branch with link would generate errors
;-------------------------------------------------------------------------------
    IMPORT  main

    ldr     r0, =main
    mov     lr, pc
    bx      r0



    END

⌨️ 快捷键说明

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