?? startup.s
字號:
;/****************************************Copyright (c)**************************************************
;** 廣州周立功單片機(jī)發(fā)展有限公司
;** 研 究 所
;** 產(chǎn)品一部
;**
;** http://www.zlgmcu.com
;**
;**--------------文件信息--------------------------------------------------------------------------------
;**文 件 名: Startup.s
;**創(chuàng) 建 人: 陳明計
;**最后修改日期: 2004年2月2日
;**描 述: lpc22xx的啟動代碼,包含異常向量入口、初始化堆棧的代碼等
;** 每個工程應(yīng)當(dāng)有獨立的這個文件的拷貝,并進(jìn)行相應(yīng)的修改
;**--------------歷史版本信息----------------------------------------------------------------------------
;** 創(chuàng)建人: 陳明計
;** 版 本: v1.0
;** 日 期: 2004年2月2日
;** 描 述: 原始版本
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人:
;** 版 本:
;** 日 期:
;** 描 述:
;**
;**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
;定義堆棧的大小
FIQ_STACK_LEGTH EQU 0
IRQ_STACK_LEGTH EQU 9*8 ;每層嵌套需要9個字堆棧,允許8層嵌套
ABT_STACK_LEGTH EQU 0
UND_STACK_LEGTH EQU 0
NoInt EQU 0x80
USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11
PINSEL2 EQU 0xE002C014
BCFG0 EQU 0xFFE00000
BCFG1 EQU 0xFFE00004
BCFG2 EQU 0xFFE00008
BCFG3 EQU 0xFFE0000C
;引入的外部標(biāo)號在這聲明
IMPORT FIQ_Exception ;快速中斷異常處理程序
IMPORT __main ;C語言主程序入口
IMPORT TargetResetInit ;目標(biāo)板基本初始化
IMPORT StackUsr
IMPORT bottom_of_heap
IMPORT SoftwareInterrupt
;給外部使用的標(biāo)號在這聲明
EXPORT Reset
EXPORT __rt_div0
EXPORT __user_initial_stackheap
CODE32
AREA vectors,CODE,READONLY
ENTRY
;中斷向量表
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, [PC, #-0xff0]
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 0
FIQ_Addr DCD FIQ_Handler
;未定義指令
Undefined
B Undefined
;取指令中止
PrefetchAbort
B PrefetchAbort
;取數(shù)據(jù)中止
DataAbort
B DataAbort
;快速中斷
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
;/*********************************************************************************************************
;** 函數(shù)名稱: InitStack
;** 功能描述: 初始化堆棧
;** 輸 入: 無
;** 輸 出 : 無
;** 全局變量: 無
;** 調(diào)用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
InitStack
MOV R0, LR
;設(shè)置中斷模式堆棧
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;設(shè)置快速中斷模式堆棧
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;設(shè)置中止模式堆棧
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;設(shè)置未定義模式堆棧
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;設(shè)置系統(tǒng)模式堆棧
MSR CPSR_c, #0xdf
LDR SP, =StackUsr
MOV PC, R0
;/*********************************************************************************************************
;** 函數(shù)名稱: ResetInit
;** 功能描述: 復(fù)位入口
;**
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調(diào)用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ResetInit
;初始化外部總線控制器,根據(jù)目標(biāo)板決定配置
LDR R0, =PINSEL2
LDR R1, =0x0f814924
STR R1, [R0]
LDR R0, =BCFG0
LDR R1, =0x10000400
STR R1, [R0]
; LDR R0, =BCFG1
; LDR R1, =0x2000ffef
; STR R1, [R0]
; LDR R0, =BCFG2
; LDR R1, =0x2000ffef
; STR R1, [R0]
; LDR R0, =BCFG3
; LDR R1, =0x2000ffef
; STR R1, [R0]
BL InitStack ;初始化堆棧
BL TargetResetInit ;目標(biāo)板基本初始化
;跳轉(zhuǎn)到c語言入口
B __main
;/*********************************************************************************************************
;** 函數(shù)名稱: __user_initial_stackheap
;** 功能描述: 庫函數(shù)初始化堆和棧,不能刪除
;**
;** 輸 入: 參考庫函數(shù)手冊
;**
;** 輸 出: 參考庫函數(shù)手冊
;**
;** 全局變量: 無
;** 調(diào)用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap
LDR r0,=bottom_of_heap
MOV pc,lr
;/*********************************************************************************************************
;** 函數(shù)名稱: __rt_div0
;** 功能描述: 整數(shù)除法除數(shù)為0錯誤處理函數(shù),替代原始的__rt_div0減少目標(biāo)代碼大小
;**
;** 輸 入: 參考庫函數(shù)手冊
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調(diào)用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__rt_div0
B __rt_div0
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
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中斷模式堆棧空間
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中斷模式堆棧空間
AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止義模式堆棧空間
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定義模式堆棧
END
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -