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

📄 44binit.s.svn-base

📁 lwip协议在arm7+uCos系统上的移植
💻 SVN-BASE
字号:
;****************************************************************************
;		Copyright (c) 深圳市民德电子科技有限公司  http://www.szminde.cn
;
;  文件名称:44binit.s
;  版本号:	 1.0
;  日期:	 2005-05-25
;  说明:	 此文件包含S3C44B0X芯片内存的设置、ISR的初始化、堆栈的初始化以及
;			 C 程序入口。
;  调用列表:--
;  修改历史:--
;****************************************************************************/
 
    INCLUDE option.s
    INCLUDE memcfg.s

;中断控制预定义
INTPND	    EQU	0x01e00004
INTMOD	    EQU	0x01e00008
INTMSK	    EQU	0x01e0000c
I_ISPR	    EQU	0x01e00020
I_CMST	    EQU	0x01e0001c
I_ISPC		EQU 0x01e00024	;IRQ interrupt service clear register

;看门狗定时器预定义
WTCON	    EQU	0x01d30000

;系统时钟预定义
PLLCON	    EQU	0x01d80000
CLKCON	    EQU	0x01d80004
LOCKTIME    EQU	0x01d8000c
	
;存储器控制预定义
BWSCON		EQU 0x01c80000
REFRESH	    EQU 0x01c80024

;BDMA目的寄存器
BDIDES0     EQU 0x1f80008
BDIDES1     EQU 0x1f80028

;预定义常数(常量)
USERMODE    EQU	0x10
FIQMODE	    EQU	0x11
IRQMODE	    EQU	0x12
SVCMODE	    EQU	0x13
ABORTMODE   EQU	0x17
UNDEFMODE   EQU	0x1b
MODEMASK    EQU	0x1f
NOINT	    EQU	0xc0

;检查是否使用tasm.exe进行编译
    GBLL    THUMBCODE
    [ {CONFIG} = 16	
THUMBCODE SETL	{TRUE}
    CODE32
    |   
THUMBCODE SETL	{FALSE}
    ]

    [ THUMBCODE
    CODE32  
    ]
    
;***********ues to jump to the ISR*************************
    MACRO
$HandlerLabel HANDLER $HandleLabel

$HandlerLabel
    sub	    sp,sp,#4			
    stmfd   sp!,{r0}			
    ldr	    r0,=$HandleLabel ;this handlelabel point the area contain the ISR address	
    ldr	    r0,[r0]				
    str	    r0,[sp,#4]			
    ldmfd   sp!,{r0,pc}			
    MEND
;***********************************************************
    IMPORT  Main	;the Main function in C part

;************the beginning of the whole program*************
    AREA    Init,CODE,READONLY

    ENTRY
ResetEntry
    b ResetHandler				
    b HandlerUndef				
    b HandlerSWI				
    b HandlerPabort				
    b HandlerDabort				
    b .							
    b HandlerIRQ
    b HandlerFIQ

;中断向量表
VECTOR_BRANCH
    ldr pc,=HandlerEINT0	
    ldr pc,=HandlerEINT1	
    ldr pc,=HandlerEINT2	
    ldr pc,=HandlerEINT3	
    ldr pc,=HandlerEINT4567	
    ldr pc,=HandlerTICK		
	b .
	b .
    ldr pc,=HandlerZDMA0	
    ldr pc,=HandlerZDMA1	
    ldr pc,=HandlerBDMA0	
    ldr pc,=HandlerBDMA1	
    ldr pc,=HandlerWDT		
    ldr pc,=HandlerUERR01	
    b .
    b .
    ldr pc,=HandlerTIMER0	
    ldr pc,=HandlerTIMER1	
    ldr pc,=HandlerTIMER2	
    ldr pc,=HandlerTIMER3	
    ldr pc,=HandlerTIMER4	
    ldr pc,=HandlerTIMER5	
    b .
    b .
    ldr pc,=HandlerURXD0	
    ldr pc,=HandlerURXD1	
    ldr pc,=HandlerIIC		
    ldr pc,=HandlerSIO		
    ldr pc,=HandlerUTXD0	
    ldr pc,=HandlerUTXD1	
    b .
    b .
    ldr pc,=HandlerRTC		
    b .
    b .
    b .
    b .
    b .						
    b .
    b .
    ldr pc,=HandlerADC	    
    b .						
    b .						
    b .						
    b .						
    b .						
    b .
    b .
    ldr pc,=EnterPWDN		


ResetHandler
    ldr	    r0,=WTCON	    
    ldr	    r1,=0x0			;disable the watch dog funtion		
    str	    r1,[r0]
	
	ldr	    r0,=I_ISPC	
    ldr	    r1,=0x03ffffff	;clear all the IRQ 		  
    str	    r1,[r0]
    
    ldr	    r0,=INTMSK
    ldr	    r1,=0x07ffffff	;mask all INT 
    str	    r1,[r0]

    ldr		r0,=LOCKTIME
    ldr		r1,=0xfff		;PLL lock time
    str		r1,[r0]

    [ PLLONSTART
	ldr		r0,=PLLCON			
    ldr		r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV)	;set the PLL 66M
	str		r1,[r0]
    ]

    ldr	    r0,=CLKCON		 
    ldr	    r1,=0x7ff8	    ;enable all the peripheral equipment
    str	    r1,[r0]
	
    ldr     r0,=BDIDES0      
    ldr     r1,=0x40000000  ;DMA no use
    str     r1,[r0]

    ldr     r0,=BDIDES1      
    ldr     r1,=0x40000000  ;DMA no use
    str     r1,[r0]

;设定存储器控制寄存器
;because running this part of program is in the ROM the absolute address is different with the  
;actual address, so there must have an address switch.            					
	adr	r0, ResetHandler		;get the relative position of the Resethandler refre to the current PC
	ldr	r1, =ResetHandler		;the actual address of the Resethandler 
	sub	r0, r1, r0				;calculate the difference between the two kind of address		
	ldr	r1, =SMRDATA
	sub	r0, r1, r0 				;calculate the absolute address of the SMRDATA
	ldmia   r0, {r1-r13}
	ldr	    r0, =BWSCON	
	stmia   r0, {r1-r13}	

;初始化堆栈              							
    ldr	    sp, =SVCStack	
    bl	    InitStacks

;设置中断处理
;this part is be instead by the "UCOS_IRQHandler" in the Os_cpu_a.s in the uCOS part	sdy060604        							    	
    ;ldr	    r0,=HandleIRQ	
    ;ldr	    r1,=IsrIRQ		
    ;str	    r1,[r0]

;拷贝并粘贴 RW data/zero initialized data    	        
	adr		r0, ResetEntry		;get the actuall address of ResetEntry, useing the relative address to PC				
	ldr		r1,	BaseOfROM		;get the absolut address of ResetEntry(the beginning of RO section)
	cmp		r0,	r1				;if current code is running in the FLASH
	ldreq	r0, TopOfROM
	beq		InitRamData
	
;计算拷贝程序在flash中的实际位置				    	
	ldr		r2,	=CopyProcBeg
	sub		r1, r2, r1
	add		r0, r0, r1			;get the address of CopyProcBeg code in the FLASH 
	ldr		r3,	=CopyProcEnd
	
;将拷贝程序复制到ram中								
0	
	ldmia	r0!, {r4-r7}
	stmia	r2!, {r4-r7}
	cmp		r2, r3
	bcc		%B0	
	
;开始用ram中的拷贝程序复本将所有剩下的代码复制到ram中	
	ldr		r3, TopOfROM		
	ldr		pc, =CopyProcBeg	;from here, the progam running in the SDRAM
	
;本段将代码由实际烧入的地址拷贝到ro-base所指定的位置(只拷贝CopyProcEnd以后的代码)							
CopyProcBeg	
0	
	ldmia	r0!, {r4-r11}
	stmia	r2!, {r4-r11}
	cmp		r2, r3
	bcc		%B0	
CopyProcEnd
	
	sub		r1, r2, r3			;beyond part
	sub		r0, r0, r1			;put the beginning address of RW section in r0  		

;initialize the RW section
InitRamData	
	ldr		r2, BaseOfBSS
	ldr		r3, BaseOfZero	
0
	cmp		r2, r3
	ldrcc	r1, [r0], #4
	strcc	r1, [r2], #4
	bcc		%B0	

;initialize the ZI section
	mov		r0,	#0
	ldr		r3,	EndOfBSS
1	
	cmp		r2,	r3
	strcc	r0, [r2], #4
	bcc		%B1			
		 		 		
    [ :LNOT:THUMBCODE
	BL		Main	    
	B	.						
    ]

    [ THUMBCODE		    
	orr     lr,pc,#1
	bx      lr
	CODE16
	bl      Main
	b       .
	CODE32
    ]
    
	LTORG
;***************************************************
HandlerFIQ		HANDLER HandleFIQ
HandlerIRQ		HANDLER HandleIRQ
HandlerUndef	HANDLER HandleUndef
HandlerSWI		HANDLER HandleSWI
HandlerDabort	HANDLER HandleDabort
HandlerPabort	HANDLER HandlePabort
HandlerADC		HANDLER HandleADC
HandlerRTC		HANDLER HandleRTC
HandlerUTXD1	HANDLER HandleUTXD1
HandlerUTXD0	HANDLER HandleUTXD0
HandlerSIO		HANDLER HandleSIO
HandlerIIC		HANDLER HandleIIC
HandlerURXD1	HANDLER HandleURXD1
HandlerURXD0	HANDLER HandleURXD0
HandlerTIMER5	HANDLER HandleTIMER5
HandlerTIMER4	HANDLER HandleTIMER4
HandlerTIMER3	HANDLER HandleTIMER3
HandlerTIMER2	HANDLER HandleTIMER2
HandlerTIMER1	HANDLER HandleTIMER1
HandlerTIMER0	HANDLER HandleTIMER0
HandlerUERR01	HANDLER HandleUERR01
HandlerWDT		HANDLER HandleWDT
HandlerBDMA1	HANDLER HandleBDMA1
HandlerBDMA0	HANDLER HandleBDMA0
HandlerZDMA1	HANDLER HandleZDMA1
HandlerZDMA0	HANDLER HandleZDMA0
HandlerTICK		HANDLER HandleTICK
HandlerEINT4567	HANDLER HandleEINT4567
HandlerEINT3	HANDLER HandleEINT3
HandlerEINT2	HANDLER HandleEINT2
HandlerEINT1	HANDLER HandleEINT1
HandlerEINT0	HANDLER HandleEINT0

;*****************************************************
	IMPORT	|Image$$RO$$Base|	
	IMPORT	|Image$$RO$$Limit|	
	IMPORT	|Image$$RW$$Base|	
	IMPORT	|Image$$ZI$$Base|	
	IMPORT	|Image$$ZI$$Limit|	


BaseOfROM	DCD	|Image$$RO$$Base|
TopOfROM	DCD	|Image$$RO$$Limit|
BaseOfBSS	DCD	|Image$$RW$$Base|
BaseOfZero	DCD	|Image$$ZI$$Base|
EndOfBSS	DCD	|Image$$ZI$$Limit|

	EXPORT	GetBaseOfROM
	EXPORT	GetEndOfROM
	EXPORT	GetBaseOfBSS
	EXPORT	GetBaseOfZero
	EXPORT	GetEndOfBSS
	
GetBaseOfROM
	ldr		r0, BaseOfROM
	mov		pc, lr	
GetEndOfROM
	ldr		r0, TopOfROM
	mov		pc,	lr
GetBaseOfBSS
	ldr		r0,	BaseOfBSS
	mov		pc,	lr
GetBaseOfZero
	ldr		r0,	BaseOfZero
	mov		pc,	lr
GetEndOfBSS
	ldr		r0,	EndOfBSS
	mov		pc,	lr
;******************************************************

 ;初始化堆栈
 ;in this model do not initialize the user mode
InitStacks
    mrs	    r0,cpsr
    bic	    r0,r0,#MODEMASK
    orr	    r1,r0,#UNDEFMODE|NOINT
    msr	    cpsr_cxsf,r1			
    ldr	    sp,=UndefStack
	
    orr	    r1,r0,#ABORTMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	
    ldr	    sp,=AbortStack

    orr	    r1,r0,#IRQMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	
    ldr	    sp,=IRQStack
	
    orr	    r1,r0,#FIQMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	
    ldr	    sp,=FIQStack

    ;bic	    r0,r0,#MODEMASK|NOINT	;no use 
    ;orr	    r1,r0,#SVCMODE
    orr	    r1,r0,#SVCMODE|NOINT	;sdy060603 
    msr	    cpsr_cxsf,r1 	    	
    ldr	    sp,=SVCStack

    mov	    pc,lr
     
;************************************************
;this part is be instead by the "UCOS_IRQHandler" in the Os_cpu_a.s in the uCOS part     
IsrIRQ
    sub	    sp,sp,#4       
    stmfd   sp!,{r8-r9}   

    ldr	    r9,=I_ISPR
    ldr	    r9,[r9]

	cmp		r9, #0x0	
						
	beq		%F2

    mov	    r8,#0x0
0
    movs    r9,r9,lsr #1
    bcs	    %F1
    add	    r8,r8,#4
    b	    %B0

1
    ldr	    r9,=HandleADC
    add	    r9,r9,r8
    ldr	    r9,[r9]
    str	    r9,[sp,#8]
    ldmfd   sp!,{r8-r9,pc}

2
	ldmfd	sp!,{r8-r9}
	add		sp,sp,#4
	subs	pc,lr,#4

;省电模式
EnterPWDN
    mov	    r2,r0               
    ldr	    r0,=REFRESH		
    ldr	    r3,[r0]
    mov	    r1, r3
    orr	    r1, r1, #0x400000   
    str	    r1, [r0]

    nop    
    nop    
    nop	   
    nop
    nop
    nop
    nop

    ldr	    r0,=CLKCON
    str	    r2,[r0]

    mov	    r0,#0xff
0   subs    r0,r0,#1
    bne	    %B0

    ldr	    r0,=REFRESH
    str	    r3,[r0]
    mov	    pc,lr

    LTORG


SMRDATA DATA
    [ BUSWIDTH=16
		DCD 0x11110001	;Bank0=OM[1:0]  16bit BootRomSST39VF160/SST39VF320) :0x0
    | ;BUSWIDTH=32
	DCD 0x22222220	;Bank0=OM[1:0], Bank1~Bank7=32bit
    ]          ;DCD  0x7fff
	DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))	
	DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))	 
	DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))	
	DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))	
	DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))	
	DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))	
	[ BDRAMTYPE="DRAM" 
	    DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN))	
	    DCD ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN))	
	| ;"SDRAM"
		DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))	
		DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))	
	]
	DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)	
	DCD 0x10			
	DCD 0x20			
	DCD 0x20			

	ALIGN

	AREA RamData, DATA, READWRITE

	^	(_ISR_STARTADDRESS-0x500)              
UserStack		#	256	;c1(c7)ffa00
SVCStack		#	256	;c1(c7)ffb00
UndefStack		#	256	;c1(c7)ffc00
AbortStack		#	256	;c1(c7)ffd00
IRQStack		#	256	;c1(c7)ffe00
FIQStack		#	0	;c1(c7)fff00
	^	_ISR_STARTADDRESS
HandleReset		#	4
HandleUndef		#	4
HandleSWI		#	4
HandlePabort	#	4
HandleDabort	#	4
HandleReserved	#	4
HandleIRQ		#	4
HandleFIQ		#	4
HandleADC		#	4
HandleRTC		#	4
HandleUTXD1		#	4
HandleUTXD0		#	4
HandleSIO		#	4
HandleIIC		#	4
HandleURXD1		#	4
HandleURXD0		#	4
HandleTIMER5	#	4
HandleTIMER4	#	4
HandleTIMER3	#	4
HandleTIMER2	#	4
HandleTIMER1	#	4
HandleTIMER0	#	4
HandleUERR01	#	4
HandleWDT		#	4
HandleBDMA1		#	4
HandleBDMA0		#	4
HandleZDMA1		#	4
HandleZDMA0		#	4
HandleTICK		#	4
HandleEINT4567	#	4
HandleEINT3		#	4
HandleEINT2		#	4
HandleEINT1		#	4
HandleEINT0		#	4   

		END

⌨️ 快捷键说明

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