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

📄 boot_gfd.s

📁 对nand flash的读写
💻 S
字号:
;/*****************************************************
;	file name :	 	boot.s
;	descrition:		boot the arm processor
;	history:		2003-1-7 15:59 lc create
;*****************************************************/

	include hardware_gfd.h
	
	
	extern	main
	
	AREA BOOT, CODE, READONLY                                                     
	       ENTRY                           		; Mark first instruction to execute 


;vector table
    bal		RST_DO  
	bal		EXTENT_INSTRU
	bal		SWI_DO
	bal		ABORT_PREFETCH_DO
	bal		ABORT_DATA_DO
	mov		R1,		R1				;reserved exception
	bal		Irq_Do
	mov		r0, r0
	bal		Fiq_Do   
	;the code for the fiq

;*****************************************************************
;	init all the stacks under all CPU mode
;*****************************************************************	

	
RST_DO 
	EXPORT	RST_DO
	

	LDR		RTA, =0X11000010           ;remap to cse 0x30000000		
	LDR		RTB, =0X0000000B
	STR		RTB, [RTA]
	
	
	ldr		sp, =SP_SVC  		;init sp_svc
	
	mov		RTA, #0xD2			;chmod to irq and init sp_irq
	msr		cpsr_cf, RTA   
	ldr		sp, =SP_IRQ
	
	mov		RTA, #0XD1			;chomod to fiq and init sp_fiq
    msr		cpsr_cf, RTA   
    ldr		sp, =SP_FIQ  
	
	mov		RTA, #0XD7			;chomod to abt and init sp_ABT
   	msr		cpsr_cf, RTA   
    ldr		sp, =SP_ABT 
	
	mov		RTA, #0XDB			;chomod to undf and init sp_UNDF
    msr		cpsr_cf, RTA   
    ldr		sp, =SP_UND 	
    
    								;chomod to abt and init sp_sys
	mov 	RTA, #0xDF			;all interrupts disabled      
    msr		cpsr_cxsf, RTA   		;SYSTEM mode, @32-bit code mode     
    ldr		sp, =SP_SYS   	
    
    mov		RTA, #0XD3			;chmod to svc modle, CPSR IRQ bit  is disable
    msr		cpsr_c, RTA
;****************************************************************
; 	init the EMI and get the memory space
;****************************************************************
	
  
    
     ;ldr		RTA, =0x11000004    ;THE ADD OF EMI_CSGBAB   
    ;ldr		RTB, =0x24002000	                       
    ; str		RTB, [ RTA ]     
     
     
   ; ldr		RTA, =0x11000008    ;THE ADD OF EMI_CSGBCD   
   ; ldr		RTB, =0x2c002800	                       
   ; str		RTB, [ RTA ]     
    
   ; ldr		RTA, =0x1100000c    ;THE ADD OF EMI_CSGBEF   
   ; ldr		RTB, =0x34003000	                       
   ; str		RTB, [ RTA ]     
        
                                  
  ; ldr		RTA, =0x11000000        ;THE ADD OF EMIADDR_SMCONF
  ; ldr		RTB, =0x9b013377	
  ; str		RTB, [ RTA ]
  
 	;ldr		RTA, =0x11000014        ;THE ADD OF EMIADDR_SMCONF1
   ; ldr		RTB, =0x0110a077	
  	;str		RTB, [ RTA ]
  
  	;ldr		RTA, =0x11000018        ;THE ADD OF EMIADDR_SMCONF2
   ;	ldr		RTB, =0x80000500	
   ; str		RTB, [ RTA ]
    
  	;ldr		RTA, =0x11000010        ;remap sdram to 0x00
   	;ldr		RTB, =0xb   
    ; str		RTB, [ RTA ]
    

;*****************************************************************
;	config  intc
;*****************************************************************
;    ldr		RTA, =INTC_EN		;disable all IRQ interrupts
 ;   ldr		RTB, =0X0
;    str		RTB, [RTA]  
    
;    ldr		RTA, =INTC_EN_FIQ	;disable all FIQ interrupts
;    ldr		RTB, =0X0
;;    str		RTB, [RTA]   			;???THE INTC_EN_FIQ IS 4 BITS WIDTH?? DISABLE FIQ
   
;    ldr		RTA, =INTC_MSK		;mask all interrupts
;    ldr		RTB, =0XFFFFFFFF
 ;   str		RTB, [RTA]
    
 ;   ldr		RTA, =INTC_PLV		;set the hightest plevel
;    ldr		RTB, =15
 ;   str		RTB, [RTA]
    
;***************************************************************
;    	enable CPSR IRQ bit
;***************************************************************
  	mrs		RTA, cpsr
	bic		RTA, RTA, #0x80  		;set bit7 to zero
	msr		cpsr_c, RTA

;***************************************************************
;	jump to main function
;***************************************************************
	IMPORT	__main
	b		__main 

;*****************************************************************
;* entry to the interrupt handler 
;*****************************************************************
 
;*****************************************************************                                      
;*                                         *IRQ service handler flow*
;*                                         **********************
;* interrupt prehandler entrance
;*		save the registers used in the IRQ model RTA, RTB, RTC
;*		save the lr and spsr to the local var
;*		read the PLV
;*		save the PLV
;*		read the INT number,if necessary mask INTC_MSK
;*		judge and jump to the interrypt handler entrance
;*	
;* the int_handler_entrance
;*			
;*		restore the reg used in the IRQ modle
;*		chang the modle to the SYS mode 
;*			
;*		save the spsr and lr to the sys sp
;*		____________________________________________________one layer
;*		save the reg used in the int_handler  ;useless
;*		ent int
;*		open the irq
;*		jump to the int_handler
;*		close irq
;*		jump to the end_int
;*	
;*	 end_int	
;*	 		DISABLE IRQ
;*	 		
;*	 		restore the intc_plv. if necessary unmask the INTC_MSK
;* 			restore reg saved for the int_handler
;*	 		ret_int
;***********************************************************************   

Irq_Do      
	stmfd	sp!, R_ALL_0_12		;save all the registers
	ldr		RTA, =0XFFFFFFFF

	LDR		RTA, =LR_IRQ			;save lr to the variable LR_IRQ
	STR		LR,	 [RTA]	

	mrs		RTC, spsr			;save spsr to the variable SPSR_IRQ
	LDR		RTA, =SPSR_IRQ
	str		RTC, [RTA]  
		
	ldr		RTA, =INTC_FNLSTS	;read the interrupt number,if necessary mask INTC_MSK
	ldr		RLA, [RTA]
	;ldr		RLA, [RTA]
	;ldr		RLA, [RTA]

	;LDR	RTC, =0XFFFF			;clear the low 16 bits
	;bic		RTB, RLA, RTC    
	LDR		RTA, =0XFFFF0000		
	AND		RTB, RLA, RTA
	
	;CMP		RTB, #INTSRC_RTC 	; judge and jump to the INT_HANDLER_ENTRANCE
	;IMPORT	ENT_INT_RTC
	;beq		ENT_INT_RTC	
	
	;CMP		RTB, #INTSRC_DMA 
	;IMPORT	ENT_INT_DMA
	;beq		ENT_INT_DMA
	
	CMP		RTB, #INTSRC_EMI 
	IMPORT	ENT_INT_EMI  
	beq		ENT_INT_EMI  
	
	;CMP		RTB, #INTSRC_GPT  
	;IMPORT	ENT_INT_GPT
	;beq		ENT_INT_GPT
	
	;IMPORT ENT_INT_USB2APP
	;CMP		RTB, #INTSRC_USB  
	;beq		ENT_INT_USB2APP 
	
	;CMP		RTB, #INTSRC_SPI  
	;beq		ENT_INT_SPI
	
	;CMP		RTB, #INTSRC_MMC
	;IMPORT	ENT_INT_MMC
	;beq		ENT_INT_MMC
	
	;CMP		RTB, #INTSRC_UART2
	;IMPORT	ENT_INT_UART2
	;beq		ENT_INT_UART2    
	
	;CMP		RTB, #INTSRC_UART1
	;IMPORT	ENT_INT_UART1
	;beq		ENT_INT_UART1
	
	CMP		RTB, #INTSRC_I2C  
	beq		ENT_INT_I2C   
	
	CMP		RTB, #INTSRC_AC97 
	beq		ENT_INT_AC97
	
	CMP		RTB, #INTSRC_MMA
	beq		ENT_INT_MMA
	
	CMP		RTB, #INTSRC_EXTINT17  
	beq		ENT_INT_EXTINT17
	
	CMP		RTB, #INTSRC_EXTINT16
	beq		ENT_INT_EXTINT16

	CMP		RTB, #INTSRC_EXTINT15
	beq		ENT_INT_EXTINT15
	
;ERROR  ;IF ERROR PRINT THE ERROR
	;IMPORT	HA_INTC_ERROR
	;BL		HA_INTC_ERROR
	;SUBS	PC, LR, #4
		

;******************************************************************
;*	 ;end_int	
;*	 		DISABLE IRQ
;*	 		
;*	 		;restore the intc_plv. if necessary unmask the INTC_MSK
;* 			;restore reg saved for the int_handler
;*	 		;ret_int
;*******************************************************************
END_INT
	EXPORT	END_INT
	
	;adr		RTA, INTC_PLV_V_P
	ldr		RTC, =INTC_PLV
	;ldr		RTB, [RTA]
	ldmfd	sp!, {RTB}
	str		RTB, [RTC]         ;restore the INTC_PLV
	

	ldmfd	sp!, R_ALL_0_12
	
	
	;IMPORT	ret_int
	b		ret_int
;=================================================================


;ENT_INT_RTC			b	 ENT_INT_RTC	
;ENT_INT_DMA     		b	 ENT_INT_DMA         
;ENT_INT_EMI        	b    ENT_INT_EMI        
;ENT_INT_GPT       		b    ENT_INT_GPT       
;ENT_INT_USB     		b    ENT_INT_USB     
ENT_INT_SPI     		b    ENT_INT_SPI     
ENT_INT_MMC       		b    ENT_INT_MMC        	;add the ENT_INT_UART1 IN THE HA_IsrUART.c FILE
ENT_INT_UART2        	b    ENT_INT_UART2        
;ENT_INT_UART1       	b    ENT_INT_UART1       	;add the ENT_INT_UART1 IN THE HA_IsrUART.c FILE
ENT_INT_I2C        		b    ENT_INT_I2C        
ENT_INT_AC97         	b    ENT_INT_AC97         
ENT_INT_MMA    		b    ENT_INT_MMA    
ENT_INT_EXTINT17    	b    ENT_INT_EXTINT17    
ENT_INT_EXTINT16       b    ENT_INT_EXTINT16         
ENT_INT_EXTINT15 	b    ENT_INT_EXTINT15  
; OFFENT_INT_       	b    OFFENT_INT_       
ENT_INT_EXTINT0    	b    ENT_INT_EXTINT0    
ENT_INT_EXTINT1    	b    ENT_INT_EXTINT1   
ENT_INT_EXTINT2    	b    ENT_INT_EXTINT2    
ENT_INT_EXTINT3    	b    ENT_INT_EXTINT3    
ENT_INT_EXTINT4    	b    ENT_INT_EXTINT4    
ENT_INT_EXTINT5    	b    ENT_INT_EXTINT5    
ENT_INT_EXTINT6     	b    ENT_INT_EXTINT6     
ENT_INT_EXTINT7     	b    ENT_INT_EXTINT7     
ENT_INT_EXTINT8     	b    ENT_INT_EXTINT8     
ENT_INT_EXTINT9     	b    ENT_INT_EXTINT9     
ENT_INT_EXTINT10     	b    ENT_INT_EXTINT10     
ENT_INT_EXTINT11    	b    ENT_INT_EXTINT11     
ENT_INT_EXTINT12   	b    ENT_INT_EXTINT12    
ENT_INT_EXTINT13     	b    ENT_INT_EXTINT13     
ENT_INT_EXTINT14     	b    ENT_INT_EXTINT14    
                    	                       

;**********************************************************                                      
 	;;RETURN
ret_int
 	ldmfd	sp!, {r14}   ;restore the spsr_irq to r14
 	msr		spsr_cxsf, r14
 	ldmfd	sp!, {r14}	 ;restore the lr_irq to r14
	;ldmfd	sp!, {r2}
	ldmfd	sp!, {RTA}    ;restore the temp value ,no use, just for sp-4

	movs 	pc, r14     ;Jump out the irq ,RETURN   
;**********************************************************
    
    
;*****************************************************************
;COMENMT  
;IRQ DO END
;*******************************************************************                            
    
    
;***********************************************************      
EXTENT_INSTRU                                                         
	b		EXTENT_INSTRU                                             
	                                                                  
	                                                                  
SWI_DO    
	;movs	pc, lr                                                            
	b		SWI_DO                                                    
	                                                                  
ABORT_PREFETCH_DO                                                     
	b		ABORT_PREFETCH_DO                                         
	                                                                  
ABORT_DATA_DO                                                         
	b		ABORT_DATA_DO                                             
                                                                      
		                                                              
;//Irq_Do                                                                
;//	b		Irq_Do                                                    
	                                                                  
Fiq_Do                                                                
	b		Fiq_Do                                                    
                                                                      
	;*************************************************************   


	
	
;;************************************************        

                       
;;********************************************************

	

;********************************************************
;DEFINE THE VARIABLE END
  	;DATA SECTION                        
  	AREA DATA_SECTION, DATA, READWRITE   
                                         
        KEEP                             
LR_USR		DCD		0X0              
LR_SYS		DCD		0X0                  
LR_SVC	    DCD     0X0              
LR_IRQ  	DCD     0X0                  
LR_FIQ	    DCD     0X0                  
LR_UND	    DCD     0X0                  
LR_ABT	    DCD     0X0                  
                                         
                                         
SPSR_SVC	DCD     0X0                  
SPSR_IRQ	DCD     0X0                  
SPSR_FIQ	DCD     0X0                  
SPSR_UND	DCD     0X0                  
SPSR_ABT	DCD     0X0                  
                                         
INTC_PLV_V	DCD		0X0                  

	EXPORT	 LR_IRQ   
	EXPORT	SPSR_IRQ
                                             
;============================================================
;DEFINE THE VARIABLE END                   


	
	END                                                               

⌨️ 快捷键说明

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