?? sysinit.s
字號:
INCLUDE inc\option.s
INCLUDE inc\memcfg.s
;//****************************************************************************
;//存儲器空間
;//GCS6 64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff)
;//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
I_ISPC EQU 0x01e00024
;//****************************************************************************
;//看門狗定時器預定義
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
;//*****************************************************************
AREA InitSystemBlk, CODE, READONLY
;//*****************************************************************
;//初始化程序開始
EXPORT InitSystem
InitSystem
;//禁止看門狗
ldr r0, =WTCON
ldr r1, =0
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) ;//設定系統主時鐘頻率, 倍頻為((P_DIV+2)*(2的S_DIV次方))/(M_DIV+8)
str r1, [r0]
;//]
ldr r0, =CLKCON
ldr r1, =0x7ff8 ;//所有功能單元塊時鐘使能
str r1, [r0]
;//****************************************************************************
;//為BDMA改變BDMACON的復位值
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, InitSystem
ldr r1, =InitSystem
sub r0, r1, r0
ldr r1, =SMRDATA
sub r0, r1, r0
ldmia r0, {r1-r13}
ldr r0, =0x01c80000 ;//BWSCON Address
stmia r0, {r1-r13}
;//****************************************************
;///初始化堆棧
;//Do not use DRAM,such as stmfd,ldmfd......
;//SVCstack is initialized before
;//Under toolkit ver 2.50, msr cpsr, r1 can be used instead of msr cpsr_cxsf,r1
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
orr r1, r0, #SVCMODE|NOINT
msr cpsr_cxsf, r1 ;//SVCMode
ldr sp, =SVCStack
;//USER mode is not initialized.
;//***********************************************
;//設置IQR處理程序入口, 在配置好RAM后設置
ldr r0, =IRQ_SVC_VECTOR
ldr r1, =IRQ_SERVICE
str r1, [r0]
;//***********************************************
mov pc, lr ;//返回
;//*****************************************************************
SMRDATA DATA
;//*****************************************************************
;//存儲器最好配置成最優的性能,下面的參數不是最優化的
;//*****************************************************************
;//*** memory access cycle parameter strategy ***
;// 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
;// 2) The memory settings,here, are made the safe parameters even at 66Mhz.
;// 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
;// 4) DRAM refresh rate is for 40Mhz.
;//bank0 16bit BOOT ROM
;//bank1 8bit NandFlash
;//bank2 16bit IDE
;//bank3 rtl8019 8bit mode
;//bank4
;//bank5 ext
;//bank6 16bit SDRAM
;//bank7 16bit SDRAM
;//LZ44B0X rtl8019 buswide = 16 !
[ BUSWIDTH=16
DCD 0x11110002 ;//Bank0=16bit BootRom(AT29C010A*2) :0x0
| ;//BUSWIDTH=32
DCD 0x22222220 ;//Bank0=OM[1:0], Bank1~Bank7=32bit
]
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
[ BDRAMTYPE="DRAM"
DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN)) ;//GCS6 check the MT value in parameter.a
DCD ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN)) ;//GCS7
| ;//"SDRAM"
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
;//****************************************************
;//本函數用來進入掉電模式
;//****************************************************
;//void EnterPWDN(int CLKCON);//
EnterPWDN
mov r2,r0 ;//r0=CLKCON
ldr r0,=REFRESH
ldr r3,[r0]
mov r1, r3
orr r1, r1, #0x400000 ;//self-refresh enable
str r1, [r0]
nop ;//Wait until self-refresh is issued. May not be needed.
nop ;//If the other bus master holds the bus, ...
nop ;// mov r0, r0
nop
nop
nop
nop
;//enter POWERDN mode
ldr r0,=CLKCON
str r2,[r0]
;//wait until enter SL_IDLE,STOP mode and until wake-up
ldr r0,=0x10
0 subs r0,r0,#1
bne %B0
;//exit from DRAM/SDRAM self refresh mode.
ldr r0,=REFRESH
str r3,[r0]
mov pc,lr
;//*******************************************************
IRQ_SERVICE ;//using I_ISPR register.
IMPORT pIrqStart
IMPORT pIrqFinish
IMPORT pIrqHandler
;//IMPORTANT CAUTION!!!
;//if I_ISPC isn t used properly, I_ISPR can be 0 in this routine.
ldr r4, =I_ISPR
ldr r4, [r4]
cmp r4, #0x0 ;//If the IDLE mode work-around is used, r0 may be 0 sometimes.
beq %F3
ldr r5, =I_ISPC
str r4, [r5] ;//clear interrupt pending bit
ldr r5, =pIrqStart
ldr r5, [r5]
cmp r5, #0
movne lr, pc ;// .+8
movne pc, r5
mov r0, #0x0
0
movs r4, r4, lsr #1
bcs %F1
add r0, r0, #1
b %B0
1
ldr r1, =pIrqHandler
ldr r1, [r1]
cmp r1, #0
movne lr, pc
movne pc, r1
2
ldr r0, =pIrqFinish
ldr r0, [r0]
cmp r0, #0
movne lr, pc ;// .+8
movne pc, r0
cmp r0, #0
movne lr, pc
movne pc, r0
3
ldmfd sp!, {r0} ;//從IRQ返回
msr spsr_cxsf, r0
ldmfd sp!, {r0-r12, pc}^
;//***********************************************
EXPORT IrqHandlerTab
IrqHandlerTab DCD HandleADC
;//***********************************************
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
MAP _ISR_STARTADDRESS
SYS_RST_VECTOR # 4
UDF_INS_VECTOR # 4
SWI_SVC_VECTOR # 4
INS_ABT_VECTOR # 4
DAT_ABT_VECTOR # 4
RESERVED_VECTOR # 4
IRQ_SVC_VECTOR # 4
FIQ_SVC_VECTOR # 4
EXPORT SYS_RST_VECTOR
EXPORT UDF_INS_VECTOR
EXPORT SWI_SVC_VECTOR
EXPORT INS_ABT_VECTOR
EXPORT DAT_ABT_VECTOR
EXPORT RESERVED_VECTOR
EXPORT IRQ_SVC_VECTOR
EXPORT FIQ_SVC_VECTOR
;//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
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 ;//0xc1(c7)fff84
;//****************************************************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -