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

📄 startup.s

📁 致远的MagicARM2410上的关于ARM的所有实验代码
💻 S
📖 第 1 页 / 共 2 页
字号:
        SUBS    PC,  LR,  #4
        
        
        
;/*********************************************************************************************************
;** Function name: Reset
;** Descriptions: 复位入口
;** Input: 无
;** Output: 无
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 黄绍斌
;** Modified Date: 2005-10-21
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
Reset
        BL      InitStack               ;初始化堆栈                                              
 		BL		TargetInitReset			;针对目标板的系统初始化  	 	
        B       __main					;跳转到c语言入口  
        
 
 
;/*********************************************************************************************************
;** Function name: TargetInitReset
;** Descriptions: 针对目标板的系统初始化,包括WDT、中断、PLL、SDRAM控制器等等。
;** Input: 无
;** Output: 无
;** Created by: 黄绍斌
;** Created Date: 2005-10-21
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 
;** Modified Date: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
TargetInitReset
	 	LDR		R0,=WTCON       ; 关闭WDT 
		LDR		R1,=0x0000         
		STR		R1,[R0]			; WTCON=0x0000

		LDR		R0,=INTMSK		; 禁止所有中断 (中断控制器)
		LDR		R1,=0xFFFFFFFF  
		STR		R1,[R0]			; INTMSK=0xFFFFFFFF

		LDR		R0,=INTSUBMSK
		LDR		R1,=0x07FF		; INTSUBMSK=0x07FF
		STR		R1,[R0]
		
		LDR     R0,=SRCPND		; 清除中断标志 (add)
		LDR		R1,=0xFFFFFFFF
		STR		R1,[R0]
		
		LDR		R0,=INTPND		
		LDR		R1,=0xFFFFFFFF	
		STR		R1,[R0]
		
	IF :DEF: Release	
		; 系统时钟设置,启用PLL
		LDR		R0,=LOCKTIME
		LDR		R1,=0x00FFFFFF	; 锁定时间设置U_LTIME=0xFFF,M_LTIME=0xFFF
		STR		R1,[R0]
		
		LDR		R0,=CLKDIVN		
		MOV		R1,#0x03		; HCLK=FCLK/2,PCLK=HCLK/2
		STR		R1,[R0]				
		
		MRC		p15,0,R1,c1,c0,0	; (MMU设置)读控制寄存器 
		ORR		R1,R1,#0xC0000000	; 异步  
		MRC		p15,0,R1,c1,c0,0	; 写控制寄存器

		LDR		R0,=MPLLCON		
		LDR		R1,=MPLLCON_200		; 设置CPU时钟为200Mhz (FCLK)
		STR		R1,[R0]	
							
    		
		; 总线设置,初始化SDRAM
		LDR		R0,=BUS_INIT
		LDR		R1,=BWSCON
		LDMIA	R0!,{R2-R8}
		STMIA	R1!,{R2-R8}
		LDMIA	R0!,{R2-R7}
		STMIA	R1!,{R2-R7}			
	ENDIF			 					       		
	
		MOV		PC,LR 		
		
BUS_INIT	DCD (B7_BWCON<<28)|(B6_BWCON<<24)|(B5_BWCON<<20)|(B4_BWCON<<16)|(B3_BWCON<<12)|(B2_BWCON<<8)|(B1_BWCON<<4)	; BWSCON寄存器
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0)			; BANKCON0寄存器
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0)			; BANKCON1寄存器 	
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0) 			; BANKCON2寄存器
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0) 			; BANKCON3寄存器
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0) 			; BANKCON4寄存器
			DCD (1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0) 			; BANKCON5寄存器
			DCD (3<<15)|(1<<2)|(1<<0) 										; BANKCON6寄存器 (SDRAM)
			DCD (0<<15)|(1<<13)|(1<<11)|(7<<8)|(1<<6)|(1<<4)|(1<<2)|(0<<0) 	; BANKCON7寄存器 (SRAM)
			DCD (1<<23)|(0<<22)|(0<<20)|(3<<18)|(1113)						; REFRESH寄存器(SDRAM) ,period=15.6us, HCLK=60Mhz, (2048+1-15.6*60)
			DCD (1<<7)|(1<<5)|(1<<4)|(2<<0)									; BANKSIZE寄存器,128MB
			DCD (3<<4)														; MRSRB6寄存器
			DCD (3<<4)														; MRSRB7寄存器
			
			
						   
;/*********************************************************************************************************
;** Function name: InitStack
;** Descriptions: 初始化堆栈。最后返回时,处理器工作在系统模式。
;** Input: 无
;** Output: 无
**  Note: 由本文件开头的USR_STACK_LEGTH、SVC_STACK_LEGTH等定义各工作模式的堆栈大小。
;** Created by: 黄绍斌
;** Created Date: 2005-10-21
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 
;** Modified Date: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
InitStack    
        MOV     R0, LR

;设置管理模式堆栈
        MSR     CPSR_c, #(Mode_SVC | I_BIT | F_BIT) 	; 0xd3
        LDR     SP, StackSvc
;设置中断模式堆栈
        MSR     CPSR_c, #(Mode_IRQ | I_BIT | F_BIT)		; 0xd2
        LDR     SP, StackIrq
;设置快速中断模式堆栈
        MSR     CPSR_c, #(Mode_FIQ | I_BIT | F_BIT)		; 0xd1
        LDR     SP, StackFiq
;设置中止模式堆栈
        MSR     CPSR_c, #(Mode_ABT | I_BIT | F_BIT)		; 0xd7
        LDR     SP, StackAbt
;设置未定义模式堆栈
        MSR     CPSR_c, #(Mode_UND | I_BIT | F_BIT)		; 0xdb
        LDR     SP, StackUnd
;设置系统模式堆栈
        MSR     CPSR_c, #(Mode_SYS | I_BIT | F_BIT)		; 0xdf
        LDR     SP, StackUsr

        MOV     PC, R0

StackUsr           DCD     UsrStackSpace + (USR_STACK_LEGTH - 1) * 4
StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4


	
;/*********************************************************************************************************
;** Function name: __user_initial_stackheap
;** Descriptions: 库函数初始化堆和栈,不能删除
;** Input: 参考库函数手册
;** Output: 参考库函数手册
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 
;** Modified Date: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap    
    LDR   r0,=bottom_of_heap
    MOV   pc,lr



;/*********************************************************************************************************
;** Function name: __rt_div0
;** Descriptions: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小
;** Input: 参考库函数手册
;** Output: 无
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 
;** Modified Date: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/

__rt_div0
        B       __rt_div0
        


; /* 分配堆空间 */
        AREA    Myheap, DATA, NOINIT, ALIGN=2
bottom_of_heap     SPACE   256  				;库函数的堆空间			



; /* 分配堆栈空间 */
        AREA    MyStacks, DATA, NOINIT, ALIGN=2
UsrStackSpace      SPACE   USR_STACK_LEGTH * 4  ;用户(系统)模式堆栈空间
SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  ;管理模式堆栈空间
IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;中断模式堆栈空间
FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;快速中断模式堆栈空间
AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;中止义模式堆栈空间
UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;未定义模式堆栈

		END
;/*********************************************************************************************************
;**                            End Of File
;********************************************************************************************************/

⌨️ 快捷键说明

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