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

📄 44binit.s

📁 启动原代码自己的
💻 S
📖 第 1 页 / 共 2 页
字号:

    ldr	    r0, =INTMSK
    ldr	    r1, =0x07ffffff  					@ 所有中断禁止
    str	    r1, [r0]
#============================================
# 设置时钟控制器
#============================================
    ldr		r0, =LOCKTIME
    ldr		r1, =0xfff
    str		r1, [r0]

    ldr	    r0, =CLKCON		
    ldr	    r1, =0x7ff8	    					@ 所有模块的时钟开启
    str	    r1, [r0]

# ****************************************
#  初始化BDMA 							 *   
# ****************************************
    ldr     r0, =BDIDES0      
    ldr     r1, =0x40000000   					@ BDIDESn reset value should be 0x40000000 
    str     r1, [r0]

    ldr     r0, =BDIDES1      
    ldr     r1, =0x40000000   					@ BDIDESn reset value should be 0x40000000 	 
    str     r1, [r0]

#============================================
# 设置存储区控制器
#============================================
    ldr	    r0, =SMRDATA

	ldmia   r0, {r1-r13}
	ldr	    r0, =0x01c80000  					@ BWSCON Address 
	stmia   r0, {r1-r13}

	
#============================================
# 初始化栈空间
#============================================
InitStacks:
	ldr      sp, =SVCStack  					@ 切换到超级用户栈空间
    mrs	    r0, cpsr
    bic	    r0, r0, #MODEMASK|NOINT
    orr	    r1, r0, #UNDEFMODE
    msr	    cpsr_cxsf, r1						@ 设置未定义异常栈空间
    ldr	    sp, =UndefStack
	
    orr	    r1, r0, #ABORTMODE|NOINT
    msr	    cpsr_cxsf, r1 	    				@ 设置异常栈空间	
    ldr	    sp, =AbortStack

    orr	    r1, r0, #IRQMODE|IRQ_MODE
    msr	    cpsr_cxsf, r1 	    				@ 设置中断栈空间
    ldr	    sp, =IRQStack
	
    orr	    r1, r0, #FIQMODE|FIQ_MODE
    msr	    cpsr_cxsf, r1 	    				@ 设置快速中断栈空间
    ldr	    sp, =FIQStack

    bic	    r0, r0, #MODEMASK
    orr	    r1, r0, #SVCMODE
    msr	    cpsr_cxsf, r1 	    				@ 返回超级用户栈空间
    ldr	    sp, =SVCStack

# ****************************************************
# *	设置IRQ中断请求                                  *
# ****************************************************
    ldr	    r0, =HandleIRQ						
    ldr	    r1, =ISR_IRQ							
    str	    r1, [r0]

#============================================
# 将数据段拷贝到RAM中,并用零初始化数据段
#============================================
    ldr	    r0, =Image_RO_Limit					@ 获取只读区域大小
    ldr	    r1, =Image_RW_Base					@ 获取可读写区域起始地址/
    ldr	    r3, =Image_ZI_Base					@ 获取清零区域起始地址
	
    cmp	    r0, r1	    						@ 比较只读区域和可读写区域是否重叠
    beq	    F1
F0:
    cmp	    r1, r3								@ 拷贝.data数据段内容到读写区域                        
    LDRCC   r2, [r0], #4        				@ --> LDRCC r2, [r0] + ADD r0, r0, #4	  
    strcc   r2, [r1], #4        				@ --> strcc r2, [r1] + ADD r1, r1, #4     
    bcc	    F0
F1:
    ldr	    r1, =Image_ZI_Limit					@ 从清零区域顶部开始
    mov	    r2, #0
F2:
    cmp	    r3, r1	    						@ 清零
    strcc   r2, [r3], #4
    bcc	    F2

	MRS		r0, CPSR
	bic		r0, r0, #NOINT 						@ 开中断
	msr		CPSR_cxsf, r0

	# 跳到 Main() 执行
   	bl		Main
   	b		.

# ****************************************************
# *	The function for entering power down mode		*
# ****************************************************
# void EnterPWDN(int CLKCON);
EnterPWDN:
    mov	    r2, r0               				@ r0=CLKCON 
    ldr	    r0, =REFRESH		
    ldr	    r3, [r0]
    mov	    r1, r3
    orr	    r1, r1, # 0x400000   				@ self-refresh enable 
    str	    r1, [r0]

    nop     									@ Wait until self-refresh is issued. May not be needed. 
    nop     									@ If the other bus master holds the bus, ... 
    nop	    									@ mov r0, r0 
    nop
    nop
    nop
    nop

	# enter POWERDN mode
    ldr	    r0, =CLKCON
    str	    r2, [r0]
	# wait until enter SL_IDLE,STOP mode and until wake-up
    ldr	    r0, =0x10
U0: subs    r0, r0, #1
    bne	    U0

	# exit from DRAM/SDRAM self refresh mode.
    ldr	    r0, =REFRESH
    str	    r3, [r0]
    mov	    pc, lr
    
# *****************************************************************
# * 存储器设置													  *
# *****************************************************************

	.ltorg
SMRDATA:
	.long 0x22221210 					@ BWSCON
	.long 0x00000600 					@ GCS0
	.long 0x00000700 					@ GCS1
	.long 0x00000700 					@ GCS2
	.long 0x00000700 					@ GCS3
	.long 0x00000700 					@ GCS4
	.long 0x00000700 					@ GCS5
	.long 0x00010000 					@ GCS6, EDO DRAM (Tacc = 1)
	.long 0x00018000 					@ GCS7, no use
	.long 0x00860459 					@ Refresh (REFEN=1, TREFMD=0, Trp=0, Trc=5, Tchr=3)
	.long 0x0 							@ Bank Size, 32MB/32MB
	.long 0x20 							@ MRSR 6 (CL=2)
	.long 0x20 							@ MRSR 7 (CL=2).long 0x10	

#============================================
# 栈空间定义
#============================================
    .equ    _ISR_STARTADDRESS,0xc7fff00
      
	.equ 	UserStack,		_ISR_STARTADDRESS-0xf00    		@ c7ff000   	
	.equ	SVCStack,		_ISR_STARTADDRESS-0xf00+256    	@ c7ff100 
	.equ	UndefStack,		_ISR_STARTADDRESS-0xf00+256*2   @ c7ff200 
	.equ	AbortStack,		_ISR_STARTADDRESS-0xf00+256*3   @ c7ff300 
	.equ	IRQStack,		_ISR_STARTADDRESS-0xf00+256*4   @ c7ff400 
	.equ	FIQStack,		_ISR_STARTADDRESS-0xf00+256*5   @ c7ff500 

	.equ	HandleReset,	_ISR_STARTADDRESS				@ c7fff00 
	.equ	HandleUndef,	_ISR_STARTADDRESS+4
	.equ	HandleSWI,		_ISR_STARTADDRESS+4*2
	.equ	HandlePabort,	_ISR_STARTADDRESS+4*3
	.equ	HandleDabort,	_ISR_STARTADDRESS+4*4
	.equ	HandleReserved,	_ISR_STARTADDRESS+4*5
	.equ	HandleIRQ,		_ISR_STARTADDRESS+4*6
	.equ	HandleFIQ,		_ISR_STARTADDRESS+4*7

	.equ	HandleADC,    	_ISR_STARTADDRESS+4*8
	.equ	HandleRTC,		_ISR_STARTADDRESS+4*9
	.equ	HandleUTXD1, 	_ISR_STARTADDRESS+4*10
	.equ	HandleUTXD0,	_ISR_STARTADDRESS+4*11
	.equ	HandleSIO,		_ISR_STARTADDRESS+4*12
	.equ	HandleIIC,		_ISR_STARTADDRESS+4*13
	.equ	HandleURXD1,	_ISR_STARTADDRESS+4*14
	.equ	HandleURXD0,	_ISR_STARTADDRESS+4*15
	.equ	HandleTIMER5,	_ISR_STARTADDRESS+4*16
	.equ	HandleTIMER4,	_ISR_STARTADDRESS+4*17
	.equ	HandleTIMER3,	_ISR_STARTADDRESS+4*18
	.equ	HandleTIMER2,	_ISR_STARTADDRESS+4*19
	.equ	HandleTIMER1,	_ISR_STARTADDRESS+4*20
	.equ	HandleTIMER0,	_ISR_STARTADDRESS+4*21
	.equ	HandleUERR01,	_ISR_STARTADDRESS+4*22
	.equ	HandleWDT,		_ISR_STARTADDRESS+4*23
	.equ	HandleBDMA1, 	_ISR_STARTADDRESS+4*24
	.equ	HandleBDMA0,	_ISR_STARTADDRESS+4*25
	.equ	HandleZDMA1, 	_ISR_STARTADDRESS+4*26
	.equ	HandleZDMA0,	_ISR_STARTADDRESS+4*27
	.equ	HandleTICK,		_ISR_STARTADDRESS+4*28
	.equ	HandleEINT4567,	_ISR_STARTADDRESS+4*29
	.equ	HandleEINT3,	_ISR_STARTADDRESS+4*30
	.equ	HandleEINT2,	_ISR_STARTADDRESS+4*31
	.equ	HandleEINT1,	_ISR_STARTADDRESS+4*32
	.equ	HandleEINT0,	_ISR_STARTADDRESS+4*33			 @ 0xc7fff84 
.end

⌨️ 快捷键说明

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