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

📄 44binit.s

📁 μC/OS-II实验程序说明 软件版本:V1.0 日期:2005-05-25 多任务是指多个任务在操作系统的控制下同时运行
💻 S
字号:
;****************************************************************************
;		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

;看门狗定时器预定义
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
NOINT	    EQU	0xc0

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

    [ THUMBCODE
    CODE32  
    ]

    MACRO
$HandlerLabel HANDLER $HandleLabel

$HandlerLabel
    sub	    sp,sp,#4			
    stmfd   sp!,{r0}			
    ldr	    r0,=$HandleLabel	
    ldr	    r0,[r0]				
    str	    r0,[sp,#4]			
    ldmfd   sp!,{r0,pc}			
    MEND

    IMPORT  Main				

    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 		
    str	    r1,[r0]

    ldr	    r0,=INTMSK
    ldr	    r1,=0x07ffffff  
    str	    r1,[r0]

    ldr		r0,=LOCKTIME
    ldr		r1,=0xfff
    str		r1,[r0]

    [ PLLONSTART
	ldr		r0,=PLLCON			
    ldr		r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV)		
	str		r1,[r0]
    ]

    ldr	    r0,=CLKCON		 
    ldr	    r1,=0x7ff8	    
    str	    r1,[r0]
	
    ldr     r0,=BDIDES0      
    ldr     r1,=0x40000000  
    str     r1,[r0]

    ldr     r0,=BDIDES1      
    ldr     r1,=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	
	stmia   r0, {r1-r13}	

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

;设置中断处理        							    	
    ldr	    r0,=HandleIRQ	
    ldr	    r1,=IsrIRQ		
    str	    r1,[r0]

;拷贝并粘贴 RW data/zero initialized data    	        
	adr		r0, ResetEntry					
	ldr		r1,	BaseOfROM
	cmp		r0,	r1
	ldreq	r0, TopOfROM
	beq		InitRamData
	
;计算拷贝程序在flash中的实际位置				    	
	ldr		r2,	=CopyProcBeg
	sub		r1, r2, r1
	add		r0, r0, r1	
	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
	
;本段将代码由实际烧入的地址拷贝到ro-base所指定的位置(只拷贝CopyProcEnd以后的代码)							
CopyProcBeg	
0	
	ldmia	r0!, {r4-r11}
	stmia	r2!, {r4-r11}
	cmp		r2, r3
	bcc		%B0	
CopyProcEnd
	
	sub		r1, r2, r3
	sub		r0, r0, r1		
	
InitRamData	
	ldr		r2, BaseOfBSS
	ldr		r3, BaseOfZero	
0
	cmp		r2, r3
	ldrcc	r1, [r0], #4
	strcc	r1, [r2], #4
	bcc		%B0	

	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

;初始化堆栈
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
    orr	    r1,r0,#SVCMODE
    msr	    cpsr_cxsf,r1 	    	
    ldr	    sp,=SVCStack

    mov	    pc,lr 
    
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 + -