📄 startup.s
字号:
;/********************************************************************************************************
;* 文件: Startup.s
;* 描述: 主程序及异常向量入口.
;* 编写: bobey
;********************************************************************************************************/
GET S3C2410SFR.S
GET S3C2410_CFG.S
;引入外部函数
IMPORT __main
IMPORT MMU_SetAsyncBusMode
IMPORT MemCFG
IMPORT Init_Port
IMPORT Init_Stack
IMPORT HandlerIRQ
;/**********************************************************************************************************
;* 函数: _Startup.
;* 功能: 此函数为异常程序入口, 应该根据需要确定其定位地址.
;**********************************************************************************************************/
AREA startup,CODE,READONLY
CODE32
ENTRY
_Startup
LDR PC, =HandlerReset ; 复位程序入口
B .
LDR PC, =HandlerSWI ; 软中断入口.
B .
B .
B .
LDR PC, =HandlerIRQ ; IRQ 中断服务程序入口.
LDR PC, =HandlerFIQ ; FIQ 中断服务程序入口.
;bobey
; LDR PC, =HandlerReset ; 复位程序入
; LDR pc,Undef_Inst_Addr ; Undefined Instruction
; LDR pc,Software_Addr ; Software Generated
; LDR pc,Abort_Prefetch_Addr ; Abort Prefetch
; LDR pc,Abort_Data_Addr ; Abort Data
; LDR pc,Reserved_Addr ; Reserved
; LDR pc,IRQ_Addr ; Standard External Interrupt
; LDR pc,FIQ_Addr ; Fast External Interrupt
;/**********************************************************************************************************
;* 函数: HandlerReset.
;* 功能: 复位处理程序.
;**********************************************************************************************************/
HandlerReset
ldr r0, =WTCON ; watch dog disable.
ldr r1, =0x0
str r1, [r0]
ldr r0, =INTMSK
ldr r1, =0xffffffff ; all interrupt disable.
str r1, [r0]
ldr r0, =INTSUBMSK
ldr r1, =0x7ff ; all sub interrupt disable.
str r1, [r0]
LDR R0, =INTPND ; clear INTPND register
LDR R1, =0xffffffff
STR R1, [R0]
LDR R0, =SRCPND ; clear SRCPND register
LDR R1, =0xffffffff
STR R1, [R0]
;/**************************************
;* 功能: 配置系统时钟, M_HDIVN.M_PDIVN 在 S3C2410_CFG.S 程序中定义.
;***************************************/
ldr r0, =LOCKTIME
ldr r1, =0xffffff ; To reduce PLL lock time, adjust the LOCKTIME register.
str r1, [r0]
LDR R0, =CLKDIVN ; Clock divider control register.
LDR R1, =((M_HDIVN<<1)|M_PDIVN)
STR R1, [R0]
;/***************************************
;* 功能:配置MMU(内存管理单元) .
;****************************************/
IMPORT MMU_DisableMMU
IMPORT MMU_EnableICache
IMPORT MMU_EnableDCache
BL MMU_SetAsyncBusMode
BL MMU_DisableMMU
BL MMU_EnableICache
BL MMU_EnableDCache
;/***************************************
;* 功能:内部时钟寄存器配置 .
;****************************************/
LDR R0, =CLKCON ; Clock generator control register 控制其他片上模块时钟开关
LDR R1, =0x7FFF0
STR R1, [R0]
LDR R0, =CLKSLOW
LDR R1, =0x00000004
STR R1, [R0]
ldr r0, =MPLLCON ; Configure MPLL. MDIV=161. PDIV=3. SDIV=1
ldr r1, =((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
str r1, [r0] ; Fout=202.8MHz Fin=12MHz .设定好2410主频
NOP
NOP
;/***************************************
;* 功能: 初始化 I/O 端口.
;****************************************/
BL Init_Port
;/***************************************
;* 功能: Set memory control registers.
;****************************************/
LDR R0, =MemCFG ; Memory Controller.
LDMIA R0, {R1-R13}
LDR R0, =BWSCON
STMIA R0, {R1-R13}
;/***************************************
;* 功能: 初始化堆栈, 退出后将在 Sys 模式.
;****************************************/
BL Init_Stack
;/***************************************
;* 功能: 转到系统主函数进行初始化.
;****************************************/
B __main
;/**********************************************************************************************************
;* 函数: HandlerSWI.
;* 功能: 软中断服务程序入口.
;**********************************************************************************************************/
HandlerSWI
B .
;/**********************************************************************************************************
;* 函数: HandlerFIQ.
;* 功能: FIQ 中断服务程序入口.
;**********************************************************************************************************/
HandlerFIQ
B .
;/**********************************************************************************************************
;* 函数: Default_IRQ_ISR.
;* 功能: 非法 IRQ 中断.
;* 即开了中断但未在 IRQ 服务程序中指定相应中断服务程序的入口地址.
;**********************************************************************************************************/
EXPORT Default_IRQ_ISR
Default_IRQ_ISR
B . ; 请查看 IRQ_ISR.S 文件定义.
;/********************************************************************************************************
END
;*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -