- pWTCON EQU 0x53000000 ;看門狗定時器口地址
- pLOCKTIME EQU 0x4c000000 ;鎖定時間計數值寄存器地址
- pCLKDIVN EQU 0x4c000014 ;時鐘控制寄存器地址
- pUPLLCON EQU 0x4c000008 ;
- pMPLLCON EQU 0x4c000004
- pBWSCON EQU 0x48000000 ;設置數據總線寬度與等待狀態控制寄存器地址
- pSRCPND EQU 0x4a000000 ;中斷源狀態寄存器地址
- pINTPND EQU 0x4a000010 ;中斷狀態寄存器地址
- pINTMOD EQU 0x4a000004 ;中斷模式寄存器地址
- pINTMSK EQU 0x4a000008 ;中斷屏蔽寄存器地址
- pINTSUBMSK EQU 0x4a00001c ;子中斷狀態源寄存器地址
- pINTOFFSET EQU 0x4a000014 ;中斷源偏移地址寄存器地址
- pGPFCON EQU 0x56000050 ;GPIO F口控制寄存器地址
- pGPFUP EQU 0x56000058 ;F口上拉電阻控制寄存器地址
- _ISR_STARTADDRESS EQU 0x33FFFF00 ;中斷服務向量表起始地址
- vCLKDIVN EQU 0x5
- vUPLLCON EQU 0x00038022
- vMPLLCON EQU 0x0005c011
- vU_MDIV EQU 56 ;Fin=12.0MHz Fout=48MHz
- vU_PDIV EQU 2
- DW16 EQU (0x1)
- DW32 EQU (0x2)
- B1_BWSCON EQU (DW16) ; AMD flash(AM29LV160DB), 16-bit, for nCS1
- B2_BWSCON EQU (DW16) ; PCMCIA(PD6710), 16-bit
- B3_BWSCON EQU (DW16) ; Ethernet(CS8900), 16-bit
- B4_BWSCON EQU (DW32) ; Intel Strata(28F128), 32-bit, for nCS4
- B5_BWSCON EQU (DW16) ; A400/A410 Ext, 16-bit
- B6_BWSCON EQU (DW32) ; SDRAM(K4S561632C) 32MBx2, 32-bit
- B7_BWSCON EQU (DW32) ; N.C.
- ;BANK0CON
- B0_Tacs EQU 0x3 ;0clk
- B0_Tcos EQU 0x3 ;0clk
- B0_Tacc EQU 0x7 ;14clk
- B0_Tcoh EQU 0x3 ;0clk
- B0_Tah EQU 0x3 ;0clk
- B0_Tacp EQU 0x1
- B0_PMC EQU 0x0 ;normal
- ;BANK1CON
- B1_Tacs EQU 1;0x0 ;0clk
- B1_Tcos EQU 1;0x0 ;0clk
- B1_Tacc EQU 6;0x7 ;14clk
- B1_Tcoh EQU 1;0x0 ;0clk
- B1_Tah EQU 1;0x0 ;0clk
- B1_Tacp EQU 0x0
- B1_PMC EQU 0x0 ;normal
- ;Bank 2 parameter
- B2_Tacs EQU 1;0x0 ;0clk
- B2_Tcos EQU 1;0x0 ;0clk
- B2_Tacc EQU 6;0x7 ;14clk
- B2_Tcoh EQU 1;0x0 ;0clk
- B2_Tah EQU 1;0x0 ;0clk
- B2_Tacp EQU 0x0
- B2_PMC EQU 0x0 ;normal
- ;Bank 3 parameter
- B3_Tacs EQU 0x1;0 ;0clk
- B3_Tcos EQU 0x1;0 ;0clk
- B3_Tacc EQU 0x6;7 ;14clk
- B3_Tcoh EQU 0x1;0 ;0clk
- B3_Tah EQU 0x1;0 ;0clk
- B3_Tacp EQU 0x0
- B3_PMC EQU 0x0 ;normal
- ;Bank 4 parameter
- B4_Tacs EQU 0x1;0 ;0clk
- B4_Tcos EQU 0x1;0 ;0clk
- B4_Tacc EQU 0x6;7 ;14clk
- B4_Tcoh EQU 0x1;0 ;0clk
- B4_Tah EQU 0x1;0 ;0clk
- B4_Tacp EQU 0x0
- B4_PMC EQU 0x0 ;normal
- ;Bank 5 parameter
- B5_Tacs EQU 0x1;0 ;0clk
- B5_Tcos EQU 0x1;0 ;0clk
- B5_Tacc EQU 0x6;7 ;14clk
- B5_Tcoh EQU 0x1;0 ;0clk
- B5_Tah EQU 0x1;0 ;0clk
- B5_Tacp EQU 0x0
- B5_PMC EQU 0x0 ;normal
- ;Bank 6 parameter
- B6_MT EQU 0x3 ;SDRAM
- B6_Trcd EQU 0x1 ;3clk
- B6_SCAN EQU 0x1 ;9bit
- ;Bank 7 parameter
- B7_MT EQU 0x3 ;SDRAM
- B7_Trcd EQU 0x1 ;3clk
- B7_SCAN EQU 0x1 ;9bit
- ;REFRESH parameter
- REFEN EQU 0x1 ;Refresh enable
- TREFMD EQU 0x0 ;CBR(CAS before RAS)/Auto refresh
- Trp EQU 0x1 ;3clk
- Tsrc EQU 0x1 ;5clk Trc= Trp(3)+Tsrc(5) = 8clock
- Tchr EQU 0x2 ;3clk
- REFCNT EQU 1268;1463;1268 ;HCLK=105Mhz, (2048+1-7.81*100);75M->1463
- ;CPSR中各種工作模式的設置信息
- USERMODE EQU 0x10
- FIQMODE EQU 0x11
- IRQMODE EQU 0x12
- SVCMODE EQU 0x13
- ABORTMODE EQU 0x17
- UNDEFMODE EQU 0x1b
- MODEMASK EQU 0x1f
- NOINT EQU 0xc0
- ;各種工作模式下堆棧指針初值設置
- UserStack EQU 0x33ff4800
- SVCStack EQU 0x33ff5800
- UndefStack EQU 0x33ff5c00
- AbortStack EQU 0x33ff6000
- IRQStack EQU 0x33ff7000
- FIQStack EQU 0x33ff8000
- AREA Init,CODE,READONLY
- ENTRY
- EXPORT __ENTRY
- __ENTRY
- ResetEntry
-
- b _reset
- b . ;handler for Undefined mode
- b . ;handler for SWI interrupt
- b . ;handler for PAbort
- b . ;handler for DAbort
- b . ;reserved
- b IsrIRQ ;handler for IRQ interrupt
- b . ;handler for FIQ interrupt
- ;SDRAM參數設置,包括數據寬度,刷新模式和頻率
- SMRDATA
- DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
- 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)+(Tsrc<<18)+(Tchr<<16)+REFCNT)
- DCD 0x32 ;SCLK power saving mode, BANKSIZE 128M/128M
- DCD 0x30 ;MRSR6 CL=3clk
- DCD 0x30 ;MRSR7 CL=3clk
-
-
-
-
- IsrIRQ
- sub sp,sp,#4
- stmfd sp!,{r8-r9}
- ldr r9,=pINTOFFSET
- ldr r9,[r9]
- ldr r8,=HandleEINT0
- add r8,r8,r9,lsl #2
- ldr r8,[r8]
- str r8,[sp,#8]
- ldmfd sp!,{r8-r9,pc}
- LTORG
- _reset
- ldr r0,=pWTCON ;關閉看門狗定時器
- ldr r1,=0x0
- str r1,[r0]
- ldr r0,=pINTMSK
- ldr r1,=0xffffffff ;屏蔽所有中斷請求
- str r1,[r0]
- ldr r0,=pINTSUBMSK
- ldr r1,=0x7fff ;關閉所有子中斷請求,1為無中斷請求,0~14為有效設置位,其余為保留位。
- str r1,[r0]
- ;設置PLL鎖存時間 To reduce PLL lock time, adjust the LOCKTIME register.
- ldr r0,=pLOCKTIME
- ldr r1,=0xffffff
- str r1,[r0]
- ldr r0,=pCLKDIVN
- ldr r1,=vCLKDIVN ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
- str r1,[r0]
- ;Configure UPLL
- ldr r0,=pUPLLCON
- ldr r1,=vUPLLCON ;Fin = 12.0MHz, UCLK = 48MHz
- str r1,[r0]
- nop ;Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
- nop
- nop
- nop
- nop
- nop
- nop
- ;Configure MPLL
- ldr r0,=pMPLLCON
- ldr r1,=vMPLLCON ;Fin = 12.0MHz, FCLK = 400MHz
- str r1,[r0]
- ;設置SDRAM存儲器參數
- ;Set memory control registers
- adrl r0, SMRDATA ;be careful!
- ldr r1,=pBWSCON ;BWSCON Address
- add r2, r0, #52 ;End address of SMRDATA
- 0
- ldr r3, [r0], #4
- str r3, [r1], #4
- cmp r2, r0
- bne %B0
- InitStacks ;初始化可能用到的工作模式下的堆棧區
- mrs r0,cpsr
- bic r0,r0,#MODEMASK|NOINT
-
- orr r1,r0,#IRQMODE
- msr cpsr_cxsf,r1 ;IRQMode
- ldr sp,=IRQStack ; IRQStack=0x33FF_7000
- orr r1,r0,#FIQMODE
- msr cpsr_cxsf,r1 ;FIQMode
- ldr sp,=FIQStack ; FIQStack=0x33FF_8000
- orr r1,r0,#USERMODE
- msr cpsr_cxsf,r1
- ldr sp,=UserStack
- ldr pc,=Main
- LTORG
-
-
- Main
- ldr r0,=pINTMOD
- ldr r1,=0x0
- str r1,[r0]
- ldr r0,=pGPFCON
- ldr r1,=0x080
- str r1,[r0]
- ldr r0,=pGPFUP
- ldr r1,=0xff
- str r1,[r0]
- ldr r0,=HandleEINT0+0x0c
- adrl r1,interrupt
- str r1,[r0]
- ldr r0,=0x20005000
- ldr r1,=0x00
- str r1,[r0]
- ldr r0,=pINTMSK
- ldr r1,=0x0FFFFFFF7
- str r1,[r0]
- wait_server
- b .
- ;
- mrs r0,cpsr
- bic r0,r0,#MODEMASK|NOINT
- orr r1,r0,#USERMODE
- msr cpsr_cxsf,r1
- b wait_server
- LTORG
- interrupt
- ;sub lr,r14,#4
- stmfd sp!,{r8,r9,lr}
- LOOP0
- ldr r0,=0x20005000
- ldr r1,=0x01
- str r1,[r0]
- bl Delay
- ldr r0,=0x20005000
- ldr r1,=0x03
- str r1,[r0]
- bl Delay
- ldr r0,=0x20005000
- ldr r1,=0x07
- str r1,[r0]
- bl Delay
- ldr r0,=0x20005000
- ldr r1,=0x0f
- str r1,[r0]
- bl Delay
- ldr r0,=0x20005000
- ldr r1,=0x00
- str r1,[r0]
- ldr r0,=pSRCPND
- mov r1,#8
- str r1,[r0]
- ldr r0,=pINTPND
- str r1,[r0]
- ldmfd sp!,{r8,r9,pc}
- LTORG
-
- Delay
- stmfd sp!,{r8,r9,lr}
- ldr r7,=0x7a120
- LOOP9 sub r7,r7,#1
- cmp r7,#0
- bne LOOP9
- ldmfd sp!,{r8,r9,pc}
- LTORG
- AREA RamData,DATA,READWRITE
- ^ _ISR_STARTADDRESS
- HandleEINT0 # 4
- HandleEINT1 # 4
- HandleEINT2 # 4
- HandleEINT3 # 4
- END
復制代碼
|