📄 ramstart.s
字号:
#nGCS4 - SEG7
#nGCS5 -
#nSCS6 - SDRAM
#nGCS5 nGCS4 nGCS3 nGCS2 nGCS1 nWBE3 nWBE2 nSRAS nSCAS SCLK SCKE
# 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
ldr r1,=rPCONB
ldr r0,=0x7ff
str r0,[r1]
#==== PORT C GROUP ====
# nCTS0 nRTS0 OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT VD4 VD5 VD6 VD7 IISCLK IISDI IISDO IISLRCK
# 11 11 01 01 01 01 01 01 11 11 11 11 11 11 11 11
ldr r1,=rPCONC
ldr r0,=0xf555ffff
str r0,[r1]
ldr r1,=rPUPC
ldr r0,=0x00ff /*#pc[8~15] PULL-UP*/
str r0,[r1]
ldr r1,=rPDATC /*lcd on;led on*/
ldr r0,=0xeeff
str r0,[r1]
#==== PORT D GROUP ====
#VFRAME VM VLINE VCLK VD3 VD2 VD1 VD0 (LCD/MODE)
#10 10 10 10 10 10 10 10
ldr r1,=rPCOND
ldr r0,=0xaaaa
str r0,[r1]
ldr r1,=rPUPD
ldr r0,=0xff /*#disable PULL-UP*/
str r0,[r1]
#==== PORT E GROUP ====
# CODECLK OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT TOUT0 RXD0 TXD0 FOUT OUT
# 10 01 01 01 01 01 10 10 11
ldr r1,=rPCONE
ldr r0,=0x255ab
str r0,[r1]
ldr r1,=rPDATE
ldr r0,=0x0f /*output = 0*/
str r0,[r1]
ldr r1,=rPUPE
ldr r0,=0x0
str r0,[r1]
#==== PORT F GROUP ====
#nCTS1 RXD1 TXD1 nRTS1 nXDREQ0 nXDACK0 nWAIT IICSDA OUTPUT
#010 010 010 010 11 11 10 10 01
ldr r1,=rPCONF
ldr r0,=0x124be9
str r0,[r1]
ldr r1,=rPUPF
ldr r0,=0xff /*disable PULL-UP*/
str r0,[r1]
#==== PORT G GROUP ====
#OUTPUT OUTPUT OUTPUT EINT4 EINT3 EINT2 EINT1 EINT0
#01 01 01 11 11 11 11 11
ldr r1,=rPCONG
ldr r0,=0x57ff
str r0,[r1]
ldr r1,=rPUPG
ldrb r0,=0x00 /*# all pull up and only input pin work*/
strb r0,[r1]
#***************
#* SET ETC *
#***************
ldr r1,=rSPUCR /*#DATA BUS pull-up disable*/
ldrb r0,=0x7
strb r0,[r1]
#EINT7 EINT6 EINT5 EINT4 EINT3 EINT2 EINT1 EINT0
# ------ falling edge ------
#000 000 000 100 010 100 010 010
ldr r1,=rEXTINT /*# EINT2,3,4 falling edge*/
ldr r0,=0x42422
str r0,[r1]
ldr r0,=INTMSK
ldr r1,=0x07ffffff /*#all interrupt disable*/
str r1,[r0]
#****************************************************
#* Set clock control registers *
#****************************************************
ldr r0,=LOCKTIME
ldr r1,=800 /*# EX) count = t_lock * Fin (t_lock=200us, Fin=10MHz) = 2000*/
str r1,[r0]
ldr r0,=PLLCON /*#temporary setting of PLL*/
ldr r1, =0x34031 /*#Fin=10MHz,Fout=60MHz,*/
str r1,[r0]
ldr r0,=CLKCON
ldr r1,=0x7fd8
str r1,[r0]
ldr r0,=rBWSCON /*#BWSCON Address*/
ldr r1,=0x11000100
str r1,[r0]
ldr r0,=rBANKCON0
ldr r1,=0x700
str r1,[r0]
ldr r0,=rBANKCON1
ldr r1,=0x700 /* 0x7ffc */
str r1,[r0]
ldr r0,=rBANKCON2
ldr r1,=0x700 /* 0x7ffc */
str r1,[r0]
ldr r0,=rBANKCON3
ldr r1,=0x7568
str r1,[r0]
ldr r0,=rBANKCON4
ldr r1,=0x700 /* 0x7ffc */
str r1,[r0]
ldr r0,=rBANKCON5
ldr r1,=0x700 /* 0x7ffc */
str r1,[r0]
ldr r0,=rBANKCON6
ldr r1,=0x18008
str r1,[r0]
ldr r0,=rBANKCON7
ldr r1,=0x18000
str r1,[r0]
ldr r0,=rREFRESH
ldr r1,=0xac03e1
str r1,[r0]
ldr r0,=rBANKSIZE
ldr r1,=0x16
str r1,[r0]
ldr r0,=rMRSRB6
ldr r1,=0x020
str r1,[r0]
ldr r0,=rMRSRB7
ldr r1,=0x020
str r1,[r0]
#/*************************************************************************/
#/* Initialize stacks */
#/*************************************************************************/
ldr sp, =SVCStack
bl InitStacks
#/*************************************************************************/
#/* Call startram -- Run at sdram from this inst */
#/*************************************************************************/
LDR pc, = startram
#/*************************************************************************/
#/* Clear the un-initialized global and static C data areas */
#/*************************************************************************/
#{
startram :
LDR a1,=Image_ZI_Base /* Pickup the start of the BSS area */
MOV a3,#0 /* Clear value in a3 */
LDR a2,=Image_ZI_Limit /* Pickup the end of the BSS area */
CMP a1,a2
BEQ move_data
clear_loop :
STR a3,[a1],#4 /* Clear a word, a1 += 4 */
CMP a1,a2 /* end of ZI ? */
BNE clear_loop /* If not, continue with the BSS clear */
#
# Move the initialized global and initialized C data areas
#
move_data :
LDR a1,=Image_RW_Base /* Pickup the start of the DATA area */
LDR a2,=Image_RO_Limit /* Pickup the start of the DATA storage */
LDR a3,=Image_ZI_Base /* Pickup the end of the BSS area */
CMP a1,a3
BEQ goto_main
move_loop :
LDR a4,[a2],#4
STR a4,[a1],#4 /* move a word, a1 += 4, a2 += 4 */
CMP a1,a3 /* end of DATA ? */
BNE move_loop /* If not, continue with the BSS clear */
goto_main :
BL Main
#/*************************************************************************/
#/* The function for initializing stack */
#/*************************************************************************/
InitStacks:
mrs r0,cpsr
bic r0,r0,#MODEMASK /*;r0 AND NOT MODEMASK -> r0 (MODEMASK = 0x1f) */
/*;r0 OR UNDEFMODE|NOINT -> r1 */
orr r1,r0,#UNDEFMODE|NOINT /*UndefMode*/
msr cpsr_cxsf,r1
ldr sp,=UndefStack
orr r1,r0,#ABORTMODE|NOINT /*;AbortMode*/
msr cpsr_cxsf,r1
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
bic r0,r0,#MODEMASK|0x80
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 /*;SVCMode*/
ldr sp,=SVCStack
mov pc,lr /*;The LR register may be not valid for the mode changes.*/
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -