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

📄 44binit.s

📁 一个在KEIL公司的MDK3.20编译通过运行的基于S3C44B0X芯片的UCOSII源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
;********************************************************
;* NAME    : 44BINIT.S									*
;* Version : 10.April.2000								*
;* Description:											*
;*	C start up codes									*
;*	Configure memory, Initialize ISR ,stacks			*
;*	Initialize C-variables								*
;*	Fill zeros into zero-initialized C-variables		*
;********************************************************
 
;	GET option.a
;汇编程序设置
_ISR_STARTADDRESS   EQU   0xc7fff00

;16位或者32位总线设置
			GBLA    BUSWIDTH
BUSWIDTH	SETA    16

;DRAM或者SDRAM"
			GBLS    BDRAMTYPE
BDRAMTYPE	SETS    "SDRAM"

;这个值在Flash存储器编程时应该为真
;这个值在SDRAM存储器编程时应该为假
			GBLL    PLLONSTART
PLLONSTART	SETL    {TRUE}

			GBLA	PLLCLK
PLLCLK		SETA	16000000

	[	PLLCLK = 16000000	
;系统主频计算公式如下:
;Fout = (8+ M_DIV)*Fout/[(2+P_DIV)*2]
M_DIV	EQU	12	;Fout = Fin * 2
P_DIV	EQU	3
S_DIV	EQU	1
	]
;	GET memcfg.a
;**********存储器控制参数*******************************

;Bank 0 parameter
B0_Tacs		EQU	0x0	;0clk
B0_Tcos		EQU	0x0	;0clk
B0_Tacc		EQU	0x6	;10clk
B0_Tcoh		EQU	0x0	;0clk
B0_Tah		EQU	0x0	;0clk
B0_Tacp		EQU	0x0	;0clk
B0_PMC		EQU	0x0	;normal(1data)

;Bank 1 parameter
B1_Tacs		EQU	0x3	;4clk
B1_Tcos		EQU	0x3	;4clk
B1_Tacc		EQU	0x7	;14clk
B1_Tcoh		EQU	0x3	;4clk
B1_Tah		EQU	0x3	;4clk
B1_Tacp		EQU	0x3	;6clk
B1_PMC		EQU	0x0	;normal(1data)

;Bank 2 parameter
B2_Tacs		EQU	0x3	;4clk
B2_Tcos		EQU	0x3	;4clk
B2_Tacc		EQU	0x7	;14clk
B2_Tcoh		EQU	0x3	;4clk
B2_Tah		EQU	0x3	;4clk
B2_Tacp		EQU	0x3	;6clk
B2_PMC		EQU	0x0	;normal(1data)

;Bank 3 parameter
B3_Tacs		EQU	0x3	;4clk
B3_Tcos		EQU	0x3	;4clk
B3_Tacc		EQU	0x7	;14clk
B3_Tcoh		EQU	0x3	;4clk
B3_Tah		EQU	0x3	;4clk
B3_Tacp		EQU	0x3	;6clk
B3_PMC		EQU	0x0	;normal(1data)

;Bank 4 parameter
B4_Tacs		EQU	0x3	;4clk
B4_Tcos		EQU	0x3	;4clk
B4_Tacc		EQU	0x7	;14clk
B4_Tcoh		EQU	0x3	;4clk
B4_Tah		EQU	0x3	;4clk
B4_Tacp		EQU	0x3	;6clk
B4_PMC		EQU	0x0	;normal(1data)

;Bank 5 parameter
B5_Tacs		EQU	0x3	;4clk
B5_Tcos		EQU	0x3	;4clk
B5_Tacc		EQU	0x7	;14clk
B5_Tcoh		EQU	0x3	;4clk
B5_Tah		EQU	0x3	;4clk
B5_Tacp		EQU	0x3	;6clk
B5_PMC		EQU	0x0	;normal(1data)

;Bank 6(if SROM) parameter
B6_Tacs		EQU	0x3	;4clk
B6_Tcos		EQU	0x3	;4clk
B6_Tacc		EQU	0x7	;14clk
B6_Tcoh		EQU	0x3	;4clk
B6_Tah		EQU	0x3	;4clk
B6_Tacp		EQU	0x3	;6clk
B6_PMC		EQU	0x0	;normal(1data)

;Bank 7(if SROM) parameter
B7_Tacs		EQU	0x3	;4clk
B7_Tcos		EQU	0x3	;4clk
B7_Tacc		EQU	0x7	;14clk
B7_Tcoh		EQU	0x3	;4clk
B7_Tah		EQU	0x3	;4clk
B7_Tacp		EQU	0x3	;6clk
B7_PMC		EQU	0x0	;normal(1data)

;Bank 6 parameter
;BDRAMTYPE="DRAM"	;MT=01(FP DRAM) or 10(EDO DRAM) 
;B6_MT		EQU	0x2	;EDO DRAM
;B6_Trcd		EQU	0x0	;1clk
;B6_Tcas		EQU	0x0	;1clk
;B6_Tcp		EQU	0x0	;1clk
;B6_CAN		EQU	0x2	;10bit
;BDRAMTYPE="SDRAM"		;MT=11(SDRAM)
B6_MT		EQU	0x3	;SDRAM
B6_Trcd		EQU	0x0	;2clk
B6_SCAN		EQU	0x0	;8bit

;Bank 7 parameter
;BDRAMTYPE="DRAM"	;MT=01(FP DRAM) or 10(EDO DRAM) 
;B7_MT		EQU	0x2	;EDO DRAM
;B7_Trcd		EQU	0x0	;2clk
;B7_Tcas		EQU	0x0	;2clk
;B7_Tcp		EQU	0x0	;2clk
;B7_CAN		EQU	0x2	;10bit
;BDRAMTYPE="SDRAM"		;MT=11(SDRAM)
B7_MT		EQU	0x3	;SDRAM
B7_Trcd		EQU	0x0	;2clk
B7_SCAN		EQU	0x0	;8bit

;REFRESH parameter
REFEN		EQU	0x1	;Refresh enable
TREFMD		EQU	0x0	;CBR(CAS before RAS)/Auto refresh
Trp			EQU	0x0	;2clk
Trc			EQU	0x1	;5clk
Tchr		EQU	0x2	;3clk
;REFCNT = 2048 + 1 - MCLK(MHz) * 15.6
REFCNT		EQU	1050	;period=15.6us, MCLK=64Mhz

;Memory Area
;GCS6	64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff)
;APP	RAM=0xc000000~0xc7effff 
;MON 	RAM=0xc7f0000-0xc7fffff
;STACK	   =0xc7ffa00		   

;Interrupt Control
INTPND		EQU	0x01e00004
INTMOD		EQU	0x01e00008
INTMSK		EQU	0x01e0000c
I_ISPR		EQU	0x01e00020
I_CMST		EQU	0x01e0001c

;Watchdog timer
WTCON		EQU	0x01d30000

;Clock Controller
PLLCON		EQU	0x01d80000
CLKCON		EQU	0x01d80004
LOCKTIME	EQU	0x01d8000c
	
;Memory Controller
REFRESH		EQU 0x01c80024

;BDMA destination register
BDIDES0		EQU 0x1f80008
BDIDES1		EQU 0x1f80028

;Pre-defined constants
USERMODE	EQU	0x10
FIQMODE		EQU	0x11
IRQMODE		EQU	0x12
SVCMODE		EQU	0x13
ABORTMODE	EQU	0x17
UNDEFMODE	EQU	0x1b
MODEMASK	EQU	0x1f
NOINT		EQU	0xc0

;check if tasm.exe is used.
	GBLL    THUMBCODE
	[ {CONFIG} = 16	
THUMBCODE SETL	{TRUE}
		CODE32
	|   
THUMBCODE SETL	{FALSE}
	]

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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 does't 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    IMPORT  Main				;The main entry of mon program
	
	EXPORT  ResetHandler 
	
	PRESERVE8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Code Begin;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    AREA    Init,CODE,READONLY

    ENTRY 
    b ResetHandler				;for debug
    b HandlerUndef				;handlerUndef
    b HandlerSWI				;SWI interrupt handler
    b HandlerPabort				;handlerPAbort
    b HandlerDabort				;handlerDAbort
    b .							;handlerReserved
    b HandlerIRQ
    b HandlerFIQ
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IMPORTANT NOTE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;If the H/W vectored interrutp mode is enabled, The above two instructions should                       ;
;be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller.                   ;
; b HandlerIRQ  ->  subs pc,lr,#4                                                                       ;
; b HandlerIRQ  ->  subs pc,lr,#4                                                                       ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;中断向量表
VECTOR_BRANCH
    ldr pc,=HandlerEINT0	;mGA	0x20 
    ldr pc,=HandlerEINT1	;	
    ldr pc,=HandlerEINT2	;
    ldr pc,=HandlerEINT3	;
    ldr pc,=HandlerEINT4567	;
    ldr pc,=HandlerTICK		;mGA	0x34
	b .
	b .
    ldr pc,=HandlerZDMA0	;mGB	0x40
    ldr pc,=HandlerZDMA1	;
    ldr pc,=HandlerBDMA0	;
    ldr pc,=HandlerBDMA1	;
    ldr pc,=HandlerWDT		;
    ldr pc,=HandlerUERR01	;mGB	0x54
    b .
    b .
    ldr pc,=HandlerTIMER0	;mGC	0x60
    ldr pc,=HandlerTIMER1	;
    ldr pc,=HandlerTIMER2	;
    ldr pc,=HandlerTIMER3	;
    ldr pc,=HandlerTIMER4	;
    ldr pc,=HandlerTIMER5	;mGC	0x74
    b .
    b .
    ldr pc,=HandlerURXD0	;mGD	0x80
    ldr pc,=HandlerURXD1	;
    ldr pc,=HandlerIIC		;
    ldr pc,=HandlerSIO		;
    ldr pc,=HandlerUTXD0	;
    ldr pc,=HandlerUTXD1	;mGD	0x94
    b .
    b .
    ldr pc,=HandlerRTC		;mGKA	0xa0
    b .
    b .
    b .
    b .
    b .						;mGKA
    b .
    b .
    ldr pc,=HandlerADC	    ;mGKB	0xc0
    b .						;
    b .						;
    b .						;
    b .						;
    b .						;mGKB
    b .
    b .
    ldr pc,=EnterPWDN		;0xe0=EnterPWDN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;向量中断的处理方法                                                                                 	    ;
;Example: HandlerADC	HANDLE HandleADC 解为															;
;HandlerADC						;HandlerADC为中断向量表的入口												;
;   sub	    sp,sp,#4			;将sp减少一个字节,使其在堆栈高端留出存储返回地址,因为pc在寄存器组中的			;
;								;的位置大于r0,出栈时装入的是栈的高端的内容									;
;   stmfd   sp!,{r0}			;保存r0																	;
;   ldr	    r0,=HandleADC		;装载中断处理函数的指针													;
;   ldr	    r0,[r0]				;装载中断处理函数的地址													;
;   str	    r0,[sp,#4]			;将中断处理函数的地址存入刚才预留的位置,r0的上面								;
;   ldmfd   sp!,{r0,pc}			;出栈后,pc指向的既是中断处理函数的地址									 	;
;                                                                                                       ;
;	INTCON^2 == 0时,vector table使能																		;
;	发生中断->HandlerADC->HandleADC(pISR_ADC,即:_ISR_STARTADDRESS+0x20);									;                          
;	若要在程序中处理此中断,只要将中断服务函数的指针赋给pISR_ADC,如:pISR_ADC = (int)ADCIsr                  	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    LTORG	

HandlerFIQ		HANDLER HandleFIQ
HandlerIRQ		HANDLER HandleIRQ
HandlerUndef	HANDLER HandleUndef
HandlerSWI		HANDLER HandleSWI
HandlerDabort	HANDLER HandleDabort

⌨️ 快捷键说明

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