第一部分: 启动代码
;==================================================================
;文件: startup.s
;修改: 李光祥 chenfengmcu@126.com
;日期: 2008/10/9
;描述: 基于ARM处理器S3C44b0X C语言启动代码
; 初始化ISP,栈,C变量
;版本历史记录 V1.0
;==================================================================
;外设和存器空间信息
;nGCS0 :ROM HY29LV160 0x0000_0000~0x001f_ffff
;nGCS1 :USB PDIUSBD12 0x0200_0000~0x03ff_ffff
;nGCS2 :ATA 0x0400_0000~0x05ff_ffff
;nGCS3 :NET RTL9019AS 0x0600_0000~0x07ff_ffff
;nGCS4 :-- 0x0800_0000~0x09ff_ffff
;nGCS5 :-- 0x0a00_0000~0x0bff_ffff
;nGCS6 :RAM HY57V641620 0x0c00_0000~0x0dff_ffff
;nGCS7 :-- 0x0c80_0000~0x0fff_ffff
;APP RAM=0xc000000~0xc7effff
;44BMON RAM=0xc7f0000~0xc7fffff
;STACK RAM=0xc7ffa00
;==================================================================
_ISR_STARTADDRESS EQU 0xc7fff00
GBLA BUSWIDTH
BUSWIDTH SETA 16
GBLL PLLONSTART
PLLONSTART SETL {TRUE}
GBLA PLLCLK
PLLCLK SETA 64000000
[ PLLCLK = 64000000
M_DIV EQU 8
P_DIV EQU 2
S_DIV EQU 1
]
;==================================================================
;看门狗定时器预定义
WTCON EQU 0x01d30000
;系统时钟预定义
PLLCON EQU 0x01d80000
CLKCON EQU 0x01d80004
LOCKTIME EQU 0x01d8000c
;存储器控制预定义
REFRESH EQU 0x01c80024
;BDMA目的寄存器
BDIDES0 EQU 0x1f80008
BDIDES1 EQU 0x1f80028
;==================================================================
;中断控制预定义
INTPND EQU 0x01e00004
INTMOD EQU 0x01e00008
INTMSK EQU 0x01e0000c
I_ISPR EQU 0x01e00020
I_CMST EQU 0x01e0001c
;预定义常数(常量)
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
I_BIT EQU 0x80
F_BIT EQU 0x40
T_BIT EQU 0x20
;==================================================================
GBLL THUMBCODE ;定义指定状态逻辑变量
[ {CONFIG} = 16 ;判定汇编器在Thumb汇编
THUMBCODE SETL {TRUE}
CODE32 ;指示代码为ARM指令
|
THUMBCODE SETL {FALSE}
]
[ THUMBCODE ;启动在Thumb时转向RAM
CODE32
]
;------------------------------------------------------------------
MACRO ;中断向量宏定义
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4 ;减SP指针为存跳转地址
stmfd sp!,{r0} ;将ro入栈<