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

📄 44binit.s

📁 rtl8019的程序
💻 S
字号:
 
    GET  option.s
    GET  memcfg.s

;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
;Pre-defined constants
USERMODE    EQU	0x10
FIQMODE	    EQU	0x11
IRQMODE	    EQU	0x12
SVCMODE	    EQU	0x13
ABORTMODE   EQU	0x17
UNDEFMODE   EQU	0x1b
MODEMASK    EQU	0x1f
SYS32Mode   equ 0x1f
NOIRQ	    EQU	0x80
NOFIQ		EQU	0x40

    IMPORT	|Image$$RO$$Limit|  
    IMPORT	|Image$$RW$$Base|    
    IMPORT	|Image$$ZI$$Base|   
    IMPORT	|Image$$ZI$$Limit|  
    
    IMPORT  Main   
    import SoftwareInterrupt
    export SVCStack
    export UserStack
    CODE32    
    AREA    Init,CODE,READONLY

    ENTRY 
    b ResetHandler  ;<------------系统的中断向量表
    b HandlerUndef   
    ldr pc,HandlerSWI    
    b HandlerPabort  
    b HandlerDabort  
    b .		     
    b HandlerIRQ
    b HandlerFIQ
;//由44b0定义的各个中断向量
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   ;mGB
    b .
    b .
    ldr pc,=HandlerTIMER0   ;mGC
    ldr pc,=HandlerTIMER1   ;
    ldr pc,=HandlerTIMER2   ;
    ldr pc,=HandlerTIMER3   ;
    ldr pc,=HandlerTIMER4   ;
    ldr pc,=HandlerTIMER5   ;mGC
    b .
    b .
    ldr pc,=HandlerURXD0    ;mGD
    ldr pc,=HandlerURXD1    ;
    ldr pc,=HandlerIIC	    ;
    ldr pc,=HandlerSIO	    ;
    ldr pc,=HandlerUTXD0    ;
    ldr pc,=HandlerUTXD1    ;mGD
    b .
    b .
    ldr pc,=HandlerRTC	    ;mGKA
    b .			    ;
    b .			    ;
    b .			    ;
    b .			    ;
    b .			    ;mGKA
    b .
    b .
    ldr pc,=HandlerADC	    ;mGKB
    b .			    ;
    b .			    ;
    b .			    ;
    b .			    ;
    b .			    ;mGKB
    b .
    b .

;//系统各个模式的中断服务程序
;
;//只有swi中断实现用于提供开关中断的系统服务
;//其他的为中断死循环操作,可以用于调试检错    
HandlerSWI dcd SoftwareInterrupt   
HandlerUndef
    b .
HandlerPabort
    b .   
HandlerDabort
    b .
HandlerIRQ
    b . 
HandlerFIQ
    b .


;//44b0的矢量中断的第一次服务
;//说明:当中断产生后首先跳入flash中的中断向量入口处,在flash中再跳入ram的中断服务程序入口
;//       向量表,然后程序执行下面的ADD_HANDLER服务程序,将存放在高端ram中的中断服务程序入口地址
;//       加载如pc中,是cpu执行中断服务程序
;//
;//
   
      MACRO
$MIDADD ADD_HANDLER $FINALADD
$MIDADD
        sub sp,sp,#4
        stmfd sp!,{r0}
        ldr r0,=$FINALADD
        ldr r0,[r0]
        str r0,[sp,#4]
        ldmfd sp!,{r0,pc}
     mend            


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


   

;//系统的初始化函数
;//系统复位时就会跳转到此处执行系统初始化 
ResetHandler
    
    mrs     r0,cpsr      ;<-----------------关中断
    orr     r0,r0,#0xc0
    msr     cpsr_c,r0
    
    ldr	    r0,=WTCON	 ;<-----------------关掉看门狗 
    ldr	    r1,=0x0 		
    str	    r1,[r0]

    ldr	    r0,=INTMSK   ;<-----------------所有的中断均屏蔽
    ldr	    r1,=0x07ffffff  ;all interrupt disable
    str	    r1,[r0]

   
    ldr	r0,=LOCKTIME     ;<----------------系统的时钟设定
    ldr	r1,=800	   
    str	r1,[r0]

   
	ldr	r0,=PLLCON			;temporary setting of PLL
	ldr	r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV)	;Fin=10MHz,Fout=40MHz
	str	r1,[r0]
    

    ldr	    r0,=CLKCON		 
    ldr	    r1,=0x7ff8	    ;All unit block CLK enable	
    str	    r1,[r0]

   
    ldr	    r0,=SMRDATA  ;<----------------系统的存储配置
    ldmia   r0,{r1-r13}
    ldr	    r0,=0x01c80000  ;BWSCON Address
    stmia   r0,{r1-r13}

    
    bl	    InitStacks   ;<---------------各个模式的堆栈模式的设定
    
    
                         ;<---------------c语言中数据和为初始化的数据搬移
    LDR	    r0, =|Image$$RO$$Limit|	; Get pointer to ROM data
    LDR	    r1, =|Image$$RW$$Base|	; and RAM copy
    LDR	    r3, =|Image$$ZI$$Base|	
	;Zero init base => top of initialised data
			
    CMP	    r0, r1	    ; Check that they are different
    BEQ	    %F1
0		
    CMP	    r1, r3	    ; Copy init data
    LDRCC   r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4		 
    STRCC   r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4
    BCC	    %B0
1		
    LDR	    r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    MOV	    r2, #0
2		
    CMP	    r3, r1	    ; Zero init
    STRCC   r2, [r3], #4
    BCC	    %B2

    
	BL	Main	    ;<------------------------跳转到用户的C的Main函数
	B	.						



;//初始化各个模式的堆栈空间,由系统的初始化部分调用
InitStacks
	    mov r0,lr
        
        msr cpsr_c,#0xd3
        ldr sp,=SVCStack

        msr cpsr_c,#0xd1
        ldr sp,=FIQStack

        msr cpsr_c,#0xd2
        ldr sp,=IRQStack

        msr cpsr_c,#0xd7
        ldr sp,=AbortStack
 
        msr cpsr_c,#0xdb
        ldr sp,=UndefStack

        msr cpsr_c,#0xdf
        ldr sp,=UserStack

        mov pc,r0
 
 
  





;//存放的为44b0的内存管理系统数据用来初始化

    LTORG
SMRDATA DATA
	DCD 0x11110090	;Bank0=OM[1:0], Bank1~Bank7=16bit, bank2=8bit;
 	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 0x16				;SCLK power mode, BANKSIZE 32M/32M
	DCD 0x20			;MRSR6 CL=2clk
	DCD 0x20			;MRSR7






;//用户的堆栈段,及中断的目标程序的地址存储区
;
;//注意因为开辟空间时的地址是不断向上增长的
;
;//UserStack  起始与0xc7ffa00
;//SVCStack   -256
;//UndefStack -0
;//AbortStack -256
;//IRQStack   -256
;//FIQStack   -0
	
	
	ALIGN
	AREA RamData, DATA, READWRITE
	^	(_ISR_STARTADDRESS-0x500)				
UserStack	#	256	;c1(c7)ffa00
SVCStack	#	256	;c1(c7)ffb00
UndefStack	#	8	;c1(c7)ffc00
AbortStack	#	8	;c1(c7)ffd00
IRQStack	#	256	;c1(c7)ffe00
FIQStack	#	0	;c1(c7)fff00


;//用户的各个中断的服务地址存放在0xc7fff00--0xc80000起始的地址处
;//共有256字节,但是没有全部占用
      
		^	_ISR_STARTADDRESS
HandleReset	#	4
HandleUndef	#	4
XXXX	#	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 + -