?? startup.s
字號:
;/****************************************Copyright (c)**************************************************
;** 廣州致遠電子有限公司
;**
;** http://www.21cm.com.cn
;**
;**--------------文件信息--------------------------------------------------------------------------------
;**文 件 名: startup.s
;**創 建 人: 黃紹斌
;**最后修改日期: 2005年11月11日
;**描 述: S3C2410異常向量表與c語言代碼的接口,包括初始化堆棧、堆空間分配、打開/關斷中斷的代碼
;**
;**--------------歷史版本信息----------------------------------------------------------------------------
;** 創建人:
;** 版 本:
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
; /* 定義堆棧的大小 */
;// **** 用戶可根據實際需要修改 ****
SVC_STACK_LEGTH EQU 64
FIQ_STACK_LEGTH EQU 64
IRQ_STACK_LEGTH EQU 64
ABT_STACK_LEGTH EQU 0
UND_STACK_LEGTH EQU 0
; /*************************************************************************/
; /* CPSR寄存器的位域 */
; /*************************************************************************/
; /* */
; /* 31 30 29 28 7 6 5 4 3 2 1 0 */
; /*+---+---+---+---+--ss--+---+---+---+---+---+---+---+---+ */
; /*| N | Z | C | V | | I | F | T | M4 ~ M0 | */
; /*+---+---+---+---+--ss--+---+---+---+---+---+---+---+---+ */
; /* */
; /* Processor Mode and Mask */
; /* */
; /*************************************************************************/
Mode_USR EQU 0x10
Mode_FIQ EQU 0x11
Mode_IRQ EQU 0x12
Mode_SVC EQU 0x13
Mode_ABT EQU 0x17
Mode_UND EQU 0x1B
Mode_SYS EQU 0x1F
I_BIT EQU 0x80 ; //when I bit is set (1), IRQ is disabled
F_BIT EQU 0x40 ; //when F bit is set (1), FIQ is disabled
IMPORT __use_no_semihosting_swi
; /************************************************************************/
; /* 引入的外部標號在這聲明 */
IMPORT __main ; //C語言主程序入口
IMPORT FIQ_Exception ; //FIQ中斷服務程序
IMPORT IRQ_Exception ; //IRQ中斷服務程序
IMPORT TargetBusInit ; //針對目標板的總線系統初始化
IMPORT TargetResetInit ; //調用main函數前目標板初始化代碼
; /* 給外部使用的標號在這聲明 */
EXPORT vectors
EXPORT ResetInit
EXPORT DisableMMU
EXPORT EnableICache
EXPORT DisableICache
EXPORT EnableDCache
EXPORT DisableDCache
EXPORT bottom_of_heap
EXPORT StackUsr
;EXPORT __rt_div0
EXPORT Reset
EXPORT __user_initial_stackheap
; /************************************************************************/
CODE32
AREA vectors,CODE,READONLY
; /* 異常向量表 */
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
ResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Exception
FIQ_Addr DCD FIQ_Handler
; /* 未定義指令 */
Undefined
B Undefined
; /* 軟中斷 */
SoftwareInterrupt
CMP R0, #4
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR
SwiFunction
DCD IRQDisable ;//0
DCD IRQEnable ;//1
DCD FIQDisable ;//2
DCD FIQEnable ;//3
IRQDisable
; 關IRQ中斷
MRS R0, SPSR
ORR R0, R0, #I_BIT
MSR SPSR_c, R0
MOVS PC, LR
IRQEnable
; 開IRQ中斷
MRS R0, SPSR
BIC R0, R0, #I_BIT
MSR SPSR_c, R0
MOVS PC, LR
FIQDisable
; 關FIQ中斷
MRS R0, SPSR
ORR R0, R0, #F_BIT
MSR SPSR_c, R0
MOVS PC, LR
FIQEnable
; 開FIQ中斷
MRS R0, SPSR
BIC R0, R0, #F_BIT
MSR SPSR_c, R0
MOVS PC, LR
; /* 取指中止 */
PrefetchAbort
B PrefetchAbort
; /* 取數據中止 */
DataAbort
B DataAbort
; /* 快速中斷 */
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Exception ; //FIQ中斷處理
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
;/*********************************************************************************************************
;** 函數名稱: DisableMMU
;** 功能描述: 禁止MMU
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 黃紹斌
;** 日 期: 2005年11月30日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
DisableMMU
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<0)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** 函數名稱: EnableICache
;** 功能描述: 使能指令CACHE
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 黃紹斌
;** 日 期: 2005年11月30日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
EnableICache
MRC p15,0,R0,c1,c0,0
ORR r0,R0,#(1<<12)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** 函數名稱: DisableICache
;** 功能描述: 禁止指令CACHE
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 黃紹斌
;** 日 期: 2005年11月30日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
DisableICache
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<12)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** 函數名稱: EnableDCache
;** 功能描述: 使能數據CACHE
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 黃紹斌
;** 日 期: 2005年11月30日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
EnableDCache
MRC p15,0,R0,c1,c0,0
ORR R0,R0,#(1<<2)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** 函數名稱: DisableDCache
;** 功能描述: 禁止數據CACHE
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 黃紹斌
;** 日 期: 2005年11月30日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
DisableDCache
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<2)
MCR p15,0,R0,c1,c0,0
MOV PC,LR
;/*********************************************************************************************************
;** 函數名稱: InitStack
;** 功能描述: 初始化堆棧
;** 輸 入: 無
;** 輸 出 : 無
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 說 明: 給CPSR_c賦值采用宏的方式
;** 修 改: 黃紹斌
;** 日 期: 2005年11月11日
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
InitStack
MOV R0, LR
; /* 設置管理模式堆棧 */
MSR CPSR_c, #(Mode_SVC | I_BIT | F_BIT) ; 0xd3
LDR SP, StackSvc
; /* 設置中斷模式堆棧 */
MSR CPSR_c, #(Mode_IRQ | I_BIT | F_BIT) ; 0xd2
LDR SP, StackIrq
; /* 設置快速中斷模式堆棧 */
MSR CPSR_c, #(Mode_FIQ | I_BIT | F_BIT) ; 0xd1
LDR SP, StackFiq
; /* 設置中止模式堆棧 */
MSR CPSR_c, #(Mode_ABT | I_BIT | F_BIT) ; 0xd7
LDR SP, StackAbt
; /* 設置未定義模式堆棧 */
MSR CPSR_c, #(Mode_UND | I_BIT | F_BIT) ; 0xdb
LDR SP, StackUnd
; /* 設置系統模式堆棧 */
MSR CPSR_c, #(Mode_SYS | I_BIT | F_BIT) ; 0xdf
LDR SP, =StackUsr
MOV PC, R0
;/*********************************************************************************************************
;** 函數名稱: ResetInit
;** 功能描述: 復位入口
;**
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ResetInit
BL InitStack ; //初始化堆棧
BL TargetBusInit ; //總線系統初始化 (函數中不允許堆棧操作)
BL TargetResetInit ; //針對目標板的系統初始化
MRC p15,0,R1,c1,c0,0 ; //(MMU設置,異步總線模式) 讀控制寄存器
ORR R1,R1,#0xC0000000 ; //當HDIVN=1時操作有效
MRC p15,0,R1,c1,c0,0
B __main ; //跳轉到c語言入口
;/*********************************************************************************************************
;** 函數名稱: __user_initial_stackheap
;** 功能描述: 庫函數初始化堆和棧,不能刪除
;**
;** 輸 入: 參考庫函數手冊
;**
;** 輸 出: 參考庫函數手冊
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap
LDR r0,=bottom_of_heap
MOV pc,lr
StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
; /* 分配堆棧空間 */
AREA MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;//管理模式堆棧空間
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;//中斷模式堆棧空間
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;//快速中斷模式堆棧空間
AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;//中止義模式堆棧空間
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;//未定義模式堆棧
AREA Heap, DATA, NOINIT
bottom_of_heap SPACE 1
AREA Stacks, DATA, NOINIT
StackUsr
END
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -