?? startup.s
字號:
;/****************************************Copyright (c)**************************************************
;** 廣州周立功單片機發展有限公司
;** 研 究 所
;** 產品一部
;**
;** http://www.zlgmcu.com
;**
;**--------------文件信息--------------------------------------------------------------------------------
;**文 件 名: Startup.s
;**創 建 人: 陳明計
;**最后修改日期: 2004年3月3日
;**描 述: lpc22xx的啟動代碼,包含異常向量入口、初始化堆棧的代碼等
;** 每個工程應當有獨立的這個文件的拷貝,并進行相應的修改
;**--------------歷史版本信息----------------------------------------------------------------------------
;** 創建人: 陳明計
;** 版 本: v1.0
;** 日 期: 2004年2月2日
;** 描 述: 原始版本
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版 本: v1.01
;** 日 期: 2004年3月3日
;** 描 述: 修改總線配置以適應多數情況
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版 本: v1.02
;** 日 期: 2004年3月27日
;** 描 述: 增加代碼以支持芯片的加密功能
;**
;**--------------當前版本修訂------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
;定義堆棧的大小
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
;引入的外部標號在這聲明
IMPORT FIQ_Exception ;快速中斷異常處理程序
IMPORT __main ;C語言主程序入口
IMPORT TargetResetInit ;目標板基本初始化
IMPORT StackUsr
IMPORT bottom_of_heap
IMPORT SoftwareInterrupt
;給外部使用的標號在這聲明
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
;取數據中止
DataAbort
B DataAbort
;快速中斷
FIQ_Handler
STMFD SP!, {R0-R3, LR}
BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
;/*********************************************************************************************************
;** 函數名稱: InitStack
;** 功能描述: 初始化堆棧
;** 輸 入: 無
;** 輸 出 : 無
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
InitStack
MOV R0, LR
;設置中斷模式堆棧
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;設置快速中斷模式堆棧
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;設置中止模式堆棧
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;設置未定義模式堆棧
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;設置系統模式堆棧
MSR CPSR_c, #0xdf
LDR SP, =StackUsr
MOV PC, R0
;/*********************************************************************************************************
;** 函數名稱: ResetInit
;** 功能描述: 復位入口
;**
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 日 期: 2004年3月3日
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
ResetInit
;初始化外部總線控制器,根據目標板決定配置
LDR R0, =PINSEL2
IF :DEF: EN_CRP
LDR R1, =0x0f814910
ELSE
LDR R1, =0x0f814914
ENDIF
STR R1, [R0]
LDR R0, =BCFG0
LDR R1, =0x1000ffef
STR R1, [R0]
LDR R0, =BCFG1
LDR R1, =0x1000ffef
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 ;目標板基本初始化
;跳轉到c語言入口
B __main
;/*********************************************************************************************************
;** 函數名稱: __user_initial_stackheap
;** 功能描述: 庫函數初始化堆和棧,不能刪除
;**
;** 輸 入: 參考庫函數手冊
;**
;** 輸 出: 參考庫函數手冊
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年2月2日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap
MOV pc,lr
;/*********************************************************************************************************
;** 函數名稱: __rt_div0
;** 功能描述: 整數除法除數為0錯誤處理函數,替代原始的__rt_div0減少目標代碼大小
;**
;** 輸 入: 參考庫函數手冊
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 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
;/*********************************************************************************************************
;** 函數名稱: CrpData
;** 功能描述: 支持芯片加密功能
;**
;** 輸 入: 無
;**
;** 輸 出: 無
;**
;** 全局變量: 無
;** 調用模塊: 無
;**
;** 作 者: 陳明計
;** 日 期: 2004年3月27日
;**-------------------------------------------------------------------------------------------------------
;** 修改人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
IF :DEF: EN_CRP
IF . >= 0x1fc
INFO 1,"\nThe data at 0x000001fc must be 0x87654321.\nPlease delete some source before this line."
ENDIF
CrpData
WHILE . < 0x1fc
NOP
WEND
CrpData1
DCD 0x87654321 ;/* 當此數為0x87654321時,用戶程序被保護 */
ENDIF
;/* 分配堆棧空間 */
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
;********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -