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

📄 44binit.s

📁 ucosv2.85版本移植s3c44b0x
💻 S
字号:
;****************************************************************************
; Name		 : 44BINIT.S									                *
; Modified	 : xuwei        2007-09-07  			                        *
; Description: C start up codes								   		        *
;****************************************************************************
 
   INCLUDE memcfg.inc

;****************************************************************************
;存储器空间
;GCS6 32MB  DRAM/SDRAM(0x0c000000-0x0e000000)
;APP    RAM=0xc000000~0xc7effff 
;44BMON RAM=0xc7f0000-0xc7fffff
;STACK	   =0xc7ffa00		   

;****************************************************************************
;中断控制预定义
INTPND	    EQU	0x01e00004
INTMOD	    EQU	0x01e00008
INTMSK	    EQU	0x01e0000c
I_ISPR	    EQU	0x01e00020
I_CMST	    EQU	0x01e0001c

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

;****************************************************************************
;系统时钟预定义
PLLCON	    EQU	0x01d80000
CLKCON	    EQU	0x01d80004
LOCKTIME    EQU	0x01d8000c
	
;****************************************************************************
;存储器控制预定义
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
I_BIT		EQU	0x80
F_BIT		EQU	0x40
T_BIT		EQU	0x20
NOINT	    EQU	0xc0

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

    [ THUMBCODE
    CODE32   ;for start-up code for Thumb mode
    ]

	IMPORT	|Image$$RO$$Base|   ; End of ROM code (=start of ROM data)
    IMPORT	|Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)
    IMPORT	|Image$$RW$$Base|   ; Base of RAM to initialise
    IMPORT	|Image$$ZI$$Base|   ; Base and limit of area
    IMPORT	|Image$$ZI$$Limit|  ; to zero initialise
    
    IMPORT  Main				; The main entry of mon program

;*******************************  Vector Macro  *****************************
    MACRO
$HandlerLabel HANDLER $HandleLabel

$HandlerLabel
    sub	    sp,sp,#4			;decrement sp(to store jump address)
    stmfd   sp!,{r0}			;PUSH the work register to stack(lr do not push because it return to original address)
    ldr	    r0,=$HandleLabel	;load the address of HandleXXX to r0
    ldr	    r0,[r0]				;load the contents(service routine start address) of HandleXXX
    str	    r0,[sp,#4]			;store the contents(ISR) of HandleXXX to stack
    ldmfd   sp!,{r0,pc}			;POP the work register and pc(jump to ISR)
    MEND
;*******************************  Code Begin  *******************************
  	AREA    Init,CODE,READONLY

    ENTRY 
ResetEntry
    b ResetHandler				;for debug
    b HandlerUndef				;handlerUndef
    b HandlerSWI				;SWI interrupt handler
    b HandlerPabort				;handlerPAbort
    b HandlerDabort				;handlerDAbort
    b .							;handlerReserved
    b HandlerIRQ
    b HandlerFIQ
    
;向量中断表,未实现非矢量中断部分
VECTOR_BRANCH
    ldr pc,=HandlerEINT0	;0x20 
    ldr pc,=HandlerEINT1	;	
    ldr pc,=HandlerEINT2	;
    ldr pc,=HandlerEINT3	;
    ldr pc,=HandlerEINT4567	;
    ldr pc,=HandlerTICK		;0x34
	b .
	b .
    ldr pc,=HandlerZDMA0	;0x40
    ldr pc,=HandlerZDMA1	;
    ldr pc,=HandlerBDMA0	;
    ldr pc,=HandlerBDMA1	;
    ldr pc,=HandlerWDT		;
    ldr pc,=HandlerUERR01	;0x54
    b .
    b .
    ldr pc,=HandlerTIMER0	;0x60
    ldr pc,=HandlerTIMER1	;
    ldr pc,=HandlerTIMER2	;
    ldr pc,=HandlerTIMER3	;
    ldr pc,=HandlerTIMER4	;
    ldr pc,=HandlerTIMER5	;0x74
    b .
    b .
    ldr pc,=HandlerURXD0	;0x80
    ldr pc,=HandlerURXD1	;
    ldr pc,=HandlerIIC		;
    ldr pc,=HandlerSIO		;
    ldr pc,=HandlerUTXD0	;
    ldr pc,=HandlerUTXD1	;0x94
    b .
    b .
    ldr pc,=HandlerRTC		;0xa0
    b .
    b .
    b .
    b .
    b .						
    b .
    b .
    ldr pc,=HandlerADC	    ;0xc0
    

;复位中断处理函数																						
ResetHandler
	mrs		r0, cpsr		;enter svc mode and disable irq,fiq
	bic		r0, r0, #MODEMASK
	orr		r0, r0, #(SVCMODE :OR: I_BIT :OR: F_BIT)
	msr		cpsr_c, r0
	
    ldr	    r0,=WTCON	    ;禁止看门狗
    ldr	    r1,=0x0 		
    str	    r1,[r0]

    ldr	    r0,=INTMSK
    ldr	    r1,=0x07ffffff  ;禁止所有中断
    str	    r1,[r0]

    ldr		r0,=LOCKTIME	;设定时钟控制寄存器
    ldr		r1,=0xfff
    str		r1,[r0]

	ldr		r0,=PLLCON		;设定系统主时钟频率
    ldr		r1,=((52<<12) + (3<<4) + 1)
	str		r1, [r0]
	
    ldr	    r0,=CLKCON		;所有功能单元块时钟使能 
    ldr	    r1,=0x7ff8	    
    str	    r1,[r0]
	
	;****************************************************
	;change BDMACON reset value for 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]

    ;****************************************************
    ;设定存储器控制寄存器            					* 	
    ;****************************************************
	adr	r0, ResetHandler
	ldr	r1, =ResetHandler
	sub	r0, r1, r0		
	ldr	r1, =SMRDATA
	sub	r0, r1, r0 
	ldmia   r0, {r1-r13}
	ldr	    r0, =0x01c80000			;BWSCON Address
	stmia   r0, {r1-r13}	

    ;****************************************************
    ;初始化堆栈              							* 
    ;****************************************************
    ldr	    sp, =SVCStack		;复位后位SVC模式
    
    mrs	    r0,cpsr
    bic	    r0,r0,#MODEMASK
    orr	    r1,r0,#UNDEFMODE|NOINT
    msr	    cpsr_cxsf,r1			;UndefMode
    ldr	    sp,=UndefStack
	
    orr	    r1,r0,#ABORTMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	;AbortMode
    ldr	    sp,=AbortStack

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

    bic	    r0,r0,#MODEMASK|NOINT
    orr	    r1,r0,#SVCMODE
    msr	    cpsr_cxsf,r1 	    	;SVCMode
    ldr	    sp,=SVCStack
    
  	;****************************************************
    ; Copy and paste RW data/zero initialized data	    *
    ;****************************************************
    adr		r0, ResetEntry
	ldr		r2, =|Image$$RO$$Base|
	ldr 	r3, =|Image$$RO$$Limit|
0	
	ldmia	r0!, {r4-r7}
	stmia	r2!, {r4-r7}
	cmp		r2, r3
	bcc		%B0			
		
	ldr		r2, =|Image$$RW$$Base|
	ldr		r3, =|Image$$ZI$$Base|
0
	cmp		r2, r3		; Copy init data
	ldrcc	r1, [r0], #4
	strcc	r1, [r2], #4
	bcc		%B0	

	mov		r0,	#0
	ldr		r3,	=|Image$$ZI$$Limit|
1	
	cmp		r2,	r3		; Zero init
	strcc	r0, [r2], #4
	bcc		%B1
	
	;****************************************************
    ; 进入C环境	      									*
    ;****************************************************	 		 		
    [ :LNOT:THUMBCODE
	BL	Main	    	;Don't use main() because ......
	B	.						
    ]

    [ THUMBCODE		    ;for start-up code for Thumb mode
	orr     lr,pc,#1
	bx      lr
	CODE16
	bl      Main	    ;Don't use main() because ......
	b       .
	CODE32
    ]
    
		
;利用汇编定义系统出错复位函数
	EXPORT	SysReset
SysReset
	ldr	    pc,=0x0	
	
	
LTORG
    
HandlerFIQ		HANDLER HandleFIQ
HandlerIRQ		HANDLER HandleIRQ
HandlerUndef	HANDLER HandleUndef
HandlerSWI		HANDLER HandleSWI
HandlerDabort	HANDLER HandleDabort
HandlerPabort	HANDLER HandlePabort

HandlerEINT0	HANDLER HandleEINT0
HandlerEINT1	HANDLER HandleEINT1
HandlerEINT2	HANDLER HandleEINT2
HandlerEINT3	HANDLER HandleEINT3
HandlerEINT4567	HANDLER HandleEINT4567
HandlerTICK		HANDLER HandleTICK
HandlerZDMA0	HANDLER HandleZDMA0
HandlerZDMA1	HANDLER HandleZDMA1
HandlerBDMA0	HANDLER HandleBDMA0
HandlerBDMA1	HANDLER HandleBDMA1
HandlerWDT		HANDLER HandleWDT
HandlerUERR01	HANDLER HandleUERR01
HandlerTIMER0	HANDLER HandleTIMER0
HandlerTIMER1	HANDLER HandleTIMER1
HandlerTIMER2	HANDLER HandleTIMER2
HandlerTIMER3	HANDLER HandleTIMER3
HandlerTIMER4	HANDLER HandleTIMER4
HandlerTIMER5	HANDLER HandleTIMER5
HandlerURXD0	HANDLER HandleURXD0
HandlerURXD1	HANDLER HandleURXD1
HandlerIIC		HANDLER HandleIIC
HandlerSIO		HANDLER HandleSIO
HandlerUTXD0	HANDLER HandleUTXD0
HandlerUTXD1	HANDLER HandleUTXD1
HandlerRTC		HANDLER HandleRTC
HandlerADC		HANDLER HandleADC


SMRDATA DATA
;*****************************************************************
; Memory configuration has to be optimized for best performance  *
; The following parameter is not optimized.                      *
;*****************************************************************
;bank0	1M *16bit Nor Flash  Am29LV160DB
;bank1	16M*8bit  Nand Flash K9F2808U0C
;bank2	No used
;bank3	16bit RTL8019AS
;bank4	No Used
;bank5	No Used
;bank6	4Banks*4Mbits*16 SDRAM HY57V561620CT-H 
;bank7	No Used
	
	DCD 0x11111002

	DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))	;GCS0
	DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))	;GCS1 
	DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))	;GCS2
	DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))	;GCS3
	DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))	;GCS4
	DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))	;GCS5
	
	DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))	;GCS6
	DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))	;GCS7
	
	DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)	;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019
	DCD 0x10			;SCLK power down mode, BANKSIZE 32M/32M
	DCD 0x20			;MRSR6 CL=2clk
	DCD 0x20			;MRSR7

	ALIGN
	
	
	;***********************************************
	AREA RamData, DATA, READWRITE

	^	(0x0dfffa00)	;_ISR_STARTADDRESS-0x500
				
UserStack		#	256	;0x0dfffa00~0x0dfffb00
SVCStack		#	256	;0x0dfffb00~0x0dfffc00
UndefStack		#	256	;0x0dfffc00~0x0dfffd00
AbortStack		#	256	;0x0dfffd00~0x0dfffe00
IRQStack		#	256	;0x0dfffe00~0x0dffff00
FIQStack		#	0	;0x0dffff00~0x0dffff00


	^	(0x0dffff00)	;_ISR_STARTADDRESS
HandleReset		#	4	;0x0dffff00
HandleUndef		#	4   ;0x0dffff04
HandleSWI		#	4	;0x0dffff08
HandlePabort	#	4	;0x0dffff0c
HandleDabort	#	4	;0x0dffff10
HandleReserved	#	4	;0x0dffff14
HandleIRQ		#	4	;0x0dffff18
HandleFIQ		#	4	;0x0dffff1c

;Do not use the label 'IntVectorTable',
;because armasm.exe can not recognize this label correctly.
;the value is different with an address you think it may be.
;IntVectorTable
HandleEINT0		#	4	;0x0dffff20
HandleEINT1		#	4	;0x0dffff24
HandleEINT2		#	4	;0x0dffff28
HandleEINT3		#	4	;0x0dffff2c
HandleEINT4567	#	4	;0x0dffff30
HandleTICK		#	4	;0x0dffff34
HandleZDMA0		#	4	;0x0dffff38
HandleZDMA1		#	4	;0x0dffff3c
HandleBDMA0		#	4	;0x0dffff40
HandleBDMA1		#	4	;0x0dffff44
HandleWDT		#	4	;0x0dffff48
HandleUERR01	#	4	;0x0dffff4c
HandleTIMER0	#	4	;0x0dffff50
HandleTIMER1	#	4	;0x0dffff54
HandleTIMER2	#	4	;0x0dffff58
HandleTIMER3	#	4	;0x0dffff5c
HandleTIMER4	#	4	;0x0dffff60
HandleTIMER5	#	4	;0x0dffff64
HandleURXD0		#	4	;0x0dffff68
HandleURXD1		#	4	;0x0dffff6c
HandleIIC		#	4	;0x0dffff70
HandleSIO		#	4	;0x0dffff74
HandleUTXD0		#	4	;0x0dffff78
HandleUTXD1		#	4	;0x0dffff7c
HandleRTC		#	4	;0x0dffff80
HandleADC		#	4	;0x0dffff84

		
	END

⌨️ 快捷键说明

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