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

📄 ramstart.s

📁 武汉创维特ARM7实验箱的全部源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
#/*************************************************************************/
#/*                                                                       */
#/*     FILE                                        VERSION               */
#/*                                                                       */
#/*      ramstart.s                              S3C44B0X 1.00            */
#/*                                                                       */
#/* Project name: UCLinux Boot Loader for S3C44B0X Main board                        */
#/* Description:				                                          */
#/*	     Board initialization codes     	                              */
#/*	                    --  Configure Memory                              */
#/*                     --  Initialize Ports                              */
#/*                     --  ISR                                           */
#/*                     --  Stacks                                        */
#/*                                                                       */
#/* AUTHOR                                                                */
#/*                                                                       */
#/*      ShangJun,Liu                                                     */
#/* DATE:                                                                 */
#/*      2003-06-07                                                       */
#/*                                                                       */
#/* HISTORY                                                               */
#/*                                                                       */
#/*         NAME            DATE                    REMARKS               */
#/*         ShangJun Liu    2003-06-06 13:10                              */
#/*         ShangJun Liu    2003-10-22 08:25                              */
#/*************************************************************************/

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     I/O PORT                                                          */
#/*************************************************************************/
.equ rBWSCON     ,	0x01C80000   /* bus width and wait status control */
.equ rBANKCON0   ,	0x01C80004   /* Boot ROM Control */
.equ rBANKCON1   ,	0x01C80008   /* BANK1 Control */
.equ rBANKCON2   ,	0x01C8000c   /* BANK2 Control */
.equ rBANKCON3   ,	0x01C80010   /* BANK3 Control */
.equ rBANKCON4   ,	0x01C80014   /* BANK4 Control */
.equ rBANKCON5   ,	0x01C80018   /* BANK5 Control */
.equ rBANKCON6   ,	0x01C8001c   /* BANK6 Control */
.equ rBANKCON7   ,	0x01C80020   /* BANK7 Control */
.equ rREFRESH    ,	0x01C80024   /* DRAM/SDRAM Refresh Control */
.equ rBANKSIZE   ,	0x01C80028   /* Flexible Bank Size */
.equ rMRSRB6     ,	0x01C8002c   /* Mode Register set for SDRAM */
.equ rMRSRB7     ,	0x01C80030   /* Mode Register set for SDRAM */

.equ rPCONA      ,	0x01d20000   /* Port A */
.equ rPDATA	     ,	0x01d20004

.equ rPCONB      ,	0x01d20008   /* Port B */
.equ rPDATB      ,	0x01d2000c

.equ rPCONC      ,	0x01d20010   /* Port C */
.equ rPDATC      ,	0x01d20014
.equ rPUPC       ,	0x01d20018

.equ rPCOND      ,	0x01d2001c   /* Port D */
.equ rPDATD      ,	0x01d20020
.equ rPUPD       ,	0x01d20024

.equ rPCONE      ,	0x01d20028   /* Port E */
.equ rPDATE      ,	0x01d2002c
.equ rPUPE       ,	0x01d20030

.equ rPCONF      ,	0x01d20034   /* Port F */
.equ rPDATF      ,	0x01d20038
.equ rPUPF       ,	0x01d2003c

.equ rPCONG      ,	0x01d20040   /* Port G */
.equ rPDATG      ,	0x01d20044
.equ rPUPG       ,	0x01d20048

.equ rSPUCR      ,	0x01d2004c   /* Special Pull-Up Registor Control Register */
.equ rEXTINT     ,	0x01d20050   /* External Interrupt Control Register */

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     Interrupt Control                                                 */
#/*************************************************************************/
.equ INTCON      , 0x01e00000
.equ INTPND	     ,	0x01e00004
.equ INTMOD	     ,	0x01e00008
.equ INTMSK	     ,	0x01e0000c
.equ I_ISPR	     ,	0x01e00020
.equ I_CMST	     ,	0x01e0001c
.equ I_PMST	     ,	0x01e00014

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     Watchdog timer                                                    */
#/*************************************************************************/
.equ WTCON	    ,	0x01d30000

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     Clock Controller                                                  */
#/*************************************************************************/
.equ PLLCON	    ,	0x01d80000
.equ CLKCON	    ,	0x01d80004
.equ LOCKTIME   ,	0x01d8000c
	
#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     Memory Controller                                                 */
#/*************************************************************************/
.equ REFRESH	    , 0x01c80024

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     System configuration                                              */
#/*************************************************************************/
.equ SYSCFG	     , 0x01c00000
.equ NCACHBE0    , 0x01c00004
.equ NCACHBE1    , 0x01c00008

#/*************************************************************************/
#/* Constant Definitions                                                  */
#/*     Pre-defined constants                                             */
#/*************************************************************************/
.equ USERMODE    ,	0x10
.equ FIQMODE	 ,	0x11
.equ IRQMODE	 ,	0x12
.equ SVCMODE	 ,	0x13
.equ ABORTMODE   ,	0x17
.equ UNDEFMODE   ,	0x1b
.equ MODEMASK    ,	0x1f
.equ NOINT	     ,	0xc0

.equ TIMER0_INT      ,     0x00002000

.equ LOCKOUT		,		0xC0		/* Interrupt lockout value */
.equ LOCK_MSK		,		0xC0		/* Interrupt lockout mask value */
.equ MODE_MASK		,		0x1F		/* Processor Mode Mask */
.equ SUP_MODE		,		0x13		/* Supervisor Mode (SVC) */
   
.equ _ISR_STARTADDRESS   ,   0x0c7fff00 /*GCS6(nSCS0):16MByte SDRAM */
        
#/*************************************************************************/
#/* Import Modules                                                        */
#/*************************************************************************/
	.extern OSTickISR         ;/* see os_cpu_s.s */
	.extern	Image_ZI_Base
	.extern	Image_ZI_Limit
	.extern	Image_RO_Base
	.extern	Image_RO_Limit
	.extern	Image_RW_Base
	.extern Main
	
#/*************************************************************************/
#/* Entry of target                                                       */
#/*************************************************************************/
#		ENTRY
__entry :
		b       ResetHandler                /* Reset vector          */
		b       HandlerUndef                /* Undefined instruction */
		b       HandlerSWI		            /* SWI                   */
		b       HandlerPabort        		/* Prefetch abort        */
		b       HandlerDabort          		/* Data abort            */
		b       HandlerInfinitLoop  		/* Address exception     */
		b       HandlerIRQ           		/* IRQ                   */
		b		HandlerFIQ           		/* FIQ                   */

#;/*************************************************************************/
#;/* Entry of Undefined instruction interrupt                              */
#;/*************************************************************************/
HandlerUndef :
		b HandlerUndef                  /* while(1){} */

#;/*************************************************************************/
#;/* Entry of SWI interrupt                                                */
#;/*************************************************************************/
HandlerSWI :
		b HandlerSWI                    /* while(1){} */

#;/*************************************************************************/
#;/* Entry of Prefetch abort interrupt                                     */
#;/*************************************************************************/
HandlerPabort :
		b HandlerPabort                 /* while(1){} */

#;/*************************************************************************/
#;/* Entry of Data abort interrupt                                         */
#;/*************************************************************************/
HandlerDabort :
		b HandlerDabort                 /* while(1){} */

#;/*************************************************************************/
#;/* Entry of Address exception interrupt                                  */
#;/*************************************************************************/
HandlerInfinitLoop :
		b HandlerInfinitLoop            /* while(1){} */
		
#;/*************************************************************************/
#;/* Entry of IRQ interrupt                                                */
#;/*************************************************************************/
HandlerIRQ :
    	b IsrIRQ                   /* TickHandler -- see os_cpu_s.s */

#;/*************************************************************************/
#;/* Entry of reset vector interrupt                                       */
#;/*************************************************************************/
HandlerFIQ :
    	b HandlerFIQ                    /* while(1){} */

IsrIRQ:	/*using I_ISPR register.*/
        stmfd   sp!,{r0-r12, lr}    /* save r8-r9           */   
        ldr     r9,=I_ISPR     /* distribute the irq   */
        ldr     r9,[r9]    
        cmp	    r9, #0x0   
        beq	    i2		       
        mov     r8,#0x0        
i0:                            /* check every bit      */
        movs    r9,r9,lsr #1	
        bcs     i1				
        add     r8,r8,#4		
        b       i0			   /* next bit             */
i1:                            /* one interrupt trigged*/
        ldr     r9,=HandleADC  /* isr vector base address    */
        add     r9,r9,r8	   /* compute the offset         */
        ldr     r8,=HandleTIMER0
        cmp     r9, r8
        beq     i3
        ldr     r9,[r9]        /* obtain the isr address     */
        mov     lr,pc          /* return to 'ldmfd   sp!,{r0-r4, pc}^' */
        mov     pc,r9
        ldmfd   sp!,{r0-r12, lr}
        subs    pc, lr, #4 /* restore r0-r4 and return */
i2:        
        ldmfd	sp!,{r0-r12, lr}     /* restore the r8-r9 */
        subs    pc, lr, #4 /* restore r0-r4 and return */
i3:
		ldmfd	sp!,{r0-r12, lr}     /* restore the r8-r9 */
		b OSTickISR    	
#;/*************************************************************************/
#;/* Entry of FIQ interrupt                                                */
#;/*************************************************************************/
#/*************************************************************************/
#/* Entry of reset vector interrupt                                       */
#/*************************************************************************/
ResetHandler :
#/*************************************************************************/
#/*                                                                       */
#/* FUNCTION                                                              */
#/*                                                                       */
#/*      main_entry                                                       */
#/*                                                                       */
#/* DESCRIPTION                                                           */
#/*                                                                       */
#/*      This function is the entry function of target                    */
#/*                                                                       */
#/*             -    	HardWare Initialization                           */
#/*             -       Configuration Port control registers              */
#/*             -       Set clock control registers                       */
#/*             -       Set memory control registers (every CS control)   */
#/*             -       init stack                                        */
#/*             -       Set memory control registers (every CS control)   */
#/*             -       Clear the un-initialized global and static        */
#/*                         C data areas                                  */
#/*             -       Move the initialized global and initialized       */
#/*                         C data areas                                  */
#/*             -       Initialize the vector table                       */
#/*             -       Jump to Main function                             */
#/*                                                                       */
#/* AUTHOR                                                                */
#/*                                                                       */
#/*      ShangJun,Liu                                                     */
#/* DATE:                                                                 */
#/*      2003-06-05                                                       */
#/* CALLED BY                                                             */
#/*                                                                       */
#/*                                                                       */
#/* CALLS                                                                 */
#/*                                                                       */
#/*      none                                                             */
#/*                                                                       */
#/* INPUTS                                                                */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* OUTPUTS                                                               */
#/*                                                                       */
#/*      None                                                             */
#/*                                                                       */
#/* HISTORY                                                               */
#/*                                                                       */
#/*         NAME            DATE                    REMARKS               */
#/*                                                                       */
#/*                                                                       */
#/*************************************************************************/
#VOID    main_entry(void)
#{
	.global	main_entry
main_entry :	

#
# Disable interrupt and switch to supervisor mode
#
	MRS		a1,CPSR				    /*; Pickup current CPSR*/
	BIC		a1,a1,#MODE_MASK		/*; Clear the mode bits*/
	ORR		a1,a1,#SUP_MODE			/*; Set the supervisor mode bits*/
	ORR		a1,a1,#LOCKOUT			/*; Insure IRQ and FIQ intr are locked out*/
	MSR		CPSR_cxsf,a1			/*; Setup the new CPSR*/
#
# HardWare Initialization.
# disable all interrupt
#
   	ldr    r0,=INTCON	    /*#Interrupt control register. */
    ldr    r1,=0x07         /*#non-vectored mode,disable IRQ,disable FIQ.  */		
    str    r1,[r0]

   	ldr    r0,=INTMSK	    /*#Interrupt MASK register. */
    ldr    r1,=0x07ffffff   /*#disable all(30) interrupt sources.*/  		
    str    r1,[r0]


    ldr    r0,=WTCON	    /*#watch dog disable*/ 

⌨️ 快捷键说明

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