?? vectors.s
字號:
;**--------------文件信息--------------------------------------------------------------------------------
;**文 件 名: vectors.s
;**描 述: lpc210x異常向量入口及異常向量與c語言代碼的接口,包括初始化堆棧的代碼
;********************************************************************************************************/
;定義堆棧的大小
USR_STACK_LEGTH EQU 64
SVC_STACK_LEGTH EQU 0
FIQ_STACK_LEGTH EQU 16
IRQ_STACK_LEGTH EQU 64
ABT_STACK_LEGTH EQU 0
UND_STACK_LEGTH EQU 0
;引入的外部標號在這聲明
IMPORT FIQ_Exception ;快速中斷異常處理程序
IMPORT Reset
;給外部使用的標號在這聲明
EXPORT InitStack
EXPORT Vectors
CODE32
AREA Startup,CODE,READONLY
;中斷向量表
Vectors
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 Reset
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
;軟中斷
SoftwareInterrupt
B SoftwareInterrupt
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
;** 功能描述: 初始化堆棧
;** 輸 入: 無
;** 輸 出 : 無
;** 全局變量: 無
;** 調用模塊: 無
;********************************************************************************************************/
InitStack
MOV R0, LR ;保存程序返回值,bx指令會將pc復制給lr=r14,pc=r15
;設置管理模式堆棧
MSR CPSR_c, #0xd3 ;模式切換,管理模式
LDR SP, StackSvc
;設置中斷模式堆棧
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 ;斷點返回
StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4
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
UsrStackSpace SPACE USR_STACK_LEGTH * 4 ;用戶(系統)模式堆??臻g
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆??臻g
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中斷模式堆??臻g
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中斷模式堆??臻g
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 + -