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

📄 init.s

📁 hyesco AT91RM9200 ucos-ii source code
💻 S
字号:

;************************************************************************************************
;Compony:       CASIA
;File Name:		Init.s
;Description:		
;Author:		WeiAn	
;Date:			2004-03-11
;*************************CONST DEFINATION******************************************************/	
AT91C_BASE_CKGR       EQU  0xFFFFFC20      
AT91C_CKGR_MOSCEN     EQU  0x1
AT91C_CKGR_OSCOUNT    EQU  0x0ff00
CKGR_MOR              EQU  0xFFFFFC20

AT91_USER_Stack_Begin EQU  0x21000000
AT91_Stack_Begin      EQU  0x21000000

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
ARM_MODE_MASK         EQU  0x1F

I_BIT                 EQU  0x80
F_BIT                 EQU  0x40
T_BIT                 EQU  0x20

IRQ_STACK_SIZE		  EQU  0x10
FIQ_STACK_SIZE		  EQU  0x04
ABT_STACK_SIZE		  EQU  0x04
UND_STACK_SIZE		  EQU  0x04
SVC_STACK_SIZE		  EQU  0x10
USER_STACK_SIZE		  EQU  0x400


AT91C_BASE_AIC        EQU  0xFFFFF000     
AT91C_AIC_IVR         EQU  0xFFFFF100
AT91C_AIC_EOICR       EQU  0xFFFFF130
;*************************REGISTER DEFINATION*****************************************************/
AT91C_AIC_IMR              EQU  0xfffff110


;*************************************************************************************************/
    CODE32
	AREA    	Init,CODE,READONLY
	ENTRY 
       
                B          Reset_Handler

undefvec        B          undefvec

swivec          B          swivec   

pabtvec         B          pabtvec  

dabtvec         B          dabtvec 

rsvdvec         B          rsvdvec  

irqvec          ldr         pc, [pc,#-0xF20]

fiqvec          ldr         pc, [pc,#-0xF20]   


Reset_Handler


;******************************************
;Disable All Interrupt
;******************************************
          ldr r0,=AT91C_AIC_IMR
          ldr r1,=0
          STR r1,[r0]

; Get the CKGR Base Address
	ldr     r1, = AT91C_BASE_CKGR	
	
;-Main oscillator Enable register	APMC_MOR : Enable main oscillator , OSCOUNT = 0xFF
;	ldr 	r0, = AT91C_CKGR_MOSCEN:OR:AT91C_CKGR_OSCOUNT
	ldr 	r0, =0x0000FF01
	str     r0, [r1, #CKGR_MOR]

;**************************************
;Low level Init (PMC, AIC, EBI, ....)
;**************************************

;- Add loop to compensate Main Oscillator startup time
	ldr 	r0, =0x00000010
LoopOsc
	subs    r0, r0, #1              
	bhi     LoopOsc
	
	ldr 	r1, = 0x00204000	

;- Set up Supervisor Mode and set SVC Stack
	;msr     cpsr_c, #(ARM_MODE_SVC | I_BIT | F_BIT)
;Insure word alignement
	bic     r1, r1, #3                  
; Init stack SYS	
	mov     sp, r1                      
	IMPORT AT91F_LowLevelInit
	bl AT91F_LowLevelInit
	

;*****************************************
; Read/modify/write CP15 control register 
;*****************************************
; read cp15 control registre (cp15 r1) in r0
    mrc     p15, 0, r0, c1, c0, 0
; Reset bit :Little Endian end fast bus mode
    ldr     r3, =0xC0000080      
; Set bit :Asynchronous clock mode, Not Fast Bus
    ldr     r4, =0xC0000000      
    bic     r0, r0, r3             
    orr     r0, r0, r4             
; write r0 in cp15 control registre (cp15 r1)
    mcr     p15, 0, r0, c1, c0, 0 

;*******************************************
; Setup the stack for each mode
;*******************************************
   ldr		r0, =AT91_Stack_Begin

;Set up Undefined Instruction Mode and set Undef Mode Stack
	msr     CPSR_c, #(ARM_MODE_UNDEF | I_BIT | F_BIT)
;Init stack Undef
	mov     r13, r0 
	sub     r0, r0, #UND_STACK_SIZE
	
;Set up Abort Mode and set Abort Mode Stack
	msr     CPSR_c, #(ARM_MODE_ABORT | I_BIT | F_BIT)
;Init stack Abort
	mov     r13, r0
	sub     r0, r0, #ABT_STACK_SIZE
	
;Set up Interrupt Mode and set IRQ Mode Stack
	msr     CPSR_c, #(ARM_MODE_IRQ | I_BIT | F_BIT)
;Init stack IRQ
	mov     r13, r0                     
	sub     r0, r0, #IRQ_STACK_SIZE
	
;Set up Fast Interrupt Mode and set FIQ Mode Stack
	msr     CPSR_c, #(ARM_MODE_FIQ | I_BIT | F_BIT)
;Init stack FIQ
	mov     r13, r0
	sub     r0, r0, #FIQ_STACK_SIZE

	
;Set up Supervisor Mode and set SVC Mode Stack
	msr     CPSR_c, #(ARM_MODE_SVC | F_BIT)
;Init stack Sup
	mov     r13, r0                     
 	sub     r0, r0, #SVC_STACK_SIZE


 


	


;Set up User Mode, set User Mode Stack and enable interrupts  
	;msr     CPSR_c, #(ARM_MODE_SYS | F_BIT)
; Init stack User
	;mov     r13, r0

; change to user mode 
   ;mrs     r0    , CPSR
   ;bic     r0,r0, #I_BIT
   ;msr     CPSR_c, r0
   ;msr     cpsr_fsxc, #ARM_MODE_SVC   
;********************************************************************
; End of Stack Setup
;********************************************************************
;*********************************
;Copy Armboot form flash to sdram
;*********************************
;source address
     ;ldr	r0, =Armboot_begin
;size of armboot(20K)	
	;ldr	r2, =0x5000		
;target address(start of sdram)
	;ldr	r1, =0x20000000 
    
;copy begin here	
;rom2ram_copy
    ;subs r2, r2, #1
    ;ldr	r3, [r0],#4
    ;str	r3, [r1],#4
    ;bne	rom2ram_copy
;Jump to target address
    ;ldr    	r0,=0x20000000
    ;mov    	pc,r0
   
;Armboot_begin


;*****************************************************************************         
;Jump to Main Routine	
	  IMPORT      C_Entry	
      BL      	  C_Entry
Halt  B  Halt
      END             

⌨️ 快捷键说明

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